Day09 函数
定义函数的三种方式
空函数
def func():
pass
当你不知道函数应该用代码实现时,可以先用空函数占位置
有参函数
def func(参数1, 参数2):
代码
带参数的函数,参数可以为一个或多个,调用的时候必须要传入参数
无参函数
def func():
代码
没有任何参数,执行时不需要传入参数,直接执行函数内的代码
函数的返回值
什么是返回值
函数内代码经过一系列逻辑处理之后得出的结果
为什么要有返回值
如果需要在程序中拿到函数中处理出来的结果,则需要函数必须要有返回值
需要注意的是:
- return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就结束
- return的返回值可以返回任意的数据类型
- return的返回值无个数限制
- 0个:返回None
- 1个:返回值是该值本身
- 多个:返回值类型是元组
函数的参数
形参和实参
形参
在函数定义阶段括号里的定义的参数,称之为形式参数(形参),本质就是变量名
实参
在函数调用阶段括号内传入的参数,称之为实际参数(实参),本质就是变量的值
位置参数
位置形参
在函数定义阶段,按照从左到右的顺序依次定义的形参,称为位置形参
def func(num1, num2):
print(num1)
print(num2)
特点:按照位置定义的形参,都必须被传值
位置实参
在函数调用的阶段,按照从左到右的顺序依次传入的实参,称为位置实参
func(1, 2)
特点:按照位置依次给函数传值
默认形参
在定义阶段,就已经被赋值
def func(num1, num2 = 2):
print(num1)
print(num2)
func(1)
特点:在定义是已经被赋值,意味着调用时可以不用为其赋值
注意:
1. 位置形参必须放在默认形参的左边
2. 默认形参的值只在定义的时候赋值一次,也就是说默认参数的值在定义函数的阶段已经固定了
3. 通常默认参数的数据类型为不可变类型(数字型,字符串型)
关键字实参
在调用函数时,按照key = value的形式为指定的参数传值,称为关键字实参
func(num1 = 1, num2 = 2)
特点:可以打破位置的限制,但仍能为指定的形参赋值
注意:
1. 可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的左边
2. 可以混用位置实参和关键字实参,但不可以同时为同一个形参赋值
注册函数
def register():
user_name = input('用户名:')
user_password = input('密码:')
if ':' in user_name:
print('用户名不能含有":"')
else:
with open('user_info.txt', 'a', encoding='utf8') as fa:
fa.write(f'{user_name}:{user_password}')
登录函数
def login():
# 打开用户名密码文件
tag = True
while tag:
with open('user_info.txt', 'r', encoding='utf8') as fr:
user_info = fr.read()
user_info_list = user_info.split(':')
user_name, user_password = user_info_list[0], user_info_list[1]
# 输入用户名密码
user_name_lg = input('用户名:')
user_pwd_lg = input('密码:')
# 验证用户名密码是否正确
if user_name_lg == user_name and user_pwd_lg == user_password:
print('登陆成功')
tag = Flase
else:
print('用户名密码错误,请重新输入')