Day09 函数 定义函数的三种方式 函数的返回值 函数的参数 注册函数 登录函数

空函数

def func():
	pass

当你不知道函数应该用代码实现时,可以先用空函数占位置

有参函数

def func(参数1, 参数2):
	代码

带参数的函数,参数可以为一个或多个,调用的时候必须要传入参数

无参函数

def func():
    代码

没有任何参数,执行时不需要传入参数,直接执行函数内的代码

函数的返回值

什么是返回值

函数内代码经过一系列逻辑处理之后得出的结果

为什么要有返回值

如果需要在程序中拿到函数中处理出来的结果,则需要函数必须要有返回值

需要注意的是:

  1. return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就结束
  2. return的返回值可以返回任意的数据类型
  3. 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('用户名密码错误,请重新输入')