如何检查变量是否为整数?
当前回答
如果变量像字符串一样输入(例如。“2010”):
if variable and variable.isdigit():
return variable #or whatever you want to do with it.
else:
return "Error" #or whatever you want to do with it.
在使用这个之前,我用try/except和检查(int(变量))解决了它,但它是较长的代码。我想知道在资源的使用和速度上是否有什么不同。
其他回答
当这样一个基本的,有效的,我认为是平凡的问题被提出时,看到如此激烈的讨论真是令人震惊。
有些人指出,针对int(和long)的类型检查可能会在遇到大十进制数的情况下出错。完全正确。
有些人指出,你应该“只做x + 1,看看是否会失败”。好吧,一方面,这也适用于浮点数,另一方面,很容易构造一个肯定不是很数字的类,但以某种方式定义了+运算符。
我不同意许多大力宣称你不应该检查类型的帖子。好吧,GvR曾经说过这样的话,在纯理论中,这可能是对的,但在实践中,isinstance通常是有用的(那是一段时间前,没有链接;你可以在类似这篇文章中阅读GvR对相关问题的看法)。
有趣的是,很多人似乎认为OP的意图是检查给定x的类型是否为数值整数类型——我所理解的是我通常在使用OP的话时的意思:x是否代表整数。这是非常重要的:比如问别人他们想选多少个项目,你可能想检查你得到的是一个非负整数。这样的用例比比皆是。
在我看来,重要的是要看到(1)类型检查只是程序正确性的一种度量,而且通常是相当粗略的,因为(2)通常是有边界的值有意义,而越界的值毫无意义。有时,只有一些间歇值是有意义的——比如考虑所有的数字,在给定的情况下,只有那些实数(非复数)、整数是可能的。
有趣的是,似乎没有人提到检查x == math。楼层(x)。如果这应该给出一些大的十进制类的错误,那么也许是时候重新思考OOP范式了。还有PEP 357考虑了如何使用不那么明显是整数但肯定是整数的值作为列表索引。我不确定我是否喜欢这个解决方案。
你可以这样做:
name = 'Bob'
if type(name) == str:
print 'this works'
else:
print 'this does not work'
它会返回'this works'…但是如果你将name改为int(1),那么它将返回'this does not work',因为它现在是一个字符串… 你也可以试试:
name = int(5)
if type(name) == int:
print 'this works'
else:
print 'this does not work'
同样的事情会发生
到目前为止,所有提出的答案似乎都忽略了一个事实,即双精度浮点数(python中的浮点数实际上是双精度浮点数)也可以是整数(如果小数点后没有任何数字)。我使用内置的is_integer()方法对double进行检查。
示例(在for循环中每x次执行一次操作):
for index in range(y):
# do something
if (index/x.).is_integer():
# do something special
编辑:
在调用此方法之前,始终可以将其转换为浮点数。有三种可能性:
>>> float(5).is_integer()
True
>>> float(5.1).is_integer()
False
>>> float(5.0).is_integer()
True
否则,你可以先检查它是否像Agostino说的那样是int型:
def is_int(val):
if type(val) == int:
return True
else:
if val.is_integer():
return True
else:
return False
val=3
>>> isinstance(val,int )
True
将工作。
如果你想写一个Python 2-3兼容的代码
要测试一个值是否为整数(任何类型),你可以这样做:
# Python 2 and 3:
import sys
if sys.version_info < (3,):
integer_types = (int, long,)
else:
integer_types = (int,)
>>> isinstance(1, integer_types)
True
# Python 2 only:
if isinstance(x, (int, long)):
...
# Python 3 only:
if isinstance(x, int):
...
来源:http://python3porting.com/differences.html
推荐文章
- 如何使x轴和y轴的刻度相等呢?
- Numpy在这里函数多个条件
- 在Python中,使用argparse只允许正整数
- 如何排序mongodb与pymongo
- 不可变与可变类型
- 列表是线程安全的吗?
- 操作系统。makdirs在我的路径上不理解“~”
- 如何在Django模板中获得我的网站的域名?
- 在django Forms中定义css类
- 如何在Python中scp ?
- Numpy Max vs amax vs maximum
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 每n行有熊猫
- 实例属性attribute_name定义在__init__之外
- 如何获取在Python中捕获的异常的名称?