函數 1.函數結構 def 是函數的定義關鍵字,my_len是函數名。()傳參用,冒號下麵都是函數體。 執行函數方法:函數名加括弧來執行函數。My_len() 舉例: # s = 'lkfjsjulkjdgjdsf' # def my_len(): # count = 0 # for i in s: ...
函數
1.函數結構
def 是函數的定義關鍵字,my_len是函數名。()傳參用,冒號下麵都是函數體。
執行函數方法:函數名加括弧來執行函數。My_len()
舉例:
# s = 'lkfjsjulkjdgjdsf'
# def my_len():
# count = 0
# for i in s:
# count += 1
#
# print(my_len())
2.函數的封裝
一個函數就是為了實現一個功能
3.Return 在函數中的作用,是給函數的執行者返回值
return作用:
1.終止函數
2.給函數的執行者返回值
retun後接值說明:
Return後面不加任何東西,反悔結果是none
Return,對於單個值來說,後面加什麼反回的就是什麼,是字元串就反回字元串,是數字就反回數字。
Return 對於多個反回值時,會將多個值放到一個元組中,反回給函數的執行者。
舉例:
#def func1():
# print(111)
# print(222)
# return
# print(333)
# print(func1()) ###終止函數反回預設值none
結果:
111
222
None
舉例:
#def func1():
# print(111)
# print(222)
# return 666 ####反回666
# return 'alex' ####反回'alex'
# return 'alex', 666, [1, 2, 3] ###反回一個元組('alex', 666, [1, 2, 3])
4.函數的傳參
函數傳參分為兩個方向:
1. 實參角度
——實參就是在執行函數過程中向函數內傳入的參數。(函數執行裡面放的參數)
2. 行參角度
——行參就是準備被賦值的名字,即在運行函數時準備接收行參的字元。(在函數定義的時裡面放的參數)
註意:行參是不可以被改變得,而實參是可以改變的。
舉例:
# def my_len(argv): # argv是形式參數 ,形參
#
# count = 0
# for i in argv:
# count += 1
# return count
# s = 'lkfjsjulkjdgjdsf'
# l1 = [1, 2, 3, 4, 5]
# print(my_len(l1)) #l1是實際參數, 實參
結果:
5
實參的類型:
1.位置參數
2.關鍵字參數
3.混合參數
(1)位置參數
行參的參數要與實參位置按順序一一對應,也就是說在改行參傳參數的值,要與預先定義的行參位置一一對應,行參會第一個字元會對應接收實參的第一個字元, 依次類推。
(2)關鍵詞參數
關鍵字參數不關心傳入參數放的順序位置,傳入參數要與行參關鍵字一致即可。
(3)混合參數
位置參數和關鍵字參數同時存在
註:關鍵字參數,必須要在位置參數的後面
舉例:
# 位置參數 按照順序一一對應
# def func1(a, b, c):
# print(a, b, c)
# func1(1, 2, 'alex') ###1,2,'alex'分別對應a,b,c
# def max(a, b): return a if a > b else b
# ret = 1 if 2 > 1 else 6
# print(ret)
# print(max(10, 2)) ###10,2,分別對應a,b
# 關鍵字傳參 一一對應。
# def func2(a, b):
# print(a, b)
# func2(b=2, a=3) ###關鍵字a=3 對應行參裡面的a,b=2對應行參裡面的b
混合參數。(位置參數,關鍵字參數) 關鍵字參數必須在位置參數後面。
# def func3(a, b, c, d):
# print(a, b, c, d)
# func3(1,2,d=3,c=5) ###關鍵字必須在位置參數後
行參的類型:
1.位置參數
2.預設參數
3.動態參數 (*args 、 **kwargs )
(1)位置參數
位置參數就是保證要與實參的位置參數保持一致
(2)預設參數
預設參數用的比較多,預設就是在不傳入參數的時候使用的參數即為預設參數,即在實參不輸入參數時,程式運行會使用預先定義好的預設參數,但手動輸入 後悔替換預設參數輸入。
註意,預設參數要在位置參數的後面添加
(3)動態參數(萬能參數)
對參數的個數不固定的時候使用動態參數(萬能參數),即在執行函數時,實參傳入多少參數接收多少參數。
(*args 、 **kwargs )動態參數有兩種:
動態參數分為兩種(萬能參數)
*args 接收所有的位置參數,所有的位置參數都放在一個元祖中。
**kwargs 接收所有關鍵字參數,所有接收到的關鍵字都放在一個字典中。
舉例:
#預設參數:
# def login(name,sex='男'): ###預設參數要在位置參數後面
# # with open('register', encoding='utf-8', mode='a') as f1:
# # f1.write('{},{}\n'.format(name,sex))
# #
# #
# # while True:
# # name = input('請輸入姓名:').strip()
# # if '1' in name:
# # login(name)
# # else:
# # sex = input('請輸入性別:').strip()
# # login(name,sex)
#萬能參數:
# def func3(*args, **kwargs): #函數的定義的時候 * 代表聚合。
# print(args)
# print(kwargs)
# # func3(1, 2, 3, 'alex', c=6, name='wusir', age='21') ###結果:(1, 2, 3, 'alex') {'c': 6, 'name': 'wusir', 'age': '21'}
形參的排列順序:
位置參數--> *args-->預設參數-->**kwargs
舉例:
# def func5(a,b,*args,sex='男',**kwargs):
# print(a,b,)
# print(args)
# print(sex)
# print(kwargs)
5.函數中星號的定義:
(1)在函數定義的時候,*代表聚合
(2)函數的執行時候,*代表打散 註意:字典打散時用**兩個星號
舉例:
# def func3(*args, **kwargs): #函數的定義的時候 * 代表聚合。
# print(args)
# print(kwargs)
# func3(*[1, 2, 3],*(22, 33)) #函數的執行的時候 * 代表打散。 ###結果:(1, 2, 3, 22, 33) {}
# func3(**{'name':"alex"},**{'age':23}) #函數的執行的時候 * 代表打散。 ###結果:() {'name': 'alex', 'age': 23}
# func3(1, 2, 3, 22, 33) #函數的執行的時候 * 代表打散。 ###結果:(1, 2, 3, 22, 33) {}
6.函數的嵌套:(記住兩個關鍵點)
代碼順序執行,當見到函數名加括弧,就是執行函數。
函數在沒有執行完是不會執行下麵的內容的。
註:
執行一個函數就會開闢一個臨時空間進行存儲,即每個函數都會單獨開闢一個臨時空間使用存放函數體內容。
舉例:
# def func1():
# print(666)
#
# def func2():
# func1()
# print(333)
#
# def func3():
# func2()
# print(222)
# print(111)
# func3()
# print(555)
# def func1():
# name = 'susi'
# print(name)
# def func2():
# name1 = 'git'
# print(333)
# print(444)
# func2()
# func1()