Python學習筆記 函式引數

2021-08-18 03:49:28 字數 3817 閱讀 2540

剛開始學習python,看了一些資料,總結記錄一下基本的python函式引數。

python中函式定義,有五種引數分類,分別為:位置引數、預設引數、可變引數、關鍵字引數、命名關鍵字引數。

(1)位置引數

也稱必選引數,也就是函式呼叫時,必須傳遞實參值。這類引數很簡單,如下,呼叫add函式時必須傳值給引數x,y,否則報錯。

def 

add(x, y):

print("x+y="

, x+y)

add(3

,5)

(2)預設引數

預設引數,顧名思義,引數有預設值,呼叫函式時,可不傳值給預設引數。如下:

def 

add(x, y=5):

print("x+y="

, x+y)

add(3)

注:(1)預設引數必須在必選引數之後;(2)預設引數必須指向不變物件。

例如,

def 

addtest(l=):

print(l)

addtest()

addtest()

執行結果:

這是由於引數l指向了列表,每次呼叫都會改變l的值,每次呼叫l值都不相同,都會多乙個字串「test」。

修改:

def 

addtest(l=none):

if l is none:

l =

print(l)

addtest()

addtest()

(3)可變引數

可變引數是指傳入函式的引數個數是可變的,可以是0個或者任意多個。在函式內部,可變引數接收到的是乙個元組tuple。

如,求和計算sum=1+2+3+4+......

def 

_sum(*numbers):

s = 0

for n in numbers:

s=s+n

print("結果為:"

, s)

_sum(1, 2

, 3)

_sum(1, 2

, 3, 4

, 5)

當然,以上_sum函式的引數也可以是列表或者元組,執行結果是一樣的,如果是列表或者元組的話,就是普通的位置引數。

此外,對於已構建的列表,可以加「*」號,將列表元素作為可變引數傳遞給函式。

def 

_sum(*numbers):

s = 0

for n in numbers:

s=s+n

print("結果為:"

, s)

_sum(1, 2

, 3)

_sum(1, 2

, 3, 4

, 5)

#定義列表,*numbers將list的所有元素作為可變引數傳進去

numbers=[1,2

,3,4

,5]_sum(*numbers)

(4)關鍵字引數

可變引數可以傳遞0或任意多個實參,在函式內部自動組裝成元組。關鍵字引數允許傳遞0或任意多個含引數名的引數,這些關鍵字引數在函式內部組裝成字典。

def 

student(name, age, **keywords):

print("name:"

,name,

",age:"

,age,

",keywrods:"

,keywords)

student("guangyi"

,16)

student("guangyi"

, 16

, city="hang"

,gender="m")

對於已構建的字典,可以加「**」,將字典的所有key-value用關鍵字引數傳遞到函式的**keywords中,keywords將獲得乙個字典,它是傳入字典的拷貝

def 

student(name, age, **keywords):

print("name:"

,name,

",age:"

,age,

",keywrods:"

,keywords)

student("guangyi"

,16)

student("guangyi"

, 16

, city="hang"

,gender="m")

information=

# 將字典information的所有key-value用關鍵字引數傳遞到函式的**keywords中,keywords將獲得乙個字典,它是傳information的拷貝

student("guangyi"

, 16

, **information)

注:對字典keywrods的更改不會影響原字典information

(5)命名關鍵字引數

它與關鍵字引數的不同在於,關鍵字引數是命名的,必須且只能傳入指定名字的引數,如下,只能傳入引數名為「city」和「job」的關鍵字引數。(命名關鍵字引數需要乙個分隔符「*」,「*」後面的為命名關鍵字引數)

def 

student(name,age,*,city,job):

print("name:"

, name,

",age:"

, age,

",city:"

, city,

"job:"

,job)

student("guangyi",16

,city="hang"

,job="it engineer")

另,如果關鍵字引數前面有可變引數,可不加分隔符「*」

def 

student(name,age,*args,city,job):

print("name:"

, name,

",age:"

, age,

"args:"

,args ,

",city:"

, city,

"job:"

,job)

student("guangyi",16

,1,2

,"test"

,city="hang"

,job="it engineer")

總結:命名關鍵字引數前必須有分隔符「*」,或者可變引數,否則無法識別命名關鍵字引數

命名關鍵字引數可以有預設值,如下,引數「city」給定預設值「hang zhou」,函式呼叫時,該引數可以使用預設值。

def 

student(name,age,*args,city="hang zhou "

,job):

print("name:"

, name,

",age:"

, age,

"args:"

,args ,

",city:"

, city,

"job:"

,job)

student("guangyi"

, 16, 1

, 2, "test"

, job="it engineer")

最後,引數可以組合使用,但是定義的順序必須為位置引數、預設引數、可變引數、命名關鍵字引數、關鍵字引數

Python學習筆記 函式引數

定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需了解。python的函式引數十分靈活,可以分為 必選引數 作為函式呼叫的介面所必須具備的引數。預設引數 ...

Python學習筆記 函式引數

power x,n 函式有兩個引數 x和n,這兩個引數都是位置引數,呼叫函式時,傳入的兩個值按照位置順序依次賦給引數x和n def power x,n 2 s 1 while n 0 n n 1 s s x return s預設引數必須指向不變物件!設定預設引數時,有幾點要注意 一是必選引數在前,預...

Python學習筆記 Python函式引數

本人使用python已有一段時間,一直沒有時間進行系統學習,現在根據使用過程中記錄的問題,逐個尋找答案,並記錄至此。在使用python的過程中,不可避免的需要閱讀python原始碼,對其中的函式引數一直不是很明白,今天個人實踐一下。def func arg1,arg2 pass 這是我在編碼過程中寫...