#形如
deffunc
(args...):
dosomething
以關鍵字def 開頭,後面是函式名和引數下面是函式處理過程。
舉例:
def
add( a, b ):
return a+b
引數可以設定預設值,如:
def
add( a, b=10 ):
#注意:預設值引數只會運算一次
return a+b
預設值引數只會運算一次是什麼意思?
def
func
( a, b= ):
#b的預設值指向乙個空的列表,每次不帶預設值都會指向這塊記憶體
return b
print(func(1))#向預設的空列表裡加入元素1 ,預設列表裡已經是[1]
print(func(2))#向預設的列表裡加入元素2,預設列表裡已經是[1,2]
print(func(3,))#向b指向的空列表裡加入元素1 ,預設列表裡還是[1,2]
print(func(4))#向預設的列表裡加入元素4,預設列表裡已經是[1,2,4]
'''結果:
[1][1, 2]
[3][1, 2, 4]
'''
這下明白為什麼預設引數只計算一次了吧,函式引數不傳遞時預設值總是指向固定的記憶體空間,就是第一次計算的空間。
def
func
(a, b):
print('a=%d, b=%d' % (a,b) )
在使用函式時可以如下方式,結果都是相同的
func(10,20) #不使用引數名,需要按引數順序傳遞
func(a=10,b=20) #使用引數名可以不按順序傳遞
func(b=20,a=10)
#結果:
a=10, b=20
a=10, b=20
a=10, b=20
如果函式定義形式如下方式:
def
func
(*args):
#這種定義會把傳遞的引數包成元組
print(args,type(args))
func(10,20)
#結果:
#(10, 20)
舉乙個和上述過程相反的例子:
def
func
(a,b):
print('a=%d, b=%d' % (a,b) )
a = (10, 20)
func(*a) #在呼叫函式使用`*`則會把元組解包成單個變數按順序傳入函式
#結果:a=10, b=20
總結:*
號在定義函式引數時,傳入函式的引數會轉換成元組,如果*
號在呼叫時則會把元組解包成單個元素。
另一種定義:
def
func
(**kw):
#使用**定義引數會把傳入引數包裝成字典dict
print(kw, type(kw) )
func(a=10,b=20)#這種函式在使用時必須指定引數值,使用key=value這種形式
#結果:
相反的例子:
def
func
(a,b):
print('a=%d, b=%d' % (a,b) )
d =
func(**d) #在呼叫時使用**會把字典解包成變數傳入函式。
def
func
(*args, **kw):
#這種形式的定義代表可以接受任意型別的引數
print(args,kw )
總結:**
號在定義函式引數時,傳入函式的引數會轉換成字典,如果**
號在呼叫時則會把字典解包成單個元素。lambda表示式就是一種簡單的函式
形如f = lambda 引數1,引數2: 返回的計算值
例如:
add = lambda x,y: x+y
print(add(1,2))
'''結果:3
'''
函式傳引數 python 函式引數
1.位置引數 最熟悉的一種引數形式,優點 簡單。缺點 傳遞引數不夠靈活 2.預設引數 優點 提高了 的復用性 缺點 容易產生二義性 注意事項 一是必選引數在前,預設引數在後。二是如何設定預設引數。當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數。def p...
Python之函式(一)定義函式以及傳參
函式的定義 def 函式名 函式體 例子 def func def關鍵字 定義 func函式名 和變數定義規則一樣 必須要寫格式 宣告 語句結束 s 1,2,3 count 0 for i in s count 1 print count 呼叫函式 def my len s 1,2,23,3,4,5...
Forward,redirect,以及引數傳遞問題
forward 常用 流程 客戶端瀏覽器傳送http請求 web伺服器接收該請求並 請求 在方法內 到了另乙個請求 web伺服器實現請求的 處理並執行結果 可能是另乙個action,檢視等 web伺服器傳送結果到瀏覽器。實現 return forward hello.action response....