函数定义、返回值、函数参数

目录

  • 函数的定义
    • 什么是函数
    • 怎么使用函数
      • 注册功能函数
      • 登录功能函数
  • 函数的定义的三种形式
    • 空函数
    • 有参函数
    • 无参函数
  • 函数的调用
  • 函数的返回值
  • 函数的参数
    • 形参和实参
      • 形参
      • 实参
    • 位置参数
      • 位置形参
      • 位置实参
    • 默认形参
    • 关键字实参
    • 可变长参数
      • 可变长形参之*
      • 可变长形参之**
      • 可变长实参之*
      • 可变实参之**

函数的定义

什么是函数

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

怎么使用函数

def 函数名(等同于变量)():   # 定义函数
    """对函数的描述"""
    代码块

函数名()   # 函数调用

注册功能函数

def register():
    """注册功能"""
    count = 0
    while count < 3:
        username_inp = input('请输入你的用户名:').strip()
        pwd_inp = input('请输入你的密码:').strip()
        re_pwd_inp = input('请再次确认你的密码:').strip()

        if re_pwd_inp != pwd_inp:
            print('两次密码输入不一致!')
            count += 1
            continue

        with open('userinfo.txt', 'a', encoding='utf-8') as fa:
            fa.write(f'{username_inp}:{pwd_inp}\n')
            print('注册成功')
            break
            
register()

登录功能函数

def login():
    """登录功能"""
    username_inp = input('请输入你的用户名:').strip()
    pwd_inp = input('请输入你的密码:').strip()

    user_info = f'{username_inp}:{pwd_inp}'

    with open('userinfo.txt', 'r', encoding='utf-8') as fr:
        data = fr.read()
        user_info_list = data.split('\n')

        if user_info in user_info_list:
            print('登录成功')
        else:
            print('登陆失败')

login()

函数的定义的三种形式

空函数

定义了一个函数,但啥都没有

def func():
    pass

有参函数

def add(x, y):
    """有参函数"""
    print(int(x) + int(y))

add(1, 2)

无参函数

def func():
    print('hello world')

函数的调用

使用函数名()的形式就可以调用函数了

def func(x, y):
    """给定两个数, 打印较大的数"""
    if x > y:
        print(x)
    else:
        print(y)

print(func)
func(10, 20)   # 加括号就能调用(执行内存中的代码)

# 打印结果:
   # 函数的地址
20

函数的返回值

return 返回一个值

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



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

# 打印结果
3

return没有返回值,默认返回None

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



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

# 打印结果:
1 2
None

return可以返回多个值,可以返回任意数据类型,默认用元组形式返回

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


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

# 打印结果:
2
(1, 2, 3)

return会终止函数,不运行下面的代码,即使有多个return,只会执行第一个return,不会执行下一个

def add(x, y):
    print(2)
    return x, y, x + y    # 遇到return就会终止函数
    print('hello world')
    return x


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

# 打印结果:
2
(1, 2, 3)

函数的参数

形参和实参

形参

在函数定义阶段括号内定义的参数,称之为形式参数,简称形参,本质上就是变量名

def func(x, y):
    print(x)
    print(y)

实参

在函数调用阶段括号内传入的参数,称之为实参

func(1, 2)

位置参数

位置形参

在函数定义阶段,按照从左往右的顺序依次定义的参数,称之为位置形参

def func(x, y):
    print(x)
    print(y)

位置实参

在函数调用阶段,按照从左往右的顺序定义的参数,称之为位置实参,依次传值给位置形参

func(1, 2)

默认形参

在函数定义阶段,就已经被赋值

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

func(2)
  • 在定义阶段就已经赋值,在调用时可以不用传值;如果传值,就使用传的值
  • 默认形参必须在位置形参之后

关键字实参

在调用函数时,按照位置形参名传值

func(y=2, x=1)

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

可变长参数

可变长形参之*

形参中的*会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给*后的参数。需要注意的是:*后的参数名约定俗成为args。

def f1(*args):
    print('args:', args)


f1(1, 23, 4)  # args接收位置实参多余的参数

# 打印结果:
args: (1, 23, 4)

可变长形参之**

'''
形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数。需要注意的是:**后的参数名约定俗成为kwargs。
'''

def f2(a,**kwargs):
    print('kwargs:', kwargs)


f2(x=12, a=10, b=9)    # kwargs接收关键字实参多余的参数

# 打印结果:
kwargs: {'x': 12, 'b': 9}

可变长实参之*

def func1(a,b,c,d):
    print(a,b,c,d)

lt = [1,2,3,4]
func1(*lt)     # *lt列表中的元素打散成位置实参依次传给位置形参

可变实参之**

def func(a, b):
    print(a, b)


dic = {'a': 1, 'b': 2}
func(**dic)               # **dic把字典打散成关键字实参然后传给函数func

你可能感兴趣的:(函数定义、返回值、函数参数)