python函数参数的作用是_python函数参数理解
1、位置參數
函數調用時,參數賦值按照位置順序依次賦值。
e.g.
1 deffunction(x):2
3return x *x4
5print function(2)
輸出結果: 4
1 deffunction(x, n):2
3 return x /n4
5print function(4, 2)
輸出結果: 2
2、默認參數
在函數定義時,直接指定參數的值。
e.g.
1 def function(x, n = 2):2
3 s = 1
4
5 while n >0:6
7 n = n -1
8
9 s = s *x10
11 returns12
13 print function(20)
輸出結果:400
注意:
1)必選參數必須在前,默認參數在后。
2)當函數有多個參數時,把變化大的放在前面。
好處:降低調用函數的難度。
3)當有多個默認參數時,可以按順序,也可使用參數名直接賦值。
e.g.
1 def enroll(name, gender, age = 6, city = 'beijing') :2
3 printname4
5 printgender6
7 printage8
9 printcity10
11 enroll('aaa', 'F', 7)
輸出內容:
aaa
F
7
beijing
1 enroll('bbb', 'M', 9, city = 'tianjin')
輸出內容:
bbb
M
9
tianjin
4)特別注意
e.g.
1 def add_end(L =[]):2
3 L.append('END')4
5 returnL6
7 add_end([1,2,3,4,5])
輸出內容:
[1,2,3,4,5,'END']
當多次調用add_end()時
1 add_end()2
3 add_end()
輸出內容:
['END', 'END']
這時就要對輸入參數進行判斷了:
1 def add_end(L =[]):2
3 if L isNone:4
5 L =[]6
7 L.append('END')8
9 returnL10
11 add_end()12
13 add_end()
輸出內容:
['END']
5)能設計不變的對象就設計成不變的對象。
3、可變參數
傳入的參數個數是可變的。可變參數在函數調用時,會自動組裝一個tuple。
e.g.
1 defmy_sum(numbers):2 result =03 for i in numbers:4 result +=i5 returnresult6 print my_sum(2)
輸出內容:3
在調用my_sum函數時,是可以傳入多個參數的,但是要使用list或者tuple
1 print my_sum([1,2,3])2
3 print my_sum((1,2,3,4))
輸出內容:6 , 10
當函數的參數是一個list或者tuple時:
1 numbers = [1,2,3,4]2 print my_sum(*numbers)
輸出內容:10
*numbers表示把numbers這個list中的所有元素作為可變參數傳入函數。
4、關鍵字參數
關鍵字參數可以傳入任意個含參數名的參數,在函數調用時,自動組裝成dict。
e.g.
1 def enroll(name, age, **kw):2 print 'name : %s, age : %d' %(name, age), 'other:', kw3
4 enroll('test', 8, city = 'beijing', job = 'work')
輸出內容:name : aaa, age : 8 other {'city': 'beijing', 'job': 'work'}
enroll函數除了接受必選參數外還可以指定關鍵字參數kw,形式:'key' = 'value'。
關鍵字參數的作用:
擴展函數,除了必選內容還要擴展其他內容,如上例中的city=’beijing'。
把一個dict轉換成參數出入:
1 extra = {'city' : 'beijing', 'job' : 'work'}2 enroll('test', 9, **extra)3 #或者
4 enroll('test', 9, city = extra['city'], job = extra['job'])
5、命名關鍵字參數
就是指定關鍵字名稱。
e.g.
1 def persion(name, age, *, city, job):2 printname, age, city, job3 persion('test', 9, city = 'beijing', job = 'work')
輸出內容:test 9 beijing work
*不是參數,是特殊分隔符,*作用是分別位置參數和命名關鍵字參數。
6、參數組合
參數定義順序:必須參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。
e.g.
1 def function(a, b, c = 0, *args, **kw):2 print 'a:', a, 'b:', b, 'c:', c, 'args:', args, 'kw:', kw3
4 function(1,2)5 function(1,2,c=3)6 function(1,2,3,'a','b')7 function(1,2,3,'a','b',x = 99)
輸出內容:
a: 1 b: 2 c: 0 args: () kw: {}
a: 1 b: 2 c: 3 args: () kw: {}
a: 1 b: 2 c: 3 args: ('a', 'b') kw: {}
a: 1 b: 2 c: 3 args: ('a', 'b') kw: {'x': 99}
參數也可以用tuple和dict傳遞:
1 args = (1,2,3,4)2 kw = {'d' : 5, 'e' : 6, 'f' : 7}3 funciton(*args, **kw)
輸出內容:a: 1 b: 2 c: 3 args: (4,) kw: {'e': 6, 'd': 5, 'f': 7}
對于任何函數,無論參數是怎么定義的,都可以通過function(*args, **kw)的形式調用。
*args:是可變參數,args接收一個tuple。
**kw:是關鍵字參數,kw接收一個dict。
參數傳遞過程中存在倆個規則:
1)通過引用將參數復制到局部作用域的對象中,意味著被用來訪問的函數參數的變量與提供給函數的對象無關,以為存在一個復制問題,修改局部變量不會修改原始數據。
2)可以在適當的位置修改可變對象。可變對象主要是list和dict,適當的位置主要是在修改局部對象不會改變list對象或者dict對象的ID,也就是存儲位置。
1 #!/usr/bin/python
2
3 defmodifier(number, string, list):4 number = 5
5 string = 'GOODBYE'
6 list = [1,2,3]7 print 'inside:', number, string, list8
9 num = 10
10 string = 'goodbye'
11 list = [4,5,6]12 print 'before:', num, string, list13
14 modifier(num, string, list)15
16 print 'after:', num, string, list
輸出內容:
before: 10 goodbye [4, 5, 6]
inside: 5 GOODBYE [1, 2, 3]
after: 10 goodbye [4, 5, 6]
從輸出結果來看,數據交換前后數據并沒有發生改變,雖然在函數局部區域傳遞進來的參數進行了相應的修改,但是仍然不能改變實參對象的內容。這和C語言十分相似。
因為傳遞進來的參數在函數內部進行了修改,也就是變量指向了不同的存儲區(對象),這就相當于C語言中的實參與形參,只是對形參進行了修改,實參沒有改變。
所以說明函數內部對參數重新賦了值,并不會改變實參對象。
1 #!/usr/bin/python
2 defmodifier(list, dict):3 list[0] = 10
4 dict['a'] = 10
5 print 'inside: list = %s, dict = %s' %(list, dict)6
7 list = [1,2,3,4,5]8 dict = {'a' : 1, 'b' : 2, 'c' : 3}9 print 'defore: list = %s, dict = %s' %(list, dict)10
11 modifier(list, dict)12 print 'after: list = %s, dict = %s' %(list, dict)
輸出結果:
defore: list = [1, 2, 3, 4, 5], dict = {'a': 1, 'c': 3, 'b': 2}
inside:, list = [10, 2, 3, 4, 5], dict = {'a': 10, 'c': 3, 'b': 2}
after: list = [10, 2, 3, 4, 5], dict = {'a': 10, 'c': 3, 'b': 2}
從輸出結果可以看出,函數內部對傳遞進來的參數進行了修改,并且對實參對象也進行了修改,實際修改的是list和dict存儲位置上的數據,變量指向并沒有改變,所以實參對象也發生了變化。
注:文章中所有代碼沒有驗證,如有問題請告知。
本文參照:廖雪峰python
總結
以上是生活随笔為你收集整理的python函数参数的作用是_python函数参数理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英伟达高管称显卡用来挖矿对社会无用 应用
- 下一篇: 一加11木星岩限定版3月29日发布 每部