在 Python 的可调用函数中使用 for 循环并手动执行时结果不一致
Inconsistent result when using a for loop in Python's callable function and doing it manually
我注意到在使用 callable()
函数时出现不一致的行为,代码如下:
>>> x = 4
>>> for i in dir(x):
... if '__' in i:
... continue
... else:
... print i, callable(i)
我得到以下结果:
bit_length False
conjugate False
denominator False
imag False
numerator False
real False
但是手动使用callable()
函数时:
>>> callable(x.bit_length)
True
我在这里错过了什么?
dir(object)
returns a list of strings,所以你基本上做的是 callable("bit_length")
,这显然是错误的(字符串不可调用)。
您可能想要做的是:
for name in dir(obj):
if "__" in name:
continue
attr = getattr(obj, name)
print name, callable(attr)
您正在测试名为 'i' 的字符串('dir' returns 字符串列表)是否可调用。该字符串不可调用。您需要从 'x' 获取名为 'i' 的属性并对其进行测试。
我注意到在使用 callable()
函数时出现不一致的行为,代码如下:
>>> x = 4
>>> for i in dir(x):
... if '__' in i:
... continue
... else:
... print i, callable(i)
我得到以下结果:
bit_length False
conjugate False
denominator False
imag False
numerator False
real False
但是手动使用callable()
函数时:
>>> callable(x.bit_length)
True
我在这里错过了什么?
dir(object)
returns a list of strings,所以你基本上做的是 callable("bit_length")
,这显然是错误的(字符串不可调用)。
您可能想要做的是:
for name in dir(obj):
if "__" in name:
continue
attr = getattr(obj, name)
print name, callable(attr)
您正在测试名为 'i' 的字符串('dir' returns 字符串列表)是否可调用。该字符串不可调用。您需要从 'x' 获取名为 'i' 的属性并对其进行测试。