在我的代碼中,我需要檢測一個變量是否是一個函數,並對它執行一些操作。爲什麼functools.partial沒有被檢測爲types.FunctionType?
一切都進行得很順利,直到我現在用functools
,突然產生一個局部功能我的一些測試失敗:
import types
import functools
def f(s):
print(s)
l = lambda s: print(s)
pf = functools.partial(f, 'Hello World')
pl = functools.partial(l, 'Hello World')
test_f = isinstance(f, types.FunctionType) # True
test_l = isinstance(l, types.FunctionType) # True
test_pf = isinstance(pf, types.FunctionType) # False
test_pl = isinstance(pl, types.FunctionType) # False
爲什麼會出現這些差異?這兩種變種都是可以調用的......更重要的是,如果我不能使用types.FunctionType
,我怎麼能檢測出某個變量是否爲函數?
爲什麼你需要檢查某些東西是否是明確的函數?檢查某些東西是否可以[(可調用的)](https://docs.python.org/3/library/functions.html#callable)是否足夠好? – mgilson
*'types.FunctionType','types.LambdaType' - 由'lambda'表達式創建的用戶定義函數和函數的類型。* - 顯然不包含任何'partial'返回值。 – deceze
@mgilson這是可能的,如果沒有其他解決方案,我並不完全反對它,但希望有 –