日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别

發布時間:2025/3/20 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本上判斷python對象是否為可調用的函數,有三種方法:

1、使用內置的callable函數

callable(func)

用于檢查對象是否可調用,返回True也可能調用失敗,但是返回False一定不可調用

2、判斷對象類型是否是FunctionType

type(func) is FunctionType

# 或者

isinstance(func, FunctionType)

3、判斷對象是否實現__call__方法

hasattr(func, '__call__')

例子:

# 三種驗證方式的區別fromtypes import FunctionTypeclass A(object):

@staticmethod

def f1():return 'from f1'@classmethod

def f2(cls,*arg):return 'from f2'def f3(self,*arg):return 'from f3'def f4():

passif __name__ == '__main__':

a=A()

print('靜態方法,實例調用驗證')

print(callable(a.f1)) # True

print(type(a.f1)isFunctionType) # True

print(hasattr(a.f1,'__call__')) # True

print('靜態方法,類調用驗證')

print(callable(a.f2)) # True

print(type(a.f2)isFunctionType) # False

print(hasattr(a.f2,'__call__')) # True

print('類方法驗證')

print(callable(A.f3)) # True

print(type(A.f3)isFunctionType) # True

print(hasattr(A.f3,'__call__')) # True

print('實例方法驗證')

print(callable(a.f3)) # True

print(type(a.f3)isFunctionType) # False

print(hasattr(a.f3,'__call__')) # True

print('函數驗證')

print(callable(f4)) # True

print(type(f4)isFunctionType) # True

print(hasattr(f4,'__call__')) # True

"""

通過運行結果,發現三種方法的驗證結果并不相同。

主要是type(func) is FunctionType方法,在驗證類方法和實例方法時,會返回False,

從調試的結果上看,實例方法,和類方法的類型都是,不是FunctionType,所以會返回False。

"""

python中分為函數(function)和方法(method),函數是python中一個可調用對象(用戶定義的可調用對象,及lambda表達式

創建的函數,都是函數,其類型都是FunctionType),方法是一種特殊的類函數。

官方文檔中,對于method的定義:

Methods are always bound to an instance of a user-defined class

類方法和類進行綁定,實例方法與實例進行綁定,所以兩者的類型都是method。

而靜態方法,本身即不和類綁定,也不和實例綁定,不符合上述定義,所以其類型應該是function。

其中還有需要注意的是,如果一個類實現了__call__方法,那么其實例也會成為一個可調用對象,其類型為創建這個實例的類,而不是函數或方法。

class MyClass(object):

def __call__(self,*args, **kwargs):returnselfif __name__ == '__main__':

myclass=MyClass()

print(callable(myclass)) # True

所以通過類型去判斷Python對象是否可調用,需要同時判斷是函數(FunctionType)還是方法(MethodType),或者類是否實現__call__方法。

如果只是單純判斷python對象是否可調用,用callable()方法會更穩妥。

總結

以上是生活随笔為你收集整理的python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。