Python 自定義函式的特殊屬性

2021-08-22 13:49:12 字數 3819 閱讀 5505

python 中通過函式定義所建立的使用者自定義函式物件均具有一些特殊屬性,需要注意的是這裡介紹的是自定義函式(function型別)的特殊屬性,而非方法(method型別)的特殊屬性,函式和方法的特熟屬性以及預設的返回值可能不盡相同。

對於大多數特殊屬性,可以通過下面這個例子示範一下:

class test():

def func(self, v = 'dog'):

'''這裡演示乙個閉包函式'''

name = 'dobi'

def inn_func(age = 1):

print(name, v, age)

return inn_func

test = test()

clsfunc = test.func()

首先看一下方法與函式的區別:例項的函式為bound method,而類的函式以及閉包均為function,需要強調的是 python 2.x 中類的函式為unbound method,這點與python 3.x 有所不同,本文則基於 python 3.51 整理。

print(test.func)

# print(test.func)

# >

print(clsfunc)

# .inn_func at 0x0000020f071d7f28>

可寫;用於獲取函式的文件說明,如果沒有,則返回none

print('test.func.__doc__:', test.func.__doc__)

# test.func.__doc__: 這裡演示乙個閉包函式

test.func.__doc__ = 'ddd' #注意,這裡是 test,不能是 test

print('test.func.__doc__:', test.func.__doc__)

# test.func.__doc__: ddd

可寫;獲取函式的名稱。

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

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

可寫;返回函式所在的模組,如果無則返回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

可寫;以元組的形式返回函式的預設引數,如果無缺省引數則返回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,)

可寫;返回已編譯的函式物件。

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__:

唯讀,以字典的形式返回函式所在的全域性命名空間所定義的全域性變數。

print('test.func.__globals__:', test.func.__globals__)

# test.func.__globals__:

可寫;以字典的形式返回命名空間所支援的任意自定義的函式屬性。

print('test.func.__dict__:', test.func.__dict__)

# test.func.__dict__: {}

唯讀;以包含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

def dog(name:str, age:(1, 99), species:'狗狗的品種'):

return (name, age, species)

print(dog.__annotations__)

#

可寫,具體詳見python的函式注釋

def dog(name, host=10, *, age=18):

print(name, host, age)

print(dog.__defaults__)

print(dog.__kwdefaults__)

#(10,)

#

可寫,具體詳見python 的 keyword-only arguments (強制關鍵字引數)

Python自定義函式

可選引數是python的乙個特性,顧名思義就是這個引數是可有可沒有的。如果你學過其他的語言,那麼你會很清楚明白他的不同點的。def fun n,m 1 s 1for i in range 1 n 1 s i return s m m就是可選引數,如果在呼叫他的時候不給m就預設為1 eg1 fun 1...

python自定義函式

在python中有一種自定義函式為匿名函式,可以用lambda關鍵字定義。通過lambda構造的函式可以沒有名稱,最大的特點是在自定義匿名函式時所有 只能在一行內完成,語法如下 lambda parameters function expressionlambda為匿名函式的關鍵起始詞 parame...

Python自定義函式

python中的自定義函式,其理解意思相當於c 中的自定義方法,但是建立的方式不同。說他與c 的方法相同,那麼就自然有 無引數無返回值,有引數無返回值,無引數有返回值,有引數有返回值。函式 建立函式 無引數無返回值 deffunction print 輸出依據 print 呼叫 函式呼叫 funct...