1. 程式人生 > >關於Python3中函數:

關於Python3中函數:

span 匿名函數 b+ 指定 global 三引號 The man pac

# 關於Python3中函數:


- 定義

定義函數使用關鍵字def,後接函數名和放在圓括號()中的可選參數列表,函數內容以冒號起始並且縮進。一般格式如下:
```

def 函數名(參數列表): 
"""文檔字符串"""
函數體 
return [expression] 


```

- 函數變量作用域

在函數內部定義的變量擁有一個局部作用域,在函數外定義的擁有全局作用域。註意:在函數內部可以引用全局變量,但無法對其賦值(除非用global進行聲明)。
```

a = 5 # 全局變量a 

def func1(): 
print(func1() print a =, a) 

def
func2(): a = 21 # 局部變量a print(func2() print a =, a) def func3(): global a a = 10 # 修改全局變量a print(func3() print a =, a) func1() func2() func3() print(the global a =, a)

```


- 函數調用:


1、普通調用

與其他語言中函數調用一樣,Python中在調用函數時,需要給定和形參相同個數的實參並按順序一一對應。

```

def fun(name, age, gender): 
print(
Name:,name,Age:,age,Gender:,gender,end= ) print() fun(Jack, 20, man) # call ``` 函數也可以不傳遞參數直接進行調用: ``` def fib(): """Print a Fibonacci series""" a, b = 0, 1 c=[] while b < 2000: a, b = b, a+b if b%2 == 0: c.append(b) return c fib() # 在交互模式下,return的結果會自動打印出來,而作為腳本單獨運行時則需要print函數才能顯示。 print
(fib())

```
2、使用關鍵字參數調用函數

函數也可以通過keyword=value 形式的關鍵字參數來調用,因為我們明確指出了對應關系,所以參數的順序也就無關緊要了。
```

def fun(name, age, gender): 
print(Name:,name,Age:,age,Gender:,gender,end= ) 
print() 

fun(gender=man, name=Jack, age=20) # using keyword arguments 


```
3、調用具有默認實參的函數

Python中的函數也可以給一個或多個參數指定默認值,這樣在調用時可以選擇性地省略該參數:

```

def fun(a, b, c=5): 
print(a+b+c) 

fun(1,2) 
fun(1,2,3)


```
註意:通常情況下默認值只被計算一次,但如果默認值是一個可變對象時會有所不同, 如列表, 字典, 或大多類的對象時。例如,下面的函數在隨後的調用中會累積參數值:

```

def fun(a, L=[]): 
L.append(a) 
print(L) 

fun(1) # 輸出[1] 
fun(2) # 輸出[1, 2] 
fun(3) # 輸出[1, 2, 3] 


```
4、調用可變參數函數

通過在形參前加一個星號(*)或兩個星號(**)來指定函數可以接收任意數量的實參。

```

def fun(*args): 
print(type(args)) 
print(args) 

fun(1,2,3,4,5,6) 

# 輸出: 
# <class ‘tuple‘> 
# (1, 2, 3, 4, 5, 6) 

def fun(**args): 
print(type(args)) 
print(args) 

fun(a=1,b=2,c=3,d=4,e=5) 

# 輸出: 
# <class ‘dict‘> 
# {‘d‘: 4, ‘e‘: 5, ‘b‘: 2, ‘c‘: 3, ‘a‘: 1} 

```
從兩個示例的輸出可以看出:當參數形如*args時,傳遞給函數的任意個實參會按位置被包裝進一個元組(tuple);當參數形如**args時,傳遞給函數的任意個key=value實參會被包裝進一個字典(dict)。

5、通過解包參數調用函數

上一點說到傳遞任意數量的實參時會將它們打包進一個元組或字典,當然有打包也就有解包(unpacking)。通過 單星號和雙星號對List、Tuple和Dictionary進行解包:

```

def fun(a=1, b=2, c=3): 
print(a+b+c) 

fun() # 正常調用 
list1 = [11, 22, 33] 
dict1 = {a:40, b:50, c:60} 
fun(*list1) # 解包列表 
fun(**dict1) # 解包字典 

# 輸出: 
# 6 
# 66 
# 150 


```
註:*用於解包Sequence,**用於解包字典。解包字典會得到一系列的key=value,故本質上就是使用關鍵字參數調用函數。


---
- lamdba

lambda關鍵詞能創建小型匿名函數。lambda函數能接收任何數量的參數但只能返回一個表達式的值,它的一般形式如下:

```

lambda [arg1 [,arg2,.....argn]] : expression 
#lambda表達式可以在任何需要函數對象的地方使用,它們在語法上被限制為單一的表達式:


f = lambda x, y: x+y 
print(f(10, 20)) 

def make_fun(n): 
return lambda x: x+n 

f = make_fun(15) 
print(f(5))

s = lambda x,y,z:(x+y)*z

a = int(input("輸入值一:"))
b = int(input("輸入值二:"))
c = int(input(輸入值三:))
print (結果:,s(a,b,c))

```


- 文檔字符串

函式體的第一個語句可以是三引號括起來的字符串, 這個字符串就是函數的文檔字符串,或稱為docstring 。我們可以使用print(function.__doc__)輸出文檔:
```

def fun(): 
"""Some information of this function. 
This is documentation string."""
return

print(fun.__doc__) 


```
文檔字符串主要用於描述一些關於函數的信息,讓用戶交互地瀏覽和輸出。建議養成在代碼中添加文檔字符串的好習慣

關於Python3中函數: