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