您好,我是碼農飛哥,感謝您閱讀本文,歡迎一鍵三連哦,
本文主要介紹Python的函式,函式的定義,使用,可變引數等等都有詳細介紹,
干貨滿滿,建議收藏,需要用到時常看看, 小伙伴們如有問題及需要,歡迎踴躍留言哦~ ~ ~,
文章目錄
- 前言
- 函式定義
- 函式呼叫
- 函式值傳遞和參考傳遞(形參和實參的介紹)
- Python位置引數
- 默認引數設定
- 可變引數
- 逆向引數收集
- return函式回傳值
- Python函式回傳多個值的方法
- 總結
- Python知識圖譜
前言
前面幾個章節提及了好多Python函式,比如:print(),range(),len()函式等等,這些都是Python的內置函式,可以直接使用,當然,除了直接使用內置函式外,Python也支持自定義函式,即將一段有規律的,可重復使用的代碼定義成函式,從而達到一次撰寫,多次呼叫的目的,
函式定義
函式是按照固定格式封裝組織的可以重復使用的代碼段,它能提高應用的模塊性和代碼的重復利用率,
函式定義的語法格式是:
def 函式名(引數串列):
代碼塊
[return [回傳值]]
函式名:其實就是一個符合Python語法的識別符號,函式名最好能體現該函式的功能,比如: save_user,
形參串列:設定該函式可以接收多少個引數,多個引數之間用逗號(,)分割,需要注意的是沒有引數的話,也需要留一對空的()
[return[回傳值]]:整體作為函式的可選引數,用于設定該函式的回傳值,也就是說,一個函式,
可以有回傳值,也可以沒有回傳值,
函式呼叫
呼叫函式的語法格式是:
[回傳值]=函式名([形參值])
函式名即指的是要呼叫的函式的名稱,形參值指的是當初創建函式時要求傳入的各個形參的值,
如果該函式有回傳值,我們可以通過一個變數來接收該值,當然也可以不接收,需要注意的是,函式有多少個形參,那么呼叫的時候就需要傳入多少個值,
且順序必須和創建函式時一致,即便該函式沒有引數,函式名后的小括號也不能省略,
舉個栗子吧:
def my_abs(x):
"""
回傳絕對值
:param x:
:return:
"""
if not isinstance(x, (int, float)):
raise TypeError('傳入的資料型別不對')
if x >= 0:
return x
else:
return -x
呼叫代碼是:
x = my_abs(-3)
print(x)
print(my_abs.__doc__)
運行結果是:
3
回傳絕對值
:param x:
:return:
這是一個獲取絕對值的函式,其函式名是my_abs,通過函式名可以讓人大致明白函式的作用,形式引數是x,通過__doc__可以查看函式的說明檔案,其回傳值是處理后的值,
今天依然是碼農飛哥學習的一天,

函式值傳遞和參考傳遞(形參和實參的介紹)
介紹函式值傳遞和參考傳遞之前首先需要了解兩個概念,
- 形式引數(簡稱形參):在定義函式時,函式名后面括號中的引數就是形式引數,可以將形參想象成劇本中的角色,
- 實際引數(簡稱實參):在呼叫函式時,函式名后面括號中的引數稱為實際引數,也就是函式的呼叫者給函式的引數,可以將實參想象成演角色的演員,
函式引數傳遞方式分為兩種:分別是值傳遞和參考傳遞: - 值傳遞:適用于實參型別為不可變型別(字串,數字,元組)
- 參考(地址)傳遞:適用于實參型別為可變型別(串列,字典)
值傳遞和參考傳遞的區別是:函式引數進行值傳遞時,若形參發生改變,不會影響實參的值,而應用傳遞的話,改變形參的值,實參的值也會一同改變,依然是舉例說明:
函式param_test會將形參obj變成 obj+obj,如果是值傳遞則呼叫函式param_test之后,實參的值不變,如果是參考傳遞的話則呼叫param_test之后,實參的值也會變成 obj+obj,
def param_test(obj):
obj += obj
print('形參值為:', obj)
print('*******值傳遞*****')
a = '碼農飛哥'
print('a的值為:', a)
param_test(a)
print('實參的值為:', a)
print("*******參考傳遞*****")
b = [1, 2, 3]
print('b的值為:', b)
param_test(b)
print('實參的值為:', b)
運行結果是:
*******值傳遞*****
a的值為: 碼農飛哥
形參值為: 碼農飛哥碼農飛哥
實參的值為: 碼農飛哥
*******參考傳遞*****
b的值為: [1, 2, 3]
形參值為: [1, 2, 3, 1, 2, 3]
實參的值為: [1, 2, 3, 1, 2, 3]
Python位置引數
位置引數,有時也被稱為必備引數,指的是必須按照正確的順序將實參傳到函式中,換句話說,呼叫函式時傳入實參的數量和位置必須和定義函式時保持一致,如果不一致的話,則在程式運行時Python解釋器會報TypeError例外,舉個例子,下面演示呼叫函式事引數傳入的數量不對的情況,
def girth(width , height):
return 2 * width+height
#呼叫函式時,必須傳遞 2 個引數,否則會引發錯誤
print(girth(3))
運行之后直接報Traceback錯誤,
Traceback (most recent call last):
File "/Volumes/Develop/Python_learn/PycharmProjects/python_demo_1/demo/function/locate_fun.py", line 6, in <module>
print(girth(3))
TypeError: girth() missing 1 required positional argument: 'height'
傳入引數的位置不對的情況,本例中本想傳入name的值為碼農飛哥,age的值為18,結果入參順序不對導致得到的結果不對,
def print_info(name, age):
print('姓名=' + name + " 年齡=" + str(age))
print_info(18,'碼農飛哥')
那么怎么處理這種情況呢?有兩種方式:
- 嚴格按照形參的數量和位置入參,
- 按照關鍵字引數入參,所謂的關鍵字引數就是指使用形參的名字來確定輸入的引數值,通過此方式制定函式實參時,不再需要與形參的位置完全一致,只要將引數名寫正確即可,還是以上面的函式為例:
利用關鍵字引數來呼叫函式的話則是這樣寫:
def print_info(name, age):
print('姓名=' + name + " 年齡=" + str(age))
print_info(age=18,name='碼農飛哥')
運行結果是:
姓名=碼農飛哥 年齡=18
可以看出關鍵字引數入參時,不需要保證入參的順序跟形參的順序保持一致,

