<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
函數引數看似很平常,在深究後發現其中還是有很多東西,引數分類、用法和新特性等,都可以體會到Python是真的靈活好用。
形參:函數定義時定義的引數。
實參:函數呼叫時傳入的引數。
引數傳遞的過程,就是把實參的參照傳遞給形參,使用實參的值來執行函數體的過程,形參的定義決定了實參傳入方式。
def print_num(num): print(num) a = 10 print_num(a) # 實參參照傳遞給 形參 num
Python 傳參方式有兩種:
按位元置順序傳參:呼叫時根據引數位置順序傳遞,包括位置引數、預設引數(預設引數)和可變引數
按關鍵字傳參:呼叫時以“關鍵字=值”形式傳遞引數,包括關鍵字引數
按照宣告時的位置順序關係依次傳遞引數,形參與實參的數量、順序、資料型別必須對應,否則報錯。
def locationParams(m,n): print('第一個引數',m) print('第一個引數',n) locationParams(1,2)
定義函數時,為某個引數賦予一個預設值,具有預設值的引數稱為預設引數
def defaultParams(m,n='xiaoming'): print('第一個引數',m) print('第一個引數',n) defaultParams('Hello','xiaoli') defaultParams('Hello') #未傳入預設引數 """ 第一個引數 Hello 第二個引數 xiaoli 第一個引數 Hello 第二個引數 xiaoming """
Tips:
(1)預設引數不能在非預設引數之前,Python 按照順序傳參,無法識別預設引數,宣告函數時,也會報錯:
SyntaxError: non-default argument follows default argument
def defaultParams(m='xiaoming',n): print('第一個引數',m) print('第二個引數',n) defaultParams('Hello') #Python 按照順序傳參,那麼沒有實參會傳遞給形參n
(2)預設引數不能時可變引數,預設引數的值時固定的,如果是可變引數,則引數值會被修改。
def f(a,l=[]): l.append(a) return l print(f(1)) print(f(2)) print(f(3)) ## 預設引數l為list,其對應的值也被修改了 """ [1] [1, 2] [1, 2, 3] """
可變引數是指引數個數是可以變化的,可以是0、1或多個,可變引數定義時符號“ * ” 表示。在函數呼叫時,可變引數接收的實參會被封裝成一個元組。
def variableParams(*params): print("引數: ",params) sum = 0 for i in params: sum+=i print(sum) variableParams() # 不傳入引數 variableParams(1,2,3,4) # 傳入多個引數 num_list = [1,2,3,4] variableParams(*num_list) # num_list 加上「*」 將num_list拆解,否則num_list被當成一個引數傳入 variableParams(num_list[0],num_list[1])
"""
引數: () # 元組
0
引數: (1, 2, 3, 4) # 元組
10
引數: (1, 2, 3, 4) # 元組
10
引數: (1, 2)
3
"""
關鍵字引數與可變引數類似,引數的個數都是可變的,所以也被稱作可變關鍵字引數。
關鍵字引數與可變引數區別
(1)關鍵字引數會被封裝成一個字典,可變引數接收的實參會被封裝成一個元組。
(2)函數呼叫時,關鍵字引數以以“關鍵字=值”形式傳遞引數
def keyWordParams(**params): print(params) keyWordParams() ## 不傳引數 keyWordParams(name='xiaoming',age='11',gender='male') ## 關鍵字傳參 person_info = {'name': 'xiapli', 'age': '20', 'gender': 'male'} keyWordParams(**person_info) # **person_info 將字典拆分 """ {} {'name': 'xiaoming', 'age': '11', 'gender': 'male'} {'name': 'xiapli', 'age': '20', 'gender': 'male'} """
四類引數可以混合使用,但在宣告時,需要注意順序:位置引數、預設引數、可變引數和關鍵字引數。否則Python將無法正常解析。
Python3.8 新特性中,新增了僅位置引數。**新的函數引數語法 使用 “ / ” 指明有些函數引數必須被指定為位置引數, 不能被用作關鍵字引數。 僅位置引數 在“ / ”之前,“ / ”之後可以是任意型別引數 **
def pos_only(a,/): print(a) pos_only(1) # 1 pos_only(a=1) # TypeError: pos_only() got some positional-only arguments passed as keyword arguments: 'a'
與僅位置引數,對應的是僅關鍵字引數,不過並非Python3.8 新特性,僅關鍵字引數也被稱為命名關鍵字引數。宣告函數時,在第一個關鍵字形參前新增“ * ”,表明必須以關鍵字引數形式傳參。
def stu_info(name,gender,*,age,city): print('name is:',name,' gender is:',gender,' age:',age,' city:',city) stu_info('Bob','M',age=7,city='TJ') stu_info('Lucy','F',city='BJ',age=10)
關鍵字引數和命名關鍵字引數的區別在於,前者可以傳遞任何名字的引數,而後者只能傳遞 後面名字的引數。
stu_info('Lucy','F',city='BJ',addr=10) # stu_info() got an unexpected keyword argument 'addr'
如果函數定義中已經有了一個可變引數,後面跟著的命名關鍵字引數就不再需要一個“ * ”了
#args可以傳遞一個tuple 其後只能傳遞age和city引數 def stu_info(name,gender,*args,age,city): print('name is:',name,' gender is:',gender,' age:',age,' city:',city) for i in args: print('args:',i) stu_info('Bob','M',age=7,city='TJ') stu_info('Lucy','F',(2,3),city='BJ',age=10) """ name is: Bob gender is: M age: 7 city: TJ name is: Lucy gender is: F age: 10 city: BJ args: (2, 3) """
最後幾個題目,大家可以測試下是否掌握:
def function1(a, b, c=0, *arg, **kw): print('a =', a, 'b =', b, 'c =', c, 'arg=',arg, 'kw =', kw) function1(1,2,3,4,5,A=1,B=2) # a = 1 b = 2 c = 3 arg= (4, 5) kw = {'A': 1, 'B': 2} def function2(a,/, b, c=0, *arg, **kw): print('a =', a, 'b =', b, 'c =', c, 'arg=',arg, 'kw =', kw) function2(1,2,3,4,5,A=1,B=2) # a = 1 b = 2 c = 3 arg= (4, 5) kw = {'A': 1, 'B': 2} def function3(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw) function3(1,2,3,d=4,A=1,B=2) # a = 1 b = 2 c = 3 d = 4 kw = {'A': 1, 'B': 2} def function4(a, b, c=0, *arg, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'arg=',arg, 'd =', d, 'kw =', kw) function4(1,2,3,4,5,d=6,A=1,B=2) # a = 1 b = 2 c = 3 arg= (4, 5) d = 6 kw = {'A': 1, 'B': 2}
到此這篇關於Python函數引數分類使用與新特性詳細分析講解的文章就介紹到這了,更多相關Python函數引數分類內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45