函数的定义
什么是函数
函数就是一种具备某一功能的工具,事先将工具准备好就是定义函数,遇到应用场景拿来就用就是调用函数。
使用函数
先定义函数,再调用函数
def 函数名():
<函数实现的功能>
# 调用函数
函数名()
注:函数名的命名方式与变量名的命名方式一模一样
函数定义阶段,只检测语法,不执行代码
实现注册、登录功能的函数
注册功能
def register(): # 定义注册功能的函数
print('注册功能')
username_inp = input('请输入你的用户名:')
print('用户名:', username_inp)
pwd_inp = input('请输入你的密码:')
print('密码:', pwd_inp)
with open('user_info.txt', 'a', encoding='utf8') as fa:
if (':'or '.')in username_inp:
print('输入错误, 请重新输入')
else:
fa.write(f'{username_inp}:{pwd_inp}')
print('注册成功')
register() # 调用函数
登录功能
def login():
print('登录功能')
with open('user_info.txt', 'r', encoding='utf8') as fr:
data = fr.read()
res = data.split(':')
# print(res)
username, pwd = res[0], res[1]
username_inp = input('请输入用户名:')
pwd_inp = input('请输入密码:')
if username == username_inp and pwd == pwd_inp:
print('登录成功')
else:
print('登录失败')
login() # 调用函数
定义函数的三种方式
空函数
def register():
# TDDO: 这个功能暂时不会写,如果想到怎么写了,可利用todo,快速找到这个位置
pass # 写个空函数,占个位置
无参函数
函数括号内没有参数,调用时也不需要传入参数
def sum_all():
print(10 + 20)
sum_all()
有参函数
函数括号内有参数,调用时需要传入参数
def sum_all(x,y):
res = x + y
print(res)
sum_all(10, 20)
函数的返回值
函数没有返回值,默认返回None
def add():
x = 10
y = 20
print(add) # <function add at 0x0000027F0FFBD268>函数内存地址
res = add() # res接受一个变量值 (函数的返回值)
print(res) # 返回None
函数可以通过return返回出返回值
def add(x, y):
return x + y
res = add(1, 2)
print(res)
return 可以终止函数
def func():
for i in range(10):
if i == 5:
return # 终止函数
print(i)
func()
# 打印结果:
0
1
2
3
4
return返回多个值
def func():
return 1, 2, 3 # 默认返回的值以元组形式存储
print(func())
函数的参数
形参和实参
def compare(x, y): # 形参
if x > y:
print(x)
else:
print(y)
compare(10, 21) # 实参
-
形参:在函数定义阶段括号内定义的参数,称为形参, 没有实际意义,本质上就是变量名
-
实参:在函数调用时传入的值,称为实参, 本质上就是变量值
位置参数
位置形参
在定义函数时,按照从左往右的顺序依次定义,就是位置形参
位置实参
调用函数时,按照从左往右的顺序依次传入值,就是位置实参。有多少个位置形参,就有多少个位置实参。
默认形参
def func(x, y=10):
print(x)
print(y)
func(1)
# 打印结果:
1
10
在定义阶段就已经赋值,在调用阶段就不需要传值了
但是在调用阶段传值也是可以的,这样值会发生改变
def func(x, y=10):
print(x)
print(y)
func(1, 2)
# 打印结果:
1
2
注意:
- 默认形参必须在位置形参的后面
- 默认形参的值在函数定义时,就已经固定了
关键字参数
def compare1(num1, num2):
if num1 > num2:
return num1
else:
return num2
def compare2(num1, num2, num3, num4):
res1 = compare1(num1, num2)
res2 = compare1(num3, num4)
res3 = compare1(res1, res2)
return res3
res = compare2(2, 6, num4=3, num3=1) # 2,6,1,3 关键字实参,按照位置形参给值,一般用于参数过多
print(res)
关键字实参必须在位置实参之后