鱼C论坛

 找回密码
 立即注册
查看: 2259|回复: 8

[已解决]收集参数与关键字参数的一段程序

[复制链接]
发表于 2020-8-16 16:05:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
课程中介绍,如果在收集参数后再带另一个参数的话,要用关键字参数,不然会报错, 在实践这段过程时,碰到个问题
>>> 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 ,  代码又能跑通
最佳答案
2020-8-16 16:47:22
已经在 定义函数时指定了unit, 然后 调用时,还说unit 为定义。 这是什么原理?   发现如果调用时,不加unit ,  代码又能跑通


定义函数时候,函数的 unit 是指在函数作用域的 unit,而你传入参数时候的 unit 是在全局作用域寻找 unit 变量的值

而你全局作用域没有定义 unit 所以导致你报错了,而且你定义参数时候设置了 unit = '个' 意思是设置函数的默认值为 个,当你不传入关键字参数时候 这个 unit 就等于 '个' 这个字符串

所以你直接这样调用即可:
def test(*pamas, unit='个'):
    print('参数个数=', len(pamas), unit)

test(1,2,3,4)



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-16 16:07:06 | 显示全部楼层
Python 会把你 test(1,2,3,4,unit) 这里的 unit 看作是一个变量,这个变量不存在,所以会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 16:15:20 | 显示全部楼层
test(1,2,3,4,unit=None)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 16:17:09 | 显示全部楼层
这样是不会报错的
>>> def test(*pamas, unit='个'):
                 print ('参数个数=',len(pamas),unit)

>>> test(1,2,3,4)
参数个数= 4 个
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 16:18:39 | 显示全部楼层
这在里面你只输入一个unit的话会被当做一个传入函数的变量处理的,但是并没有声明unit,所以报错
test(1,2,3,4,unit)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 16:19:39 | 显示全部楼层
本帖最后由 小甲鱼的铁粉 于 2020-8-16 16:20 编辑

需要使用unit=   去传入
$Z33W}X]V_0IMJ~M~LB$]CP.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 16:47:22 | 显示全部楼层    本楼为最佳答案   
已经在 定义函数时指定了unit, 然后 调用时,还说unit 为定义。 这是什么原理?   发现如果调用时,不加unit ,  代码又能跑通


定义函数时候,函数的 unit 是指在函数作用域的 unit,而你传入参数时候的 unit 是在全局作用域寻找 unit 变量的值

而你全局作用域没有定义 unit 所以导致你报错了,而且你定义参数时候设置了 unit = '个' 意思是设置函数的默认值为 个,当你不传入关键字参数时候 这个 unit 就等于 '个' 这个字符串

所以你直接这样调用即可:
def test(*pamas, unit='个'):
    print('参数个数=', len(pamas), unit)

test(1,2,3,4)



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-16 23:00:03 | 显示全部楼层
Twilight6 发表于 2020-8-16 16:47
定义函数时候,函数的 unit 是指在函数作用域的 unit,而你传入参数时候的 unit 是在全局作用域寻找 un ...

我再过一遍 局部变量和全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 08:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表