Python用户自定义函数运行逻辑及变量作用域入门疑问咨询
问题解答
1. round1代码输出全局bruce值的原因
你定义的printTwice函数内部,只用到了变量bruce,完全没有使用接收参数的not1变量。Python查找变量的优先级是:先找函数内部的局部变量,找不到再找外层的全局变量。你的函数里既没有定义局部的bruce,参数名也不是bruce,所以自然会读取全局作用域里你通过input赋值的bruce的值,传入的"a"被赋值给了not1但全程没被使用,看起来就像被忽略了。
2. round2代码报NameError的原因
函数调用时会先计算括号内所有参数表达式的值,再把值传给函数参数:
- round0里的
"alpha"、round1里的"a"都是带引号的字符串字面量,属于Python直接识别的固定值,不需要提前定义,计算时直接就能得到对应的字符串值,所以不会报错。 - round2里你写的
a没有加引号,Python会把它识别为变量名,需要先找到变量a的定义才能拿到它的值。但你的整段代码里从来没有定义过名为a的变量,所以在计算参数值这一步就会抛出NameError,还没到执行函数内部逻辑的阶段。
内容的提问来源于stack exchange,提问作者x t
相关产品推荐
相关产品推荐

