函数
学习目标
1. 基本函数定义语法
"""
语法:
def 函数名(): # 函数名可以使用英文、数字、下划线组成,避开保留字,建议使用下划线拼接多单词、或者小驼峰命名规则
函数代码体
"""
def user_info(): # 定义函数
print("我叫小白,今年23岁,目前单身,微信号:18827777777")
user_info() # 调用函数
2. 函数带形参
"""
语法:
def 函数名(参数1,参数2,...):
函数代码体
"""
def user_info_2(name,age,wechat): # 函数定义了3个形参
print(f"我叫{name},今年{age}岁,目前单身,微信号:{wechat}")
user_info_2("小白",50,"13688884444")
user_info_2(name="小黑",age=50,wechat="13688884444")
user_info_2("小兰",50,wechat="13688884444")
3. 函数形参带默认值
"""
语法:
def 函数名(参数1=默认值1,参数2=默认值2,......):
函数代码体
"""
def user_info_3(name='小白',age=30,wechat='7788wu2'): # 函数定义了3个带默认值的形参
print(f"我叫{name},今年{age}岁,家族人丁兴旺,微信号:{wechat}")
user_info_3() # 调用时不传实参,会使用默认值代替
user_info_3("小白") # 写入一个[位置实参],相当于给函数的第一个形参赋值
user_info_3("小白",18,'22222') # 写入3个[位置实参](位置实参)
user_info_3(age=60) # 写入[关键词实参]
user_info_3("小白",wechat='00ww99') # 写入一个[位置实参]和一个[关键词实参]
# user_info_3("小白",age=21,'00ww99') # 如果同时存在[位置实参]和[关键词实参],[关键词实参]需要排在最后
user_info_3("小白",'00ww99',age=21) # 如果同时存在[位置实参]和[关键词实参],注意两种参数的配合
# 总结:
# ①如果同时存在[位置实参]和[关键词实参],[关键词实参]需要排在最后
# ②[位置实参]一定要保留在原定的位置上
4. 不定个数参数(元组传递)
"""
语法:有参数,参数个数不确定,参数以元组形式传递
def 函数名(*参数名):
函数代码体
"""
def user_info_4(*var): # 不定个数参数,使用*星号作为标识,可以接受0个或多个参数,传入时会自动变成元组形式
print(var)
for i in var:
print(i)
user_info_4()
user_info_4(1)
user_info_4(1, 2, 3)
user_info_4("小白", 555, 5.36, {1, 2, 3})
5. 形参+不定个数参数
"""
语法:
def 函数名(参数1,参数2,*参数名):
函数代码体
"""
def user_info_5(name,age,wechat,*var): # 有形参,又有不定数参数
print(f"我叫{name},今年{age}岁,家族人丁兴旺,微信号:{wechat}")
print(var)
for i in var:
print(i)
user_info_5('夏宇',19,'sjjj778800',1,2,3,4,5) # 位置实参一一对应,剩下的归给[不定个数参数]
# user_info_5(name='夏宇',age=20,wechat='ooii000',1,2,3,4,5) # 不定个数参数当作[位置实参]传递,不能放在[关键词实参]后方
6. 形参+不定个数参数+形参
"""
语法:
def 函数名(参数1,参数2,*参数名,参数n):
函数代码体
"""
def user_info_5(name,age,*var,wechat): # 有形参,又有不定数参数
print(f"我叫{name},今年{age}岁,家族人丁兴旺,微信号:{wechat}")
print(var)
for i in var:
print(i)
user_info_5('小白',18,1,2,3,4,5,wechat='789uuuu') # 不定个数后面的参数,全都要使用[关键词参数]
7. 不定个数参数(字典传递)
"""
语法:
def 函数名(**参数名): # 使用**两个星号作为表示,表示不定个数参数,参数会自动转换成字典格式
函数代码体
"""
def user_info_6(**dic):
print(dic)
user_info_6(name="小黑",age=20,wechat="ssu7787") # 只能使用[关键词实参]进行传递,关键词需要自定义
8. 函数的返回值
"""
语法:
def 函数名(参数):
函数代码体
return 返回值
"""
def add(num_1, num_2):
"""
执行加法操作
:param num_1: 需要相加的第一个数
:param num_2: 需要相加的第二个数
:return: 计算结果
"""
sum = num_1 + num_2
return sum # 将计算结果sum作为返回值
a = add(5,8) # 调用方法后,会将返回值赋值给变量a
print(a)
9. 匿名函数
def a(x, y):
return x + y
z = lambda x, y: x + y # 匿名函数以lambda作为标识,x、y是所需要的参数,:冒号右侧的代码即是函数体 也是返回结果
print(z(1, 2))
9. 变量的作用域
'''关于变量的作用域'''
a = 10 # 全局变量
def x():
a = 8 # 局部变量
print(a,id(a))
def y():
global a # 引入全局变量a
a = 9
print(a,id(a))
x()
y()
print(a,id(a))
函数练习:完成用户进行登录、注册、退出登录、注销
- 定义一个list列表,列表当中的每个元素为一个dict字典,字典中记录用户信息:
- [{"userName":"admin","password":"123456"},{"userName":"root","password":"654321"}]
- 定义四个方法:登录、注册、退登、注销
- 登录:让用户输入userName和password,与列表中的用户信息进行比较,信息匹配则登录成功,否则登录失败
- 注册:让用户输入userName和password,若userName在列表中已存在,则注册失败,否则注册成功
- 退登:退出登录
- 注销:让用户输入当前登录的密码,密码无误,则将该用户信息从列表中删除
参考代码:
user_info = [] # 存放用户信息[{"userName":value, "password":value},{}]
def login(userName, password):
'''
登录
:param userName: 用户名
:param password: 密码
:return: 1登录成功、0登录失败
'''
for i in user_info:
if i["userName"] == userName and i["password"] == password:
return 1
return 0
def register(userName, password):
'''
注册
:param userName: 用户名
:param password: 密码
:return: 1注册成功,0注册失败
'''
for i in user_info:
if i["userName"] == userName:
return 0
user_info.append({"userName": userName, "password": password})
return 1
def quit():
return 0
def log_off(userName, password):
'''
注销
:param userName: 用户名
:param password: 密码
:return: 1注销成功,0注销失败
'''
for i in user_info:
if i["userName"] == userName and i["password"] == password:
user_info.remove(i)
return 1
return 0
userName = "" # 记录当前登录的用户名
isLogin = 0 # 登录状态,0未登录,1登录
while True:
print("""
请选择您的操作:
1.登录
2.注册
3.退出登录
4.注销账号
5.退出系统
""")
opt = input("请输入:")
if opt == "1":
if not isLogin:
userName = input("请输入用户名:")
password = input("请输入密码:")
isLogin = login(userName, password)
if isLogin:
print("登录成功!")
else:
print("登录失败!")
userName = ""
else:
print("当前已登录!")
elif opt == "2":
reg_userName = input("请输入用户名:")
reg_password = input("请输入密码:")
reg_password2 = input("请二次确认密码:")
if reg_password == reg_password2:
is_reg = register(reg_userName, reg_password)
if is_reg:
print("注册成功!")
else:
print("注册失败!")
else:
print("两次密码不一致!")
elif opt == "3":
if isLogin:
isLogin = quit()
if isLogin == 0:
print("退出登录成功!")
else:
print("退出登录失败!")
userName = ""
else:
print("当前未登录!")
elif opt == "4":
if isLogin:
password = input("请输入当前账号的密码:")
is_off = log_off(userName, password)
if is_off:
print("注销成功!")
isLogin = 0
userName = ""
else:
print("注销失败!")
else:
print("当前未登录")
elif opt == "5":
break
else:
print("输入有误!")