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))
Python基礎:Python函數