这两个代码片段之间有什么区别?使用type():
import types
if type(a) is types.DictType:
do_something()
if type(b) in types.StringTypes:
do_something_else()
Run Code Online (Sandbox Code Playgroud)
使用isinstance():
if isinstance(a, dict):
do_something()
if isinstance(b, str) or isinstance(b, unicode):
do_something_else()
Run Code Online (Sandbox Code Playgroud) 有时需要在Python中检查参数.例如,我有一个函数接受网络中其他节点的地址作为原始字符串地址或接收封装其他节点信息的类Node.
我使用type(0函数,如:
if type(n) == type(Node):
do this
elif type(n) == type(str)
do this
Run Code Online (Sandbox Code Playgroud)
这是一个很好的方法吗?
更新1: Python 3具有函数参数的注释.这些可用于使用工具进行类型检查:http://mypy-lang.org/
我有一个Python函数,它接受一个必须是整数的数字参数,以使其行为正确.在Python中验证这个的首选方法是什么?
我的第一反应是做这样的事情:
def isInteger(n):
return int(n) == n
Run Code Online (Sandbox Code Playgroud)
但我不禁想到这是1)昂贵的2)丑陋和3)受到机器epsilon的温柔怜悯.
Python是否提供任何本地的类型检查变量方法?或者这被认为是违反语言的动态类型设计?
编辑:因为有很多人问过 - 有问题的应用程序使用IPv4前缀,从平面文本文件中获取数据.如果任何输入被解析为浮点数,则该记录应被视为格式错误并被忽略.
我正在运行的代码是:
>>> from collections import abc
>>> mydict = {'test_key': 'test_value'}
>>> isinstance(mydict, abc.Mapping)
True
Run Code Online (Sandbox Code Playgroud)
我明白了什么isinstance呢,但我不知道是什么abc.Mapping的呢collections?
好像这条线isinstance(mydict, abc.Mapping)被用来检查那mydict是一本字典?
这不是更容易
isinstance(mydict, dict)吗?
我做了一些搜索并在这个帖子中找到了相关的注释:检查Python变量类型的最佳(惯用)方法是什么?,但我仍然无法弄清楚为什么abc.Mapping在这里使用比使用更好dict.
我遇到的答案这里类型检查在一般情况下,键入检查号码,然后键入检查字符串.大多数人似乎都回应说,由于鸭子打字,不应该在python(<2.6)中执行类型检查.我对鸭子打字的(有限)理解是通过使用对象的属性来确定类型.如果我没有使用任何属性,该怎么办?
我有一个简单的函数,它根据参数确定常量,该参数应该是一个数字.我提出了一个由...定义的异常
class outOfBoundsError(ValueError):
"""
Specified value is outside the domain.
"""
Run Code Online (Sandbox Code Playgroud)
一条消息告诉他们他们给我的号码太大了.我想保持这条消息的具体内容.但是如果参数是一个字符串(如'charlie'),它仍然认为参数大于我指定的数字(并引发我的异常).我应该在代码中添加一个虚拟行,argument + 2以便引发TypeError吗?
注意:我对ABC一无所知,但我不认为它们可用,因为我们可以访问的最新python版本是2.5 :(.
我仍然是Python的新手,我正在尝试习惯它的动态类型.有时我有一个函数或类需要某个类型的参数,但是可以得到另一个类型的值,它可以强制它.例如,它可能期望a float而是接收int或decimal.或者它可能需要一个字符串,而是接收一个定义__str__特殊方法的对象.
将论证强制转换为正确的类型(及其原因)的最佳做法是什么?我是在函数/类中还是在调用者中执行此操作?如果在调用者中,我是否也在函数中检查它?例如.
备选方案1:
def myfunc(takes_float):
myval = float(takes_float)
myfunc(5)
Run Code Online (Sandbox Code Playgroud)
备选方案2:
def myfunc(takes_float):
myval = takes_float
myfunc(float(5))
Run Code Online (Sandbox Code Playgroud)
备选方案3:
def myfunc(takes_float):
assert isinstance(takes_float, float)
myval = takes_float
myfunc(float(5))
Run Code Online (Sandbox Code Playgroud)
我已经读这个答案和这一次,他们说,在Python检查类型是"坏"的,但我不想把时间浪费在追踪非常简单的错误,这些错误会在静态类型被立即拾起编译器语言.
我知道我可以使用type()和isinstance()来检查变量是否属于某种类型或属于某个类。我想知道是否有一种快速的方法来检查变量是否为“数字”类型,类似于MATLAB中的isnumeric。如果变量是int,long,float,double,int或float数组等,则应返回True。非常感谢任何建议。
谢谢。