def functionname(x,y,z,*args,**kwargs)python
>>> def funa(x,y,z):
... print x,y,z
...
>>> funa(1,2,3)
1 2 3函數
>>> funa(x=1,y=4,z=8)
1 4 8
>>>
3.任意參數的匹配ui
格式:def funa(*args,**kyargs):spa
定義時兩個符號的做用:.net
"*"用元組收集沒有匹配到的參數,返回一個元組htm
示例代碼ci
>>> def funa(x,y,z,*arges):
... print x,y,z
... print arges
...
>>> funa(1,2,3,4,5,6)
1 2 3
(4, 5, 6)
>>> 作用域
在調用的時候「*」會把元組拆開匹配到函數的參數中文檔
In [1]: def funa(x,y,z):
...: print x,y,z
...: io
In [2]: x=[1,2,3]
In [3]: funa(*x)
1 2 3
「**」用字典收集沒有匹配的參數,返回一個字典
>>> def funa(x,y,z,**kyarges):
... print x,y,z
... print kyarges
>>> funa(1,2,3,a=3,b='hello')
1 2 3
{'a': 3, 'b': 'hello'}
>>>
在「**」的調用中會把字典拆開,匹配到函數的參數中
In [9]: def funa(x,y,z):
...: print x,y,z
...:
In [10]: A={"x":1,"y":2,"z":3}
In [11]: funa(**A)
1 2 3
注意調用和定義函數的格式
調用函數 | 定義函數 |
如下是調用函數時可以使用的正式參數類型:
必備參數須以正確的順序傳入函數。調用時的數量必須和聲明時的同樣
關鍵字參數和函數調用關係緊密,函數調用使用關鍵字參數來肯定傳入的參數值。
使用關鍵字參數容許函數調用時參數的順序與聲明時不一致,由於 Python 解釋器可以用參數名匹配參數值。
默認參數若是在調用時沒有賦值,則按默認的值調用
不定長參數即*arges和**kyarges
注意:如何辨別一個參數的性質?
參考此博文:http://www.jb51.net/article/64966.htm
In [24]: x=range(1,9)
print ‘x=’,id(x)
In [25]: def funa(a):
...: print ‘a=’,id(a)
...: a[1]='hello word'
...: print a
...:
In [26]: funa(x)#funa(list(x))不變
[1, 'hello word', 3, 4, 5, 6, 7, 8]
In [27]: print x
[1, 'hello word', 3, 4, 5, 6, 7, 8]
python返回值有多個,但實際是返回的一個元組。
定義在函數內部的變量擁有一個局部做用域,定義在函數外的擁有全局做用域。局部變量只能在其被聲明的函數內部訪問,而全局變量能夠在整個程序範圍內訪問。調用函數時,全部在函數內聲明的變量名稱都將被加入到做用域中。
legb原則:
L(local)本地函數
E(enclose)任意上層的嵌套函數
G(global)全局做用域(一個python文件中,跨文件不能夠)
B(build-in)內置做用域
In [36]: t=0
In [38]: def sum (x,y):
...: t=x+y
...: print"函數內變量:",t
...: return t
...:
In [39]: sum(10,20)
函數內變量: 30
Out[39]: 30
In [40]: print t
0
函數內要使用全局變量必須使用global進行定義;函數外的變量至關於一個全局變量,能夠使用這個方法去改變全局變量的值。
文檔的使用說明,幫助屬性。能夠使用註釋加文字。
打印時使用print 函數名+__doc__