Python基础(十)

  今日主要内容
  
  补充:传参与参数分配区别
  
  动态传参
  
  函数注释
  
  名称空间
  
  函数名的使用
  
  函数嵌套
  
  global和nonlocal
  
  补充:传参与参数分配区分
  
  先看一个函数定义和函数调用
  
  def func(a, b):
  
  print(b, a)
  
  a = 5
  
  b = 10
  
  func(b, a)  # 5 10
  
  粉色箭头是传参的过程
  
  青色箭头是分配参数的过程
  
  传参的过程按照参数类型进行,位置参数按顺序一一对应传参,与变量名是什么无关
  
  而参数分配是函数自己的事,函数体属于函数,分配参数的过程要按照变量名分配
  
  一、动态传参
  
  (一) 为什么要用动态传参
  
  先来看一个例子:
  
  定义一个吃饭的函数,每次调用时传入要吃的东西,打印菜单
  
  def eat(zhushi, huncai, sucai, tang, tiandian):
  
  print("我要吃:", zhushi, huncai, sucai, tang, tiandian)
  
  eat("大米饭", "红烧肉", "烧茄子", "番茄汤", "慕斯")
  
  # 我要吃: 米饭 红烧肉 烧茄子 番茄汤 慕斯
  
  这可能是我的饭量,但是这时来了一个女生,女生吃不了这么多啊,只选了一个小花卷,一盘黄瓜炒鸡蛋
  
  def eat(zhushi, huncai, sucai, tang, tiandian):
  
  print("我要吃:", zhushi, huncai, sucai, tang, tiandian)
  
  eat("小花卷", "黄瓜炒鸡蛋")
  
  # TypeError: eat() missing 3 required positional arguments: 'sucai', 'tang', and 'tiandian'
  
  由于我填入的参数与定义的参数数量不对应,调用时就会报错,怎么解决这个事情呢,这就要用到了我们的动态传参。
  
  动态传参可以给函数传入不定量的参数,以元组、字典的方式打包起来,这就解决了我们填入参数是数量不定引发的error,下面我们来看看动态传参具体的方法
  
  (二)两类动态传参
  
  动态位置参数
  
  动态关键字参数
  
  动态位置参数(动态接收位置参数)
  
  先来回忆一下位置参数,按照一一对应的位置来传参
  
  def eat(zhushi, tang):  # 按照位置接收参数(形参)
  
  print(f"主食:{zhushi} 汤:{tang}")
  
  eat("米饭", "番茄蛋花汤")  # 位置参数(实参)
  
  # 主食:米饭 汤:番茄蛋花汤
  
  动态接收位置参数,在形参前加一个星号*,表示可接收任意数量的形参,以元组存储
  
  def eat(*food):  # 参数前加一个星号,表示动态接收位置参数
  
  print(food)
  
  eat("米饭", "番茄蛋花汤")  # 可以填写任意数量参数
  
  # ('米饭', '番茄蛋花汤')
  
  动态位置参数在python中一般用*args来表示,只是一个行业内的规范,也可以用其他变量名定义但不建议使用
  
  def eat(*args):  # 一般用*args表示动态位置参数
  
  print(args)
  
  eat("米饭", "番茄蛋花汤")  # 可以填写任意数量参数
  
  # ('米饭', '番茄蛋花汤')
  
  结合之前两种形参(位置参数、默认值参数)共同分析
  
  位置参数 + 动态位置参数
  
  位置参数必须在动态位置参数前(位置参数 > 动态位置参数)
  
  def eat(zhushi, *food):
  
  print(zhushi, food)
  
  eat("米饭", "红烧肉", "排骨", "烧鸡")
  
  # 米饭 ('红烧肉', '排骨', '烧鸡')
  
  原因:如果动态位置参数(带星的)在前,那么所有实参全部都传给了动态位置参数(带星的),后面的位置参数(不带星的)是接收不到任何实参的,导致报错
  
  def eat(*food, zhushi):
  
  print(food, zhushi)
  
  eat("米饭", "    红烧肉", "排骨", "烧鸡")
  
  # TypeError: eat() missing 1 required keyword-only argument: 'zhushi'
  
  默认值参数 + 动态位置参数
  
  默认参数必须在动态位置参数后( 动态位置参数 > 默认值参数)
  
  def eat(*food, zhushi="米饭"):
  
  print(food, zhushi)
  
  eat("回锅肉", "红烧肉", "翡翠白玉汤")
  
  # ('回锅肉', '红烧肉', '翡翠白玉汤') 米饭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值