首頁 >後端開發 >Python教學 >function是什麼意思?

function是什麼意思?

藏色散人
藏色散人原創
2019-05-15 10:13:3023001瀏覽

function是什麼意思?

Function,表示子程式的一般名詞。在某些程式語言中,它指帶有傳回值的子程式或語句。在一些程式語言中起著關鍵字的作用。

在Python中,function是非常重要且常見的,一般會取得類別或函數的參數資訊。

在Python中,function一般有以下幾類:

一、POSITIONAL_OR_KEYWORD

如果沒有任何*的聲明,那麼就是POSITIONAL_OR_KEYWORD類型的,如同語義一樣,POSITIONAL_OR_KEYWORD類型的參數可以透過位置POSITIONAL傳參調用,也可以過關鍵字KEYWORD傳參。以下是一個最簡單的例子:

def foo(a):
pass
# 位置传参调用
foo(1)
# 关键字传参调用
foo(a=1)

二、VAR_POSITIONAL

#第二種是可變的位置參數,透過一個*前綴來聲明,如果你看到一個*xxx的函數參數聲明(不是函數調用!聲明和調用是兩種不同的含義的),那一定是屬於VAR_POSITIONAL類型的,如同語義,這種類型的參數只能通過位置POSITIONAL傳參調用,不支援關鍵字KEYWORD傳參,在函數內部,VAR_POSITIONAL類型的參數以一個元祖(tuple)顯示,有一點需要注意的,VAR_POSITIONAL類型可以不傳任何參數呼叫也不會報錯,而且只允許存在一個。以下是一個簡單的例子:

def foo(*b):
print(b)
# 不传参数不会报错,参数值是一个空元祖
foo() # 结果是 ()
# 可以传入任意个位置参数调用
foo(1, 2.0, '3', True) #结果是 (1, 2.0, '3', True)

三、KEYWORD_ONLY

第三種是關鍵字參數,這種參數只會在VAR_POSITIONAL類型參數的後面而且不帶**前綴。如同語義,這類參數只能用關鍵字KEYWORD來傳參,不可以用位置傳參,因為位置傳的參數全讓前面的VAR_POSITIONAL類型參數接收完了,所以KEYWORD_ONLY只能透過關鍵字才能接收到參數值。以下是一個簡單的範例:

# VAR_POSITIONAL不需要使用时,可以匿名化
def foo(*, c):
pass
# 只能关键字传参调用
foo(c=1)

四、VAR_KEYWORD

第四種是可變的關鍵字參數,VAR_KEYWORD類型的參數透過**前綴來聲明(不是函數呼叫!聲明和呼叫是兩種不同的意義的)。如同語義,這種類型的參數只能透過關鍵字KEYWORD調用,但可以接收任一個關鍵字參數,甚至是0個參數,在函數內部以字典(dict)顯示。 VAR_KEYWORD類型的參數只允許有一個,只允許在函數的最後聲名。以下是簡單的例子:

def foo(**d):
print(d)
# 不传参数不会报错,参数值是一个空字典
foo() # 结果是 {}
# 可以传入任意个关键字参数调用
foo(a=1, b=2.0, c='3', d=True) # 结果是 {'d': True, 'c': '3', 'b': 2.0, 'a': 1}

五、POSITIONAL_ONLY

#第五個是位置參數,選擇最後說這個,是因為它一點也不重要,屬於python的歷史產物,你無法在高版本的python中創建一個POSITIONAL_ONLY類型的參數,在某種底層的內置函數也許會使用這類型的參數,但我試用inspect模組也沒法正確識別它的命名,但在Ipython的??幫助下,還是能看到Init signature: dict(self, /, *args, **kwargs)這裡的self就是位置參數POSITIONAL_ONLY了。相信我,你不會需要用到它的,現在python推薦用VAR_POSITIONAL來代替它。以下是一個綜合範例:

import inspect
def foo(a, *b, c, **d):
pass
for name, parame in inspect.signature(foo).parameters.items():
print(name, ': ', parame.kind)

預設參數

VAR類型不允許設定預設參數

POSITIONAL_OR_KEYWORD和KEYWORD_ONLY可以自訂預設參數,而VAR_POSITIONAL和VAR_KEYWORD不允許自訂預設參數的,因為VAR_POSITIONAL的預設參數是tuple()空元祖,而VAR_KEYWORD的預設參數是dict()空字典。如果自訂了預設參數的話,呼叫函數的時候可以不必傳參,如果預設值是空的話,那就必須傳參數才能呼叫。

預設參數的位置

POSITIONAL_OR_KEYWORD類型的預設參數一定要放在後面,否則會報錯,KEYWORD_ONLY雖然沒有強制要求,因為都是用關鍵字傳參,誰先誰後都無所謂,但最好還是盡可能地放在後面吧。

預設參數不預設?

預設參數絕對不能設定為可變類型(例如list, dict, set),如果你在函數內改變了預設參數,下次再呼叫時它就不再是預設值了。

正確的範例:

def foo(p1, p2=2.0, *, k1, k2=None):
a_list = k2 or list()
pass
foo(1, k1='3')

以上是function是什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn