初识python(八)

函数的定义

什么是函数

函数就是一种具备某一功能的工具,事先将工具准备好就是定义函数,遇到应用场景拿来就用就是调用函数。

使用函数

先定义函数,再调用函数

def 函数名():
    <函数实现的功能>
   
# 调用函数
函数名()

注:函数名的命名方式与变量名的命名方式一模一样

函数定义阶段,只检测语法,不执行代码

实现注册、登录功能的函数

注册功能

def register():   # 定义注册功能的函数
    print('注册功能')
    username_inp = input('请输入你的用户名:')
    print('用户名:', username_inp)
    pwd_inp = input('请输入你的密码:')
    print('密码:', pwd_inp)
    with open('user_info.txt', 'a', encoding='utf8') as fa:
        if (':'or '.')in username_inp:
            print('输入错误, 请重新输入')
        else:
            fa.write(f'{username_inp}:{pwd_inp}')
            print('注册成功')
            
register()   # 调用函数

登录功能

def login():
    print('登录功能')

    with open('user_info.txt', 'r', encoding='utf8') as fr:
        data = fr.read()
        res = data.split(':')
        # print(res)
        username, pwd = res[0], res[1]

        username_inp = input('请输入用户名:')
        pwd_inp = input('请输入密码:')
        if username == username_inp and pwd == pwd_inp:
            print('登录成功')
        else:
            print('登录失败')

login()  # 调用函数

定义函数的三种方式

空函数

def register():
    # TDDO: 这个功能暂时不会写,如果想到怎么写了,可利用todo,快速找到这个位置
    pass   # 写个空函数,占个位置

无参函数

函数括号内没有参数,调用时也不需要传入参数

def sum_all():
    print(10 + 20)
    
sum_all()

有参函数

函数括号内有参数,调用时需要传入参数

def sum_all(x,y):
    res = x + y
    print(res)
    
sum_all(10, 20)

函数的返回值

函数没有返回值,默认返回None

def add():
    x  = 10
    y = 20
    
print(add)    # <function add at 0x0000027F0FFBD268>函数内存地址
res = add()   # res接受一个变量值 (函数的返回值)
print(res)   # 返回None

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

def add(x, y):
    return x + y

res = add(1, 2)
print(res)

return 可以终止函数

def func():
    for i in range(10):
        if i == 5:
            return    # 终止函数
        print(i)
        
func()
# 打印结果:
0
1
2
3
4

return返回多个值

def func():
    return 1, 2, 3   # 默认返回的值以元组形式存储

print(func())   

函数的参数

形参和实参

def compare(x, y):   # 形参
    if x > y:
        print(x)
    else:
        print(y)
        
compare(10, 21)   # 实参
  • 形参:在函数定义阶段括号内定义的参数,称为形参, 没有实际意义,本质上就是变量名

  • 实参:在函数调用时传入的值,称为实参, 本质上就是变量值

位置参数

位置形参

在定义函数时,按照从左往右的顺序依次定义,就是位置形参

位置实参

调用函数时,按照从左往右的顺序依次传入值,就是位置实参。有多少个位置形参,就有多少个位置实参。

默认形参

def func(x, y=10):
    print(x)
    print(y)
    
func(1)

# 打印结果:
1
10

在定义阶段就已经赋值,在调用阶段就不需要传值了

但是在调用阶段传值也是可以的,这样值会发生改变

def func(x, y=10):
    print(x)
    print(y)
    
func(1, 2)
# 打印结果:
1
2

注意:

  • 默认形参必须在位置形参的后面
  • 默认形参的值在函数定义时,就已经固定了

关键字参数

def compare1(num1, num2):
    if num1 > num2:
        return num1
    else:
        return num2


def compare2(num1, num2, num3, num4):
    res1 = compare1(num1, num2)
    res2 = compare1(num3, num4)
    res3 = compare1(res1, res2)
    return res3


res = compare2(2, 6, num4=3, num3=1)  # 2,6,1,3  关键字实参,按照位置形参给值,一般用于参数过多
print(res) 

关键字实参必须在位置实参之后

猜你喜欢

转载自www.cnblogs.com/setcreed/p/11448723.html