什么是函数
简单讲,函数就是过程,是”由输入得到输出的过程“。也可以看作是一个工具,用于完成一个特定的任务。当我们需要经常完成这个特定的任务时,我们就可以把完成这个任务的整个过程标准化后封装成一个工具。需要用时直接调用,调用时只需输入所需参数,即可快速得到所需输出。
函数的定义:
定义注册函数
def register():
username_inp = input('请输入你的用户名: ')
print('username_inp: ',username_inp)
pwd_inp = input('请输入你的密码: ')
print('pwd_inp: ',pwd_inp)
with open('username_info.txt','a',encoding = 'utf8') as fa:
if':' in username_inp:
print('输入错误,用户名不能含有冒号')
else:
fa.write(f'{username_inp}:{pwd_inp}')
print('保存成功')
定义登录函数
def login():
with open('username_info.txt','r',encoding='utf8') as fr:
data = fr.read()
data_split = data.split(':')
username,pwd = data_split[0],data_split[1]
username_inp = input('请输入你的用户名: ')
pwd_inp = input('请输入你的密码: ')
if username == username_inp and pwd == pwd_inp:
print('登录成功')
else:
print('登录失败')
register()
login()
函数的三种定义形式
# 1、空函数
def register():
TODO # 先站住位置,后期根据需要补充
pass
# 2、带参函数
# 2.1 参数固定
def compare():
x = 10 # 参数固定的函数
y = 20 # 参数固定的函数
if x > y:
print(x)
else:
print(y)
compare() # 调用函数
# 运行结果显示为:20
# 2.2 参数不固定
def compare(x,y): # 参数没固定,需要输入参数的函数,在括号中声明
if x > y:
print(x)
else:
print(y)
compare(12,23) # 调用函数
# 运行结果显示为:23
# 3、无参函数
def func():
print(1)
func() # 调用函数
# 运行结果显示为:1
函数的返回值
def add(x,y): # 定义一个函数
print(x+y)
add(1,2) # 调用函数
# 当我们不需要打印函数计算结果,只需要调用这个结果时,就只需用return返回这个结果
def add(x, y): # 定义一个函数
return x+y # 指定返回函数结果
add(1,2) # 调用函数后,没有显示结果值,但结果值在内存中待用,可以赋给变量名
res = add(1,2) # 返回的结果值赋给res
print(res) # 打印res显示: 3
def add(x, y): # 定义一个函数
print(x+y)
return x+y # 指定返回函数结果
print(9)
res = add(1,2) # 返回的结果值赋给res
print(res)
# 运行结果显示为:3 3
# 没有打印 9 ,因为函数中的return有结束函数的作用,所以return之后的代码不会被执行,此处print(9)不会被执行
def add(x, y): # 定义一个函数
return (x,y,x+y)
res = add(1,2)
print(res)
# # 运行结果显示为:(1, 2, 3),因为return可以返回任意数据类型
def add(x, y): # 定义一个函数
return x,y,x+y
res = add(1,2)
print(res)
# 运行结果显示为:(1, 2, 3),因为return不加括号返回多个值时,默认以元组的数据形式返回
def add(x, y):
return x+y
res = add(1,2)
print(res*5) # 调用函数后得到的返回值可以用于后续使用
# 运行结果显示为:15
函数的参数
def compare(x,y): # x,y皆为形参,相当于变量名,具有描述意义,接受赋值
if x > y:
print(x)
else:
print(y)
compare(2,3)
# 2和3为实参,实际用于运算的参数,相当于变量值,此处用于给形参赋值
# 位置形参-->位置实参,从左到右一一对应赋值,不可多不可少,
# 默认形参:给位置形参一个默认值,即成为默认形参,调用函数时不必给其传值,有需要也可给其传值
def compare(x,y=3): # x,y皆为形参,相当于变量名,具有描述意义,接受赋值
if x > y:
print(x)
else:
print(y)
compare(2) # 此时2是传给x的,运行结果显示为:3
compare(2,1) # 需要改变默认形参y的值时,可以把新的值传1给他,运行结果显示为:2
def compare1(num1,num2):
if num1 > num2:
return num1
else:
return num2
def compare(x1,x2,x3,x4):
res1 = compare1(x1,x2)
res2 = compare1(x3,x4)
res3 = compare1(res1,res2)
return res3
res = compare(2,5,6,9)
print(res)
# 打印结果显示为:9
# 当参数过多时,我们可以按照位置形参名赋值,也可进行关键字参数赋值,如下所示:
res = compare(2,5,x4=9,x3=6) # 关键字参数和默认参数必须在位置形参后边
print(res)
# 打印结果显示为:9
# 定义函数的参数时,最好是规定清楚需要输入的的参数类型和返回值的数据类型
def f1(num:list, target:int) -> int:
print(num,target)
return 1
f1([1,2],3) # 输入参数时,注意格式符合函数定义的参数格式
作业:
4、编写注册函数
将用户信息保存到文件内,用户信息可保存为nick:123|sean:456|tank:789
# 定义注册函数
def register():
username_inp= input('请输入你的用户名: ')
if ':' in username_inp:
print('输入错误,用户名不能含有冒号')
# print('username_inp: ',username_inp)
pwd_inp = input('请输入你的密码: ')
# print('pwd_inp: ',pwd_inp)
with open('usernames_info.txt','a',encoding = 'utf8') as fa:
fa.write(f'{username_inp}:{pwd_inp},')
print('保存成功')
register()
5、编写登录函数
从文件内读取用户信息进行身份识别
# 定义登录函数
def login():
with open('usernames_info.txt','r',encoding='utf8') as fr:
data = fr.read()
data_split = data.split(',')
dic = {}
for i in data_split[0:-1]:
i_split = i.split(':')
dic[i_split[0]] = i_split[1]
username_inp = input('请输入你的用户名: ')
pwd_inp = input('请输入你的密码: ')
if username_inp in dic and dic[username_inp] == pwd_inp:
print('登录成功')
else:
print('登录失败')
login()