函式呼叫裡的 和

2021-07-31 16:58:20 字數 1948 閱讀 6936

一般來說,無論是函式呼叫還是宣告,單個星號表示元組(或是列表)「出現」,而兩個星號則代表附近有字典「出沒」。

函式呼叫裡的*和**

check_web_server(host, port, path):

用check_web_server('127.0.0.1', 80, '/admin/')即可呼叫和這個函式。

那要是這些資訊在乙個三元組裡的話,例如host_info=('www.python.org', 80, '/'),這時呼叫就會變成check_web_server(host_info[0], host_info[1], host_info[2])。

這時單星號就可以解決,用下面的例子和上面的**是等價的:check_web_server(*host_info)。

而雙星號對字典的用法也類似,host_info=,

於是函式的呼叫就變成了:check_web_server(**host),這就告訴函式在開啟字典時,每個鍵時引數的名字,同時對應的值是函式呼叫的引數。

即它就等於check_web_server('host': 'www.python.org', 'port': 80, 'path': '/')

函式宣告裡的*和**

它們讓python得以支援變長引數,函式可接受任何數量的引數。

當定義乙個三個引數的函式時(沒有預設值的引數),呼叫者必須傳入正好三個引數。

如果需要更大的靈活性,則可以用單星號表示的元組來定義乙個變長引數,建立乙個daily_sales_total函式:

def daily_sales_total(*all_sales):

total=0.0

for each_sale in all_sales:

total+=float(each_sale)

return total

相應地合法函式呼叫有:

def daily_sales_total()

def daily_sales_total(10.00)

def daily_sales_total(5.00, 1.50, '128.75')

還可以把普通引數和變長引數混在一起使用,如def check_web_server(host, port, path, *args):

注意:在函式定義裡使用變長引數時,所有必須出現的引數一定先出現,然後是有預設值的引數,最後才是變長引數。

類似的,也可以在函式宣告裡用雙星號來接受任意數目的關鍵字引數,它們會在函式被呼叫的時候匯入到乙個字典裡去

def check_web_server(host, port, path, *args, **kwargs):

實際上,還有一種全部由變長引數組成的所謂通用python方法:def f(*args, **kwargs):

這樣的函式可以按照f(), f(a, b, c), f(a, b, foo=c, bar=d)等任何方式呼叫,它可以接受任意形式的輸入了。

動態建立字典:

>>> bobagrs=dict((f+ '_contains', 'bob') for f in ('title', 'subtitle', 'text', 'byline'))

>>> bobagrs

>>> bo=((f+ '_contains', 'bob') for f in ('title', 'subtitle', 'text', 'byline'))

>>> bo

at 0x1067705a0>

dict(bo)就可以把乙個迭代器轉換成字典型別。

>>> list(bo)

[('title_contains', 'bob'), ('subtitle_contains', 'bob'), ('text_contains', 'bob'), ('byline_contains', 'bob')]

>>> a=

>>> a.items()

[('a', 1), ('b', 2)]

>>> dict(a)

shell從函式檔案裡呼叫函式

碰到乙個shell中函式呼叫的小問題,記錄一下。shell中函式有三種呼叫方式,一種是在檔案前面定義函式,然後在以下直接呼叫 一種是通重載入shell,在shell中直接呼叫 第三種是將函式寫入檔案。然後在其它shell中呼叫函式。這裡寫一下關於第三種方法的樣例 is it a directory ...

函式柯里化 函式鏈式呼叫 lazyman

實現鏈式呼叫實現 add函式,add 1 2 3 4 輸出10,然後考慮拓展性 解析為add 1 返回函式a,a 2 返回函式b,b 3 返回函式c function add num 但是如果鏈式呼叫加長,這種方法顯然不能滿足需求 改進 function add num return func 這樣...

呼叫函式和被呼叫函式的關係

1 當在乙個函式的執行期間呼叫另乙個函式時,在執行被呼叫函式之前,系統需要完成三件事情 1 將所有的實參 返回位址等資訊傳遞給被呼叫函式儲存 2 為被呼叫函式的區域性變數分配儲存區 3 將控制轉移到被調函式的入口。2 從被呼叫函式返回到呼叫函式之前,系統要做三件事情 1 儲存被調函式的計算結果 2 ...