函数的调用

函数的调用

1. 函数的调用

  • 函数的三种调用方式

    • 直接调用函数并获取返回值

      def add(a, b):
          return a + b
      res = add(1,2)
      print(res) # 3
      
    • 使用表达式调用函数

      def add(a, b):
          return a + b
      
      
      res = add
      # res = add, res加上括号等于add()
      # 传入参数可以等到add()函数的返回值
      print(res(1, 2))
      
    • 函数作为参数

      # 函数的返回值作为参数
      def plus(num):
          return num + 100
       
      def result(a,b):
        return a + b
      
      res = result(10,plus(10))
      print(res) # 120
        
        
      # 函数的内存地址作为参数,函数执行传参时,传递的是内存地址
      def plus():
          num = 10
          return num + 100
      
      
      def result(a, b):
        	# b位置传的是另外一个函数名,函数名+()就等于调用函数,可以拿到函数的返回值
          return a + b()
      
      
      res = result(10, plus)
      print(res) 	# 120
      

2.函数的参数

2.1形参与实参

  • 形参:在定义函数阶段时定义的参数叫形式参数,形参相当于变量名

  • 实参:在调用函数阶段时传入的值称之为实际参数,相当于变量值

    # x,y 是形参,x = 1,y = 2
    def func(x,y):
    	print(x,y)
     
    # 1,2是实参
    func(1,2)
    
  • 形参与实参的关系:

    • 在调用阶段,实参(变量值)会绑定给形参(变量名)
    • 这种关系只能在函数体中使用
    • 这种关系调用时生效,调用结束接触

2.2形参和实参的使用

  • 位置参数:按照从左到右的顺序依次定义的参数

    • 位置形参,必须传值,多一个不行,少一个不行

    • 位置实参:从左到右安转顺序依次传入值,按照顺序与形参一一对应

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

  • 关键字参数

    • 在调用函数时,实参可以是key=value的形式传入值,称为关键字参数,凡是按照这种形式定义的实参,可以完全不按照从左到右的顺序定义,但仍能为指定的形参赋值

      # x = 1,y = 2
      def func(x,y):
        print(x,y)
        
      # 按照顺序传
      func(x = 1,y = 2)
      # 不按照顺序传
      func(y = 2,x = 1)
      
    • 位置和关键字混合使用

      # 必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值
      # 位置参数必须放在关键字参数前面
      def func(x,y):
        print(x,y)
        
      func(1,y=2)
      
      # 不可以对一个形参重复赋值
      func(1,2,x=3,y=2) # 这是错误的
      
  • 默认参数

    • 在定义函数阶段,就已经被赋值的形参,叫做默认参数

      def register(name,age,sex='男'):
        print(name,age,sex)
      
      register('serein',18) # serein 18 男
      register('formerly',19,'女') # formerly 19 女
      

2.3 可变长度的参数(*与**的用法)

  • 可变长度值得是调用函数时,传入的值(实参)的个数不固定
  • 实参时用来为形参赋值的,所以对应着,针对一处的实参必有对应的形参来接受
2.3.1可变长位置参数(*args)
# 可变长位置参数(*args)
# 【一】可变长位置参数 --- *args
# **kwargs  key:word

# def index(*args):
#     print(args)  # (1, 2, 3)
#     x, y, z = args
#     print(x + y + z)
#
#
# # index(1)
# index(1, 2, 3)

# def index(*args):
#     start = 0
#     for i in range(len(args)):
#         start += args[i]
#     print(start)
#
# # 1 + 2 + 3 + 4
# # index(1)
# index(1, 2, 3)


# def index(*args):
#     print(args)  # (1, 2, 3)

# num_list = [1,2,3,4,5,6]
# print(*num_list)
# index(*num_list)
2.3.2 可变长关键字参数(**kwargs)
# 【二】可变长关键字参数(**kwargs)
# def index(*args):
#     print(args)
# index(1,2,3)

# 可变长关键字参数 : 传实参的时候要按照关键字去传
# 传到函数内容的时候就会被 kwargs 接收成字典
# def index(**kwargs):
#     user_dict = {'name': 'serein'}
#     if kwargs:
#         user_dict.update(kwargs)
#     return user_dict
# res = index(age=18)
# print(res)

# 解包 : ** 将字典解压成键值对传到函数内部
# def index(**kwargs):
#     user_dict = {'name': 'serein'}
#     if kwargs:
#         user_dict.update(kwargs)
#     return user_dict
#
#
# user_data = {'age': 18, 'gender': '男'}
# # print(**user_data)
# res = index(**user_data)
# print(res)

# 可变长位置参数和可变长关键字参数混合使用
def register(name, age, *args, **kwargs):
    user_dict = {'name': name, 'age': age}
    # 如果有位置参数进来而没有变量名接收的时候就会打包成元组,放到上面的字典中
    if args:
        user_dict['additional_info'] = args
    # 如果有关键字参数进来,就会被字典更新
    if kwargs:
        user_dict.update(kwargs)
    return user_dict


user_dict = register("serein", 18, "handsome",'music', hobby=["music"])
print(user_dict) # {'name': 'serein', 'age': 18, 'additional_info': ('handsome', 'music'), 'hobby': ['music']}
2.3.3 命名关键字参数
def login(name, pwd, hobby, sex):
#     print(f'{name}-{pwd}-{hobby}-{sex}')
# login('serein', '521', 'music', '男')

# 命名关键字参数  在函数定义形参时,
# 如果出现 * 隔断两边的形参,
# *前面的参数任意(可位置/可关键字)
# * 后面的参数必须按照关键字传参数
# def login(name,pwd,*,hobby,sex):
#     print(f'{name}-{pwd}-{hobby}-{sex}')
# login('serein', '521', hobby='music', sex='男')


# def index(name='serein',age):
#     ...
# 命名关键字参数也可以使用默认值
# 默认关键字参数的位置可以放在位置参数前面
def login(name, pwd, *, hobby='music', sex):
    print(f'{name}-{pwd}-{hobby}-{sex}')


login('serein', '521', sex='男')
login('serein', '521', hobby='run', sex='男')
posted @   Formerly0^0  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示