收集参数与关键字参数的一段程序
课程中介绍,如果在收集参数后再带另一个参数的话,要用关键字参数,不然会报错, 在实践这段过程时,碰到个问题>>> def test(*pamas, unit='个'):
print ('参数个数=',len(pamas),unit)
>>> test(1,2,3,4,unit)
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
test(1,2,3,4,unit)
NameError: name 'unit' is not defined
===========================================================
已经在 定义函数时指定了unit, 然后 调用时,还说unit 为定义。 这是什么原理? 发现如果调用时,不加unit ,代码又能跑通 Python 会把你 test(1,2,3,4,unit) 这里的 unit 看作是一个变量,这个变量不存在,所以会报错。 test(1,2,3,4,unit=None) 这样是不会报错的
>>> def test(*pamas, unit='个'):
print ('参数个数=',len(pamas),unit)
>>> test(1,2,3,4)
参数个数= 4 个
>>>
这在里面你只输入一个unit的话会被当做一个传入函数的变量处理的,但是并没有声明unit,所以报错test(1,2,3,4,unit)
本帖最后由 小甲鱼的铁粉 于 2020-8-16 16:20 编辑
需要使用unit= 去传入 已经在 定义函数时指定了unit, 然后 调用时,还说unit 为定义。 这是什么原理? 发现如果调用时,不加unit ,代码又能跑通
定义函数时候,函数的 unit 是指在函数作用域的 unit,而你传入参数时候的 unit 是在全局作用域寻找 unit 变量的值
而你全局作用域没有定义 unit 所以导致你报错了,而且你定义参数时候设置了 unit = '个' 意思是设置函数的默认值为 个,当你不传入关键字参数时候 这个 unit 就等于 '个' 这个字符串
所以你直接这样调用即可:
def test(*pamas, unit='个'):
print('参数个数=', len(pamas), unit)
test(1,2,3,4)
Twilight6 发表于 2020-8-16 16:47
定义函数时候,函数的 unit 是指在函数作用域的 unit,而你传入参数时候的 unit 是在全局作用域寻找 un ...
我再过一遍 局部变量和全局变量{:9_222:}
页:
[1]