默認引數設定
前面介紹的位置引數,就是說呼叫函式時必須要傳入該引數,但是有些場景下我們并不想傳入所有的引數,這種情況下就可以使用默認引數了,不過需要注意的是:指定有默認值的形式引數必須在所有沒默認值的引數的最后,否則會產生語法錯誤,其語法格式是:
def 函式名(...,形參名,形參名=默認值):
代碼塊
下面給出一個示例,該函式是記錄學生的資訊,有兩個有默認值的引數,分別是age和city,它們都被置于函式的形參串列最后處,
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print("gender:", gender)
print("age:", age)
print("city:", city)
print(enroll('張三', '一年級'))
print('************************** ')
print(enroll('李四', '二年級', 7))
運行結果是:
name: 張三
gender: 一年級
age: 6
city: Beijing
None
**************************
name: 李四
gender: 二年級
age: 7
city: Beijing
None
從上面代碼可以看出:1. 可以不用傳入有默認值的引數,2. 如果傳入默認的引數,則會覆寫掉默認值,
可變引數
Python函式可變引數(*args,**kwargs),又稱為不定長引數,即傳入函式中的實際引數可以是任意多個,Python定義可以變引數,主要有以下兩種形式:
- 在形參前添加一個
*,格式是*args,表示創建一個名為args的空元組,該元組可以接受任意多個外界傳入的非關鍵字實參,必須以非關鍵字引數的形式給普通引數傳值,否則Python解釋器會把所有引數都優先傳給可變引數, **kwargs表示創建一個名為kwargs的空字典,該字典可以接受任意多個以關鍵字引數賦值的實參,舉個🌰,下面就是根據傳入的值求和,
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n
return sum
print(calc(10, 9))
運行的結果是:19,
再舉個例子唄:
def record(str, **kwargs):
print('str=', str)
print('kwargs=', kwargs)
record('測驗', name='碼農飛哥', age=20)
record('測驗2')
運行結果是:
str= 測驗
kwargs= {'age': 20, 'name': '碼農飛哥'}
str= 測驗2
kwargs= {}
從上面代碼可以看出,可變引數可以不用傳入,不傳的話則會創建一個空元組或者空字典,
逆向引數收集
Python不僅有可變引數,將多個引數打包到一個元組或者字典中,還支持逆向引數收集,即直接將串列,元組,字典作為函式引數,不過呼叫函式時要對實參加上*號,就像下面這樣:
def param_test(name, age):
print('name=', name)
print('age=', age)
data = ['碼農飛哥', 18]
param_test(*data)
運行結果是:
name= 碼農飛哥
age= 18
return函式回傳值
一個函式可以有回傳值,也可以沒有回傳值,有回傳值的語法結構是:
return [回傳值]
回傳值可以指定,也可以省略不寫,如果不寫的話就默認為是None,即空值,
Python函式回傳多個值的方法
通常情況下,一個函式只有一個回傳值,實際上Python也是如此,
只不過Python函式能以回傳串列或元組的方式,將要回傳的多個值保存到序列中,從而間接實作回傳多個值的目的,
- 在函式中,提前將要回傳的多個值存盤到一個串列或元組中,然后函式回傳該串列或元組
- 函式直接回傳多個值,之間用逗號(,)分隔,Python會自動將多個值封裝到一個元組中,其回傳值仍是一個元組,下面就舉例說明下:
def multi_return():
return_tuple = ('張三', 12)
return return_tuple
def multi_return2():
return '張三', 12
print(multi_return())
result = multi_return2()
print('multi_return2回傳值是=,型別是=', result, type(result))
運行結果是
('張三', 12)
multi_return2回傳值是=,型別是= ('張三', 12) <class 'tuple'>
總結
本文詳細介紹了Python中的函式,從函式的定義說到函式的呼叫,重點介紹了形參和實參的相關知識點,總的來說Python的函式可以沒有入參,可以沒有回傳值,可以傳入可變引數,當傳入的引數是不可變型別時則是值傳遞,當傳入的引數是可變型別時則是參考傳遞,

Python知識圖譜
為了更好幫助更多的小伙伴對Python從入門到精通,我從CSDN官方那邊搞來了一套 《Python全堆疊知識圖譜》,尺寸 870mm x 560mm,展開后有一張辦公桌大小,也可以折疊成一本書的尺寸,有興趣的小伙伴可以了解一下------掃描下圖中的二維碼即可購買,

我本人也已經用上了,感覺非常好用,圖譜桌上放,知識心中留

我是碼農飛哥,再次感謝您讀完本文,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/289303.html
標籤:python
上一篇:使用python制作世界地圖
