一、函數初識
1、定義:將一組語句的集合通過一個名字(函數名)封裝起來,要想執行這個函數,只需調用其函數名即可。
2、好處:代碼重用;保持一致性;可擴展性。
3、示例如下:
1
2
3
4
|
# -*-coding:utf-8-*- def sayHello(): print ( 'Hello world!' ) sayHello() |
二、函數傳參方式
如上面的實例是函數中最基礎的一種,是不傳參數的,說到這里,我們有必要了解一下何為函數參數:
1、函數參數:
形參變量: 只有在被調用時才分配內存單元,調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。
函數調用結束返回主調函數后不能再使用該形參變量
實參:可以是常量,變量,表達式,函數等,無論實參是何種類型的量,在進行函數調用,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。
2、函數傳參的分類
<1> 位置參數
位置參數顧名思義,就是調用函數時傳的實參與函數的形參位置上一一對應的參數。
如下實例:
1
2
3
4
5
6
7
8
9
10
11
12
|
#位置參數 print ( '\n以下是位置參數傳值\n' ) def stu_info(name,age,major,country): print ( '--------學生信息-------' ) print ( '姓名:' ,name) print ( '年齡:' ,age) print ( '專業:' ,major) print ( '國籍:' ,country) stu1 = stu_info( 'Jack' , 21 , 'Chinese' , 'CN' ) # 實參依次與函數中的name,age,major,country對應 stu2 = stu_info( 'Frank' , 20 , 'JP' , 'UN' ) stu3 = stu_info( 'Rose' , 19 , 'Art' , 'UK' ) |
<2> 默認參數
默認參數就有點不同了,是你在函數形參中定義好的,當實參中未傳對應的參數時,它就派上用場了,默認給你加上。是不是有點貼心呢?
注意:默認參數,必須放在位置參數之后,否則會出錯
實例如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
#默認參數 print ( '\n以下是默認參數傳值\n' ) def stu_info(name,age,major,country = 'CN' ): # country設為了默認參數,必須放在位置參數之后,否則會出錯 print ( '--------學生信息-------' ) print ( '姓名:' ,name) print ( '年齡:' ,age) print ( '專業:' ,major) print ( '國籍:' ,country) stu1 = stu_info( 'Jack' , 21 , 'Chinese' ) # 此處未傳對應的值,但形參中已經定義了,所以不用擔心找不家了! stu2 = stu_info( 'Frank' , 20 , 'JP' ) # 你也是的 stu3 = stu_info( 'Rose' , 19 , 'Art' , 'UK' ) # 既然你已經傳參了,就隨你了。 |
<3> 關鍵參數
正常情況下,給函數傳參數要按順序,不想按順序就可以用關鍵參數,只需指定參數名即可(指定參數名的參數就叫關鍵參數),但記住一個要求就是,關鍵參數必須放在位置參數(以位置順序確定對應關系的參數)之后。
還是奉上實例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#關鍵參數,不能重復賦值,且指定的參數應在位置參數之后 print ( '\n以下是關鍵參數傳值\n' ) def stu_info(name,age,major,country = 'CN' ): # print ( '--------學生信息-------' ) print ( '姓名:' ,name) print ( '年齡:' ,age) print ( '專業:' ,major) print ( '國籍:' ,country) stu1 = stu_info( 'Jack' , 21 , 'Chinese' ) stu2 = stu_info( 'Frank' , 20 ,major = 'JP' ) # major即為關鍵參數,單獨指定,但必須放在位置參數之后 stu3 = stu_info( 'Rose' , 19 , 'Art' ,country = 'UK' ) |
<4> 非固定傳參
這種傳參方式可就大有講究了,花樣可謂繁多,自然本領也就大多了,不信往下看。
可以細分為兩類:
非固定傳參方式一:
可同時指定多個用戶,傳過來的所有參數打包成元祖。如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#-*-coding:utf-8-*- #方式一 def send_alert(msg, * users): # '*users‘ 表示非固定傳參,可同時指定多個用戶,傳過來的所有參數打包元祖 for u in users: print ( '報警!請及時查看...' ,u,msg) send_alert( '你的系統已瀕臨崩潰!' , 'cc' , 'hyt' , 'yuq' , 'dy' ) #方式二 def send_alert(msg, * users): # '*users‘ 表示非固定傳參,可同時指定多個用戶,傳過來的所有參數打包元祖 for u in users: print ( '報警!請及時查看...' ,u,msg) send_alert( '你的系統已瀕臨崩潰!' , * [ 'cc' , 'hyt' , 'yuq' , 'dy' ]) ''' 如果列表前不加 * 號,整個列表就會被當作元組里的一個元素, 加 * 號后就相當于列表里每個元素都是元祖的一個元素了。就會向元組里的每個成員都發出訊息了。 ''' def send_alert(msg, * users,age): for u in users: print ( '報警!請及時查看...' ,u,msg) send_alert( '你的系統已瀕臨崩潰!' , 'sc' , 'qh' ,age = 22 ) ''' '*users‘此時會默認獲取前一個位置參數之后所有的元素,若傳參時最后不指定關鍵參數就會報錯,age無法獲取傳值 ''' |
非固定傳參方式二:
可同時指定多個用戶,傳過來的所有參數打包成元組或字典。如下:
1
2
3
4
5
6
7
8
9
10
|
#-*-coding:utf-8-*- def func(name, * args, * * kwargs): # 形參依次是位置參數,元組,字典 print (name,args,kwargs) func( 'Hope' , 22 , 'CN' , 'tomorrow' ) #輸出:Hope (22, 'CN', 'tomorrow') {} func( 'Try' , 21 , 'will' ,addr = 'HG' ,num = 666 ) #輸出:Try (21, 'will') {'addr': 'HG', 'num': 666} dit = { 'major' : 'Math' , 'interest' : 'reading' } func( 'want' , * [ 'day' , 'up' ], * * dit) #輸出:want ('day', 'up') {'major': 'Math', 'interest': 'reading'} |
小伙伴們到這里,Python中函數常用的傳參方式你就都了解了?是不是又長姿勢了呢!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/schut/p/8414899.html