成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python 自定義函數(shù)的特殊屬性(收藏專用)

zhou_you / 2955人閱讀

Python 中通過函數(shù)定義所創(chuàng)建的用戶自定義函數(shù)對象均具有一些特殊屬性,需要注意的是這里介紹的是自定義函數(shù)(function類型)的特殊屬性,而非方法(method 類型)的特殊屬性,函數(shù)和方法的特熟屬性以及默認(rèn)的返回值可能不盡相同。

對于大多數(shù)特殊屬性,可以通過下面這個例子示范一下:

class Test():

    def func(self, v = "dog"):
        """這里演示一個閉包函數(shù)"""

        name = "dobi"
        def inn_func(age = 1):
            print(name, v, age)

        return inn_func

test = Test()
clsfunc = test.func()

首先看一下方法與函數(shù)的區(qū)別:實例的函數(shù)為bound method,而類的函數(shù)以及閉包均為function,需要強調(diào)的是 Python 2.x 中類的函數(shù)為unbound method,這點與Python 3.x 有所不同,本文則基于 Python 3.51 整理。

print(Test.func)
# 
print(test.func)
# >
print(clsfunc)
# .inn_func at 0x0000020F071D7F28>
__doc__

可寫;用于獲取函數(shù)的文檔說明,如果沒有,則返回 None。

print("Test.func.__doc__:", Test.func.__doc__)
# Test.func.__doc__: 這里演示一個閉包函數(shù)
Test.func.__doc__ = "ffffd"  #注意,這里是 Test,不能是 test
print("Test.func.__doc__:", Test.func.__doc__)
# Test.func.__doc__: ffffd
__name__

可寫;獲取函數(shù)的名稱。

print("Test.func.__name__:", Test.func.__name__)
# Test.func.__name__: func
Test.func.__name__ = "pet"
print("Test.func.__name__:", Test.func.__name__)
# Test.func.__name__: pet
__qualname__

可寫;獲取函數(shù)的qualname:點示法顯示函數(shù)名稱、所在的類、模塊等梯級地址。

print("Test.func.__qualname__:", Test.func.__qualname__)
# Test.func.__qualname__: Test.func
Test.func.__qualname__ = "path"
print("Test.func.__qualname__:", Test.func.__qualname__)
# Test.func.__qualname__: path
__module__

可寫;返回函數(shù)所在的模塊,如果無則返回None。

print("Test.func.__module__:", Test.func.__module__)
# Test.func.__module__: __main__
Test.func.__module__ = "a"
print("Test.func.__module__:", Test.func.__module__)
# Test.func.__module__: a
__defaults__

可寫;以元組的形式返回函數(shù)的默認(rèn)參數(shù),如果無默認(rèn)參數(shù)則返回None。

print("Test.func.__defaults__:", Test.func.__defaults__)
# Test.func.__defaults__: ("dog",)
Test.func.__defaults__ = ("cat",)
print("Test.func.__defaults__:", Test.func.__defaults__)
# Test.func.__defaults__: ("cat",)
print("clsfunc.__defaults__:", clsfunc.__defaults__)
# clsfunc.__defaults__: (1,)
clsfunc.__defaults__ = (2,)
print("clsfunc.__defaults__:", clsfunc.__defaults__)
# clsfunc.__defaults__: (2,)
__code__

可寫;返回已編譯的函數(shù)對象。

print("Test.func.__code__:", Test.func.__code__)
# Test.func.__code__: 

def func2():print("cat")
Test.func.__code__ = func2.__code__
Test.func()
# cat
print("Test.func.__code__:", Test.func.__code__)
# Test.func.__code__: 
__globals__

只讀,以字典的形式返回函數(shù)所在的全局命名空間所定義的全局變量。

print("Test.func.__globals__:", Test.func.__globals__)
# Test.func.__globals__: {
# "__cached__": None, 
# "Test": , 
# "__builtins__": , 
# "func2": , 
# "__spec__": None, 
# "__doc__": None, 
# "__file__": "D:...a.py", 
# "test": <__main__.Test object at 0x0000020F077E5DA0>, 
# "clsfunc": .inn_func at 0x0000020F071D7F28>, 
# "__package__": None, 
# "__name__": "__main__", 
# "__loader__": <_frozen_importlib_external.SourceFileLoader object at 0x0000020F07289828>
# }
__dict__

可寫;以字典的形式返回命名空間所支持的任意自定義的函數(shù)屬性。

print("Test.func.__dict__:", Test.func.__dict__)
# Test.func.__dict__: {}
__closure__

只讀;以包含cell的元組形式返回閉包所包含的自由變量。

print("Test.func.__closure__:", Test.func.__closure__)
# None
print("clsfunc.__closure__:", clsfunc.__closure__)
# clsfunc.__closure__: (
# , 
# 
# )
print("clsfunc.__closure__[x]:", clsfunc.__closure__[0].cell_contents, clsfunc.__closure__[1].cell_contents)
# clsfunc.__closure__[x]: dobi dog
__annotations__

可寫;具體詳見“Python 的函數(shù)注釋”

__kwdefaults__

可寫,具體詳見 “Python 的 Keyword-Only Arguments(強制關(guān)鍵字參數(shù))”

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/45475.html

相關(guān)文章

  • ??爆肝十二萬字《python從零到精通教程》,從零教你變大佬??(建議收藏

    文章目錄 強烈推薦系列教程,建議學(xué)起來!! 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內(nèi)部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...

    booster 評論0 收藏0
  • Python進階:迭代器與迭代器切片

    摘要:本文是切片系列的第三篇,主要內(nèi)容是迭代器切片。實際上,迭代器必然是可迭代對象,但可迭代對象不一定是迭代器。這是迭代器切片最具想象力的用途場景??紤]到文件對象天然就是迭代器,我們可以使用迭代器切片先行截取,然后再處理,如此效率將大大地提升。 2018-12-31 更新聲明:切片系列文章本是分三篇寫成,現(xiàn)已合并成一篇。合并后,修正了一些嚴(yán)重的錯誤(如自定義序列切片的部分),還對行文結(jié)構(gòu)與章...

    hedge_hog 評論0 收藏0
  • Python進階:迭代器與迭代器切片

    摘要:本文是切片系列的第三篇,主要內(nèi)容是迭代器切片。實際上,迭代器必然是可迭代對象,但可迭代對象不一定是迭代器。這是迭代器切片最具想象力的用途場景??紤]到文件對象天然就是迭代器,我們可以使用迭代器切片先行截取,然后再處理,如此效率將大大地提升。 2018-12-31 更新聲明:切片系列文章本是分三篇寫成,現(xiàn)已合并成一篇。合并后,修正了一些嚴(yán)重的錯誤(如自定義序列切片的部分),還對行文結(jié)構(gòu)與章...

    omgdog 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<