您現在的位置是:首頁 > 籃球

python函式的引數使用與方法

  • 由 宿命與天抗衡 發表于 籃球
  • 2022-09-28
簡介# 呼叫 print_user_info 函式 print_user_info( name = ‘兩點水’ , age = 18 , sex = ‘女’, hobby = (‘打籃球’,‘打羽毛球’,‘跑步’))暱稱:兩點水 年齡:18 性

三點水加希望的希念什麼

1、函式的引數型別

設定與傳遞引數是函式的重點,而 Python 的函式對引數的支援非常的靈活。

主要的引數型別有:預設引數、關鍵字引數(位置引數)、不定長引數。

下面我們將一一瞭解這幾種引數。

2、預設引數

有時候,我們自定義的函式中,如果呼叫的時候沒有設定引數,需要給個預設值,這時候就需要用到預設值引數了。

預設引數,只要在建構函式引數的時候,給引數賦值就可以了

例如:

# -*- coding: UTF-8 -*- def print_user_info( name , age , sex = ‘男’ ): # 列印使用者資訊 print(‘暱稱:{}’。format(name) , end = ‘ ’) print(‘年齡:{}’。format(age) , end = ‘ ’) print(‘性別:{}’。format(sex)) return; # 呼叫 print_user_info 函式 print_user_info( ‘兩點水’ , 18 , ‘女’) print_user_info( ‘三點水’ , 25 )

輸出結果:

暱稱:兩點水 年齡:18 性別:女 暱稱:三點水 年齡:25 性別:男

從輸出結果可以看到,當你設定了預設引數的時候,在呼叫函式的時候,不傳該引數,就會使用預設值。

但是這裡需要注意的一點是:

只有在形參表末尾的那些引數可以有預設引數值

,也就是說你不能在宣告函式形參的時候,先宣告有預設值的形參而後宣告沒有預設值的形參。

這是因為賦給形參的值是根據位置而賦值的。例如,def func(a, b=1) 是有效的,但是 def func(a=1, b) 是 無效 的。

預設值引數就這樣結束了嗎?

還沒有的,細想一下,如果引數中是一個可修改的容器比如一個 lsit (列表)或者 dict (字典),那麼我們使用什麼來作為預設值呢?

我們可以使用 None 作為預設值。就像下面這個例子一樣:

# 如果 b 是一個 list ,可以使用 None 作為預設值 def print_info( a , b = None ): if b is None : b=[] return;

認真看下例子,會不會有這樣的疑問呢?在引數中我們直接

b=[]

不就行了嗎?

也就是寫成下面這個樣子:

def print_info( a , b = [] ): return;

對不對呢?

執行一下也沒發現錯誤啊,可以這樣寫嗎?

這裡需要特別注意的一點:

預設引數的值是不可變的物件,比如None、True、False、數字或字串

,如果你像上面的那樣操作,當預設值在其他地方被修改後你將會遇到各種麻煩。

這些修改會影響到下次呼叫這個函式時的預設值。

示例如下:

# -*- coding: UTF-8 -*- def print_info( a , b = [] ): print(b) return b ; result = print_info(1) result。append(‘error’) print_info(2)

輸出的結果:

[] [‘error’]

認真觀察,你會發現第二次輸出的值根本不是你想要的,因此切忌不能這樣操作。

還有一點,有時候我就是不想要預設值啊,只是想單單判斷預設引數有沒有值傳遞進來,那該怎麼辦?

我們可以這樣做:

_no_value =object() def print_info( a , b = _no_value ): if b is _no_value : print(‘b 沒有賦值’) return;

這裡的

object

是 python 中所有類的基類。 你可以建立

類的例項,但是這些例項沒什麼實際用處,因為它並沒有任何有用的方法, 也沒有任何例項資料(因為它沒有任何的例項字典,你甚至都不能設定任何屬性值)。 你唯一能做的就是測試同一性。也正好利用這個特性,來判斷是否有值輸入。

3、關鍵字引數(位置引數)

一般情況下,我們需要給函式傳參的時候,是要按順序來的,如果不對應順序,就會傳錯值。

不過在 Python 中,可以透過引數名來給函式傳遞引數,而不用關心引數列表定義時的順序,這被稱之為關鍵字引數。

使用關鍵引數有兩個優勢 :

由於我們不必擔心引數的順序,使用函式變得更加簡單了。

假設其他引數都有預設值,我們可以只給我們想要的那些引數賦值

具體看例子:

