目錄
函數的定義
什么是函數
函數就是一種具備某一功能的工具,事先將工具准備好就是函數的定義,遇到場景拿來就用。
怎么使用函數
def 函數名(等同於變量)(): # 定義函數
"""對函數的描述"""
代碼塊
函數名() # 函數調用
注冊功能函數
def register():
"""注冊功能"""
count = 0
while count < 3:
username_inp = input('請輸入你的用戶名:').strip()
pwd_inp = input('請輸入你的密碼:').strip()
re_pwd_inp = input('請再次確認你的密碼:').strip()
if re_pwd_inp != pwd_inp:
print('兩次密碼輸入不一致!')
count += 1
continue
with open('userinfo.txt', 'a', encoding='utf-8') as fa:
fa.write(f'{username_inp}:{pwd_inp}\n')
print('注冊成功')
break
register()
登錄功能函數
def login():
"""登錄功能"""
username_inp = input('請輸入你的用戶名:').strip()
pwd_inp = input('請輸入你的密碼:').strip()
user_info = f'{username_inp}:{pwd_inp}'
with open('userinfo.txt', 'r', encoding='utf-8') as fr:
data = fr.read()
user_info_list = data.split('\n')
if user_info in user_info_list:
print('登錄成功')
else:
print('登陸失敗')
login()
函數的定義的三種形式
空函數
定義了一個函數,但啥都沒有
def func():
pass
有參函數
def add(x, y):
"""有參函數"""
print(int(x) + int(y))
add(1, 2)
無參函數
def func():
print('hello world')
函數的調用
使用函數名()
的形式就可以調用函數了
def func(x, y):
"""給定兩個數, 打印較大的數"""
if x > y:
print(x)
else:
print(y)
print(func)
func(10, 20) # 加括號就能調用(執行內存中的代碼)
# 打印結果:
<function func at 0x00000253DFEF0950> # 函數的地址
20
函數的返回值
return 返回一個值
def add(x, y):
return x + y
res = add(1, 2)
print(res)
# 打印結果
3
return沒有返回值,默認返回None
def add(x, y):
print(x, y)
# return x + y
res = add(1, 2)
print(res)
# 打印結果:
1 2
None
return可以返回多個值,可以返回任意數據類型,默認用元組形式返回
def add(x, y):
print(2)
return x, y, x + y
res = add(1, 2)
print(res)
# 打印結果:
2
(1, 2, 3)
return會終止函數,不運行下面的代碼,即使有多個return,只會執行第一個return,不會執行下一個
def add(x, y):
print(2)
return x, y, x + y # 遇到return就會終止函數
print('hello world')
return x
res = add(1, 2)
print(res)
# 打印結果:
2
(1, 2, 3)
函數的參數
形參和實參
形參
在函數定義階段括號內定義的參數,稱之為形式參數,簡稱形參,本質上就是變量名
def func(x, y):
print(x)
print(y)
實參
在函數調用階段括號內傳入的參數,稱之為實參
func(1, 2)
位置參數
位置形參
在函數定義階段,按照從左往右的順序依次定義的參數,稱之為位置形參
def func(x, y):
print(x)
print(y)
位置實參
在函數調用階段,按照從左往右的順序定義的參數,稱之為位置實參,依次傳值給位置形參
func(1, 2)
默認形參
在函數定義階段,就已經被賦值
def func(x, y=10):
print(x)
print(y)
func(2)
- 在定義階段就已經賦值,在調用時可以不用傳值;如果傳值,就使用傳的值
- 默認形參必須在位置形參之后
關鍵字實參
在調用函數時,按照位置形參名傳值
func(y=2, x=1)
關鍵字實參必須在位置實參后面
可變長參數
可變長形參之*
形參中的*會將溢出的位置實參全部接收,然后存儲元組的形式,然后把元組賦值給*后的參數。需要注意的是:*后的參數名約定俗成為args。
def f1(*args):
print('args:', args)
f1(1, 23, 4) # args接收位置實參多余的參數
# 打印結果:
args: (1, 23, 4)
可變長形參之**
'''
形參中的**會將溢出的關鍵字實參全部接收,然后存儲字典的形式,然后把字典賦值給**后的參數。需要注意的是:**后的參數名約定俗成為kwargs。
'''
def f2(a,**kwargs):
print('kwargs:', kwargs)
f2(x=12, a=10, b=9) # kwargs接收關鍵字實參多余的參數
# 打印結果:
kwargs: {'x': 12, 'b': 9}
可變長實參之*
def func1(a,b,c,d):
print(a,b,c,d)
lt = [1,2,3,4]
func1(*lt) # *lt列表中的元素打散成位置實參依次傳給位置形參
可變實參之**
def func(a, b):
print(a, b)
dic = {'a': 1, 'b': 2}
func(**dic) # **dic把字典打散成關鍵字實參然后傳給函數func