day09

函数

函数实在分开工具,不会减少代码量

函数的语法

'''
#创建一个工具,不会使用
(工具名--》与变量名的规范一模一样)
def 函数名():
	<函数实现的功能>
    
# 使用的时候使用
函数名()
'''

定义函数

编写注册函数

def register():
    # 注册
    print('注册功能')
    username_inp = input('请输入你的用户名:')
    print('username_inp:', username_inp)
    pwd_inp = input('请输入你的密码:')
    print('pwd_inp', pwd_inp)
    
    with open('user_info.txt', 'a', encoding='utf8') as fa:
        if ':' in username_inp:
            print('输入错误,用户名不能含有:')
            else:
                fa.write(f'{usernamme_inp}:{pwd_inp}')
                print('保存成功')
             
register()

编写登录函数

def login():
    # 登陆
    print('登陆功能')
    with open('user_info.txt', 'r', encoding='utf8') as fr:
        data = fr.read()
        data_split = data.split(':')
        
        username, pwd = data_split[0], data_split[1] #一次性定义多个变量
        # username = data_split[0]
        # pwd = data_split[1]
        
        username_inp = input('请输入你的用户名:')
        pwd_inp =input('请输入你的密码:')
        
        if username == username_inp and pwd == pwd_inp:
            print('登陆成功')
        else:
            print('登陆失败')
# 以上只是在定义一个函数,创建工具(函数定义阶段只检测语法,不执行代码)

# 如果要运行函数,直接调用
login()

定义函数的三种方式

空函数

def register():
    # TODO:著恶策功能,暂时不会写
    pass # 写个空函数,占个位置

有参函数(有参数()的函数)

def compare(x, y):
    # x = 10
    # y = 20
    if x > y:
        print(x)
    else:
        print(y)
compare(30, 40)         

无参函数

def func():
    print(i)
func()

函数的返回值

def compare():
    x = 10
    y = 20
    if x > y:
        print(x)
    else:
        print(y)  # 20
        

print(1,compare) #<function comare at 0x00000255297B1EA0> #函数内存地址
res = compare() # res接收一个变量值(函数的返回值)
print('res:',res)     

1、如果函数没有返回值,默认返回None

None就是返回值(使用函数后拿到的一个结果)

2、函数可以通过return返回出返回值

def compare():
    x = 10
    y = 20
    if x > y:
        return x
    else:
        return y
res = compare()
print(res)

3、return 可以终止函数

def print_1_10():
    for i in range(10):
        if i == 5:
            return # 终止函数
        print(i)
        
print_1_10()        

4、return 可以返回多个值,以列表形式存储

def return_nums():
    return 10, 100, 1000

res = return_nums()
print(res[1])

5、内置方法

lis = [2, 3, 1]

函数的参数

def compare(num1, num2): # 形(形式)参:一般具有描述意义,毫无作用(接收实参)
    if num1 > num2:
        print(num1)
    else:
        print(num2)
        
compare(80,140) # 实(实际)参:具有实际的意义,具体的一个值(传给形参)

形参

位置实参

从左到右一个一个写过,就叫做位置形参

默认(默认值)形参

给位置形参一个默认值,让他成为默认形参,以后调用不需要为他传值,但是你为他传值的话,他也会接收

默认参数必须得放在最后面(位置参数后面)

def compare(num1, num2=140): # 形(形式)参
    if num1 > num2:
        return num1
    else:
        return num2
compare(80,60) # 实(实际)参:具有实际的意义,具体的一个值(传给形参)
#compare(180) 

实参

位置实参

从左到右一个一个写过,就叫做位置实参

关键字实参

位置实参加上默认值,然后按照位置形参名传值

关键字实参也必须在位置参数后面

def compare2(num1, num2): # 形(形式)参
    if num1 > num2:
        return num1
    else:
        return num2

    
def compare4(num1, num2, num3, num4):
    print(num1, num2, num3, num4) # 4 0 2 3
    res1 = compare2(num1, num2)
    res2 = compare2(num3, num4)
    res3 = compare2(res1, res2)
    
    return res3

res = compare4(4, 0, num4=2, num3=3) # 4 0 3 2 #关键字参数,按照位置形参名给值,这个一般用于参数过多
print(res)

# :后面假的是参数的数据类型,没有限制死;--》限制返回值
def f1(nums:list, target:int) -> int:
    print(nums, target)
    return [1,2]

f1([1,2], 1)

#
s = 'nick' # type:list #规定了这个变量的数据类型
posted @ 2019-09-02 15:34  Isayama  阅读(118)  评论(0编辑  收藏  举报