函數和函數式編程

1.定義函數

def functionname(x,y,z,*args,**kwargs)python

2.參數

  • 參數沒有類型,python不作類型的檢查
  • 不支持重載,python不區分函數的名字和個數;在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__

相關文章
相關標籤/搜索