Python函式預設引數設定

2021-09-26 06:53:39 字數 2153 閱讀 5716

我們知道,在呼叫函式時,如果不指定某個引數,直譯器會丟擲異常。為了解決這個問題,python 允許為引數設定預設值,即在定義函式時,直接給形式引數指定乙個預設值,這樣的話,即便呼叫函式時沒有給擁有預設值的形參傳遞引數,該引數可以直接使用定義函式時設定的預設值。

定義帶有預設值引數的函式,其語法格式如下:

def 函式名(...,形參名=預設值):

**塊

注意,在使用此格式定義函式時,指定有預設值的形式引數必須在所有沒預設值引數的最後,否則會產生語法錯誤。

例如,如下程式為 name、message 形參指定了預設值:

# 為兩個引數指定預設值

def say_hi(name = "孫悟空", message = "歡迎來到c語言中文網"):

print(name, ", 您好")

print("訊息是:", message)

# 全部使用預設引數

say_hi()

# 只有message引數使用預設值

say_hi("白骨精")

# 兩個引數都不使用預設值

say_hi("白骨精", "歡迎學習python")

# 只有name引數使用預設值

say_hi(message = "歡迎學習python")

執行結果為:

孫悟空 , 您好

白骨精 , 您好

白骨精 , 您好

孫悟空 , 您好

從上面程式可以看出,如果只傳入乙個位置引數,由於該引數位於第一位,系統會將該引數值傳給 name 引數。因此,不能按如下方式呼叫 say_hi() 函式:

say_hi("歡迎學習python")
say_hi(name="白骨精", "歡迎學習python")
因為 python 規定,關鍵字引數必須位於位置引數的後面。因此提示錯誤:positional argument follows keyword argument。

那麼,能不能單純地將上面兩個引數交換位置呢?

say_hi("歡迎學習python" , name="白骨精")
上面呼叫依然是錯誤的,因為第乙個字串沒有指定關鍵字引數,因此將使用位置引數為 name 引數傳入引數值,第二個引數使用關鍵字引數的形式再次為 name 引數傳入引數值,這意味著兩個引數值其實都會傳給 name 引數,程式為 name 引數傳入了多個引數值。因此提示錯誤:say_hi() got multiple values for argument 'name'。

將函式呼叫改為如下兩種形式是正確的:

say_hi("白骨精", message="歡迎學習python")

say_hi(name="白骨精", message="歡迎學習python")

上面第一行**先使用位置引數為 name 引數傳入引數值,再使用關鍵字引數為 message 引數傳入引數值;第二行**中的 name、message 引數都使用關鍵字引數傳入引數值。

再次強調,由於 python 要求在呼叫函式時關鍵字引數必須位於位置引數的後面,因此在定義函式時指定了預設值的引數(關鍵字引數)必須在沒有預設值的引數之後。例如如下**:

def print********(char, heigth=5):

for i in range(1, heigth + 1):

for j in range(heigth - 1):

print(" ", end="")

for j in range(2 * i - 1):

print(char, end="")

print()

print********("@", 6)

print********(char="*")

上面程式定義了 print********() 函式,其中,有預設值的 height 形參,必須放在 char 形參的後面;反之,將會造成語法錯誤。

在 python 中,可以使用「函式名.__defaults__」檢視函式的預設值引數的當前值,其返回值是乙個元組。例如,顯示上面定義的 print******** 函式的預設值引數的當前值,可以使用 print********.__defaults__ ,其結果為 (5,)。 

ParseInt函式引數設定

我們經常用parseint函式轉換字串為int數值,parseint函式有兩個引數可以設定,其中第二個引數可以預設。parseint 字串 使用的進製 var num1 parseint 10 2 2 var num1 parseint 10 8 8 var num1 parseint 10 10 ...

引數設定 pandas引數設定小技巧

python大資料分析記錄 分享 成長 在日常使用pandas的過程中,由於我們所分析的資料表規模 格式上的差異,使得同樣的函式或方法作用在不同資料上的效果存在差異。而pandas有著自己的一套 引數設定系統 可以幫助我們在遇到不同的資料時靈活調節從而達到最好的效果,本文就將介紹pandas中常用的...

plotyy函式 plotyy函式引數設定

ax,h1,h2 plotyy x,a,x,sig0 set ax,xlim 7.4,8.4 xminorgrid on 設定x軸範圍,並顯示更細密的網格 set h1,color k linewidth 1 設定y1的顏色為黑色,線寬為1 set h2,color r linewidth 1 設定...