在 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' 的属性并对其进行测试。