【Python基礎】Python函式
一、函式是python中使用最高的物件。
函式定義的簡單規則 :
1、用def定義,接著是函式名和引數和冒號,格式:
2、函式內部程式碼塊需要縮排
3、使用return返回函式值,預設返回值是None
格式:
def 函式名(引數) :
程式碼塊
return #可有可無,也可以在程式碼塊任意位置使用
二、函式中return的使用:
return可以在函式的任何地方使用,直接跳出當前函式,忽略其它程式碼塊。
return也可以不帶引數,返回的是None
也可以沒有return,返回的也是None
return也可以返回字典,列表,函式(裝飾器就是返回的函式程式碼塊)。
1、可以跳出if,while,for等語句
def use_return():
i = 0
while True:
i += 1
for j in range(i):
print(j, end='')
if j == 5:
return j
print()
use_return()
# 執行結果:i等於5時會直接結束函式
"""
0
01
012
0123
01234
012345
"""
上面的函式改變一下呼叫方式:
print(use_return()) # 最後一行0123455,最後一個5就是返回函式的值,也就是j的值。嘗試把最後一個5換行。
2、呼叫函式:
使用函式名和括號呼叫函式。不帶括號呼叫的是函式體,相當於起個別名。
使用上面的例子
呼叫1
if use_return() == 5:
print(5)
# 呼叫2
for i in range(0,use_return()):
print(i)
#不能使用,因為use_return()返回的是數字,但不是int型,必須先賦值給變數,然後呼叫變數
v = use_return()
for i in range(0,v):
print(i)
# 呼叫3
s = use_return()
print(s)
# 呼叫函式體
func = use_return
print(func) # 列印的是use_return函式所在的記憶體地址
func() # 執行use_return函式
三、函式變數與外部變數的關係:
1、可更改(mutable)與不可更改(immutable)物件
strings, tuples, 和 numbers 是不可更改的物件,而 list,dict 等則是可以修改的物件。
2、不可變型別:
變數賦值 a=5 後再賦值 a=10,不是a的值變了,變數相當於指標,只是指標指向變了,5本身沒有改變,指向的10是一個新地址,而不是把5變成10.
不可變型別傳入函式內,函式修改後,不會影響外部變數值。
3、可變型別:
變數賦值 la=[1,2,3,4] 後再賦值 la[2]=5 ,雖然la指向的記憶體地址沒變,但是內部的值變了,所以是可變的。
可變型別傳入函式內的是la的本身,所以,在函式內修改la[2],也改變了函式外的la[2]
def modify_la2(la_value):
la_value[2] = 99999
la = [0, 1, 2, 3, 4, 5]
modify_la2(la)
print('la = %s' % la)
# 執行結果
la = [0, 1, 99999, 3, 4, 5]
4、函式變數尋找由最內層向外層找
def modify_la2():
la[2] = 99999
la = [0, 1, 2, 3, 4, 5]
modify_la2()
print('la = %s' % la)
#modify_la2找不到la,則找函式外面的la,la必須寫在呼叫的modify_la2()前面
五、函式的引數傳遞形式:
1、必需引數:呼叫函式時,按變數的順序寫對應的值
2、關鍵字引數:呼叫函式時,使用變數名賦值,變數=值
3、預設引數:定義函式時引數帶值,def user(name, age=20): ,age=20就是預設引數
4、不定長引數:
(*args)不定長引數,只能接收必須引數,把引數轉換成list儲存
(**kwargs)不定長引數,只能接收關鍵字引數,並把引數轉換成詞典儲存
5、引數存在的順序:
必需引數,預設引數,*args, **kwargs
def modify_la2(name, age=20, *args, **kwargs):
age預設引數不起作用,必須被賦值。
def modify_la2(name, age=20, *args, **kwargs):
print('name=', name)
print('age=', age)
print('args=', args)
print('kwargs=', kwargs)
modify_la2('dage', 'men',175, skill='pain', father='Adw')
# 執行結果
name= dage
age= men
args= (175,)
kwargs= {'father': 'Adw', 'skill': 'pain'}
六、匿名函式lambda
lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。
格式:
lambda [arg1 [,arg2,.....argn]]:expression
#梯形面積公式:
resault = lambda x1, x2, h: (x1 + x2)*h/2
print(resault(1, 2, 4))
七、小結:
函式是完成某一個功能的程式碼集合。
函式名和變數名一樣,都是指向記憶體的地址,而指向的記憶體儲存就是函式的程式碼。
函式名()則是呼叫函式返回結果;只有函式名沒有括號,呼叫的是函式本身。
沒有return定義返回,預設返回None。
把某一功能定義成函式,重複呼叫減少程式碼量。
定義函式也可以達到批量修改的效果,只修改函式,所有呼叫都發生改變。
函式是python中使用最高的物件。