一、實參和形參
def greet_user(username):
print("hello,"+username.title()+"!")
greet_user('jesse')
在上面這個例子中,greet_user(username)中的username變數就是形參,形參就是函式完成其工作時所需要的一項資訊。下面函式呼叫greet_user('jesse')中的『jesse'就是實參,實參是呼叫函式時傳遞給函式的資訊。
在greet_user('jesse')中將』jesse'傳遞給函式greet_user(),這個值被儲存在形參username中。
二、傳遞實參
2.1位置實參
呼叫函式時,python必須將函式呼叫中的每個實參都關聯到函式定義中的乙個形參。為此,最簡單的關聯方式是基於實參的順序。這種關聯方式被稱為位置實參。
def describe_pet(animal_type,pet_name):
print("\ni h**e a "+animal_type+".")
print("my"+animal_type+"'s name is"+pet_name.title())
describe_pet('hamster','harry')
執行結果:
位置實參的順序很重要,必須一一對應。
2.2 關鍵字實參
關鍵字實參是傳遞給函式的名稱-值對。你直接在實參中將名稱和值關聯起來了,因此向函式傳遞實參時不會混淆。關鍵字實參讓你無需考慮函式中實參順序,還清楚的指出了函式呼叫中各個值得用途。
還是describe_pet()函式,呼叫方式改成describe_pet(animal_type='hamster',pet_name='harry')。
2.3 預設值
編寫函式時,可給每個形參指定預設值。在呼叫函式中給形參提供了實參時,python將使用指定的實參,否則將使用形參的預設值。因此,給形參指定預設值後,可在函式呼叫中省略相應的實參。
def describe_pet(animal_type,pet_name='harry'):
print("\ni h**e a "+animal_type+".")
print("my"+animal_type+"'s name is"+pet_name.title())
describe_pet('hamster')
在以上的函式呼叫中,只提供乙個實參,它會自動對應到第乙個形參,也就是說python依舊將這個實參當作位置實參。所以,使用預設值時,在形參列表中必須先列出沒有預設值的形參,再列出有預設值的形參。
在某些情況下可以使用預設值讓實參變成可選的。
比如下面的函式定義:
def get_formatted_name(first_name,last_name,middle_name=''):
為了將中間名變成可選的,將其移到形參列表結尾,並設定其值為空字串。這樣在傳遞實參時可以選擇性傳middle_name。
2.4等效的函式呼叫
鑑於可混合使用位置實參、關鍵字實參和預設值,通常有多種等效的函式呼叫方式。
def describe_pet(pet_name,animal_type=』dog'):
基於這種定義,在任何情況下都必須給pet_name提供引數;指定該實參時可以使用位置方式,也可以使用關鍵字方式。如果要描述的動物不是小狗,還必須在函式呼叫中給animal_type提供實參;同樣,指定該實參時可以使用位置方式,也可以使用關鍵字方式。
下面對這個函式的呼叫都可以:
describe_pet('willie') #預設值和位置實參
describe_pet(pet_name='willie') #預設值和關鍵字實參
describe_pet('harry','hamster') #位置實參,忽略預設值
describe_pet(pet_name='harry',animal_type='hamster') #關鍵字實參,忽略預設值
2.5傳遞列表
傳遞列表只是將列表作為實參傳遞給函式,要注意一下幾點:
(1)將列表作為實參傳遞給函式之後,函式就可以對其進行修改。在函式中對這個列表所做的任何修改都是永久性的,這讓你能夠搞笑的處理大量的資料。
(2)如果需要禁止函式修改列表,可以向函式傳遞列表的副本而不是原件;這樣函式所做的任何修改都只影響副本,而不影響原件。可用列表切片[:]建立列表副本(這個上篇部落格有說)。
(3)雖然向函式傳遞列表副本可保留原始列表的內容,但除非有充分的理由需要傳遞副本,否則還是應該將原始列表傳遞給函式,因為讓函式使用現成列表可避免花時間和記憶體建立副本,從而提高效率,在處理大型列表時更應該如此。
2.6傳遞任意數量的實參
def make_pizza(*toppings):
print(toppings)
形參名*topping中的*號讓python建立乙個名為topping的空元組,並將所有收到的值都封裝在這個元組中。
函式呼叫:
make_pizza(『pepperoni')
make_pizza('mushrooms','green peppers','extra cheese')
執行結果:
注意:如果要讓函式接受不同型別的實參,必須在函式定義中將接納任意數量實參的形參放在最後。python先匹配位置實參和關鍵字實參,再將餘下的實參都收集到最後乙個形參中。
示例:
執行結果:
2.7傳遞任意數量的關鍵字實參
有時候需要接受任意數量的實參,但預先不知道傳遞給函式的會是什麼樣的資訊。可將函式編寫成能夠接受任意數量的鍵值對。
def build_profile(first,last,**user_info):
形參**user_info中的兩個星號讓python建立乙個名為user_info的空字典,並將收到的所有名稱-值對都封裝到這個字典中。在這個函式中,可以像訪問其他字典那樣訪問user_info中的名稱-值對。
python函式基礎傳參高階函式
筆記1.函式基礎 1.1 def函式定義,func 是方法 def func 1.2 佔位符 pass 1.3 返回值,結束的意思,必須要用值接收 return 2.函式引數 必備引數 位置引數 關鍵字引數 2.1 必備引數 2.2 形參 2.3 實參 3.常見的內建簡單函式 3.1 檢視函式 di...
python 函式傳參 傳參和傳引用
首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...
Python函式傳參
首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...