函数

学习目标

  • 掌握python函数使用方式

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("输入有误!")