# -*- coding: UTF-8 -*- def print_user_info( name , age , sex = ‘男’ ): # 列印使用者資訊 print(‘暱稱:{}’。format(name) , end = ‘ ’) print(‘年齡:{}’。format(age) , end = ‘ ’) print(‘性別:{}’。format(sex)) return; # 呼叫 print_user_info 函式 print_user_info( name = ‘兩點水’ ,age = 18 , sex = ‘女’) print_user_info( name = ‘兩點水’ ,sex = ‘女’, age = 18 )

輸出的值:

暱稱:兩點水 年齡:18 性別:女 暱稱:兩點水 年齡:18 性別:女

4、不定長引數

或許有些時候,我們在設計函式的時候,我們有時候無法確定傳入的引數個數。

那麼我們就可以使用不定長引數。

Python 提供了一種元組的方式來接受沒有直接定義的引數。這種方式在引數前邊加星號

*

如果在函式呼叫時沒有指定引數,它就是一個空元組。我們也可以不向函式傳遞未命名的變數。

# -*- coding: UTF-8 -*- def print_user_info( name , age , sex = ‘男’ , * hobby): # 列印使用者資訊 print(‘暱稱:{}’。format(name) , end = ‘ ’) print(‘年齡:{}’。format(age) , end = ‘ ’) print(‘性別:{}’。format(sex) ,end = ‘ ’ ) print(‘愛好:{}’。format(hobby)) return; # 呼叫 print_user_info 函式 print_user_info( ‘兩點水’ ,18 , ‘女’, ‘打籃球’,‘打羽毛球’,‘跑步’)

暱稱:兩點水 年齡:18 性別:女 愛好:(‘打籃球’, ‘打羽毛球’, ‘跑步’)

透過輸出的結果可以知道,

*hobby

是可變引數,且 hobby 其實就是一個 tuple (元祖)

可變長引數也支援關鍵字引數(位置引數),沒有被定義的關鍵引數會被放到一個字典裡。

這種方式即是在引數前邊加

**

,更改上面的示例如下:

# -*- coding: UTF-8 -*- def print_user_info( name , age , sex = ‘男’ , ** hobby ): # 列印使用者資訊 print(‘暱稱:{}’。format(name) , end = ‘ ’) print(‘年齡:{}’。format(age) , end = ‘ ’) print(‘性別:{}’。format(sex) ,end = ‘ ’ ) print(‘愛好:{}’。format(hobby)) return; # 呼叫 print_user_info 函式 print_user_info( name = ‘兩點水’ , age = 18 , sex = ‘女’, hobby = (‘打籃球’,‘打羽毛球’,‘跑步’))

暱稱:兩點水 年齡:18 性別:女 愛好:{‘hobby’: (‘打籃球’, ‘打羽毛球’, ‘跑步’)}

透過對比上面的例子和這個例子,可以知道,

是可變引數,且 hobby其實就是一個 tuple (元祖),

**hobby

是關鍵字引數,且 hobby 就是一個 dict (字典)

5、只接受關鍵字引數

關鍵字引數使用起來簡單,不容易引數出錯,那麼有些時候,我們定義的函式希望某些引數強制使用關鍵字引數傳遞,這時候該怎麼辦呢?

將強制關鍵字引數放到某個

引數或者單個

後面就能達到這種效果,比如:

# -*- coding: UTF-8 -*- def print_user_info( name , *, age , sex = ‘男’ ): # 列印使用者資訊 print(‘暱稱:{}’。format(name) , end = ‘ ’) print(‘年齡:{}’。format(age) , end = ‘ ’) print(‘性別:{}’。format(sex)) return; # 呼叫 print_user_info 函式 print_user_info( name = ‘兩點水’ ,age = 18 , sex = ‘女’ ) # 這種寫法會報錯,因為 age ,sex 這兩個引數強制使用關鍵字引數 #print_user_info( ‘兩點水’ , 18 , ‘女’ ) print_user_info(‘兩點水’,age=‘22’,sex=‘男’)

透過例子可以看,如果

age

sex

不使用關鍵字引數是會報錯的。

很多情況下,使用強制關鍵字引數會比使用位置引數表意更加清晰,程式也更加具有可讀性。使用強制關鍵字引數也會比使用

**kw

引數更好且強制關鍵字引數在一些更高階場合同樣也很有用。

python函式的引數使用與方法

Python Web框架Django入門教程

IT教頭王進

購買專欄

Top