Python函数调用字符串参数引号使用规则及报错原因咨询
Python函数传参引号规则与问题原因
Python调用函数时,参数加不加引号是语法层面的固定规则,和函数接收什么类型的参数无关:
- 不带引号的参数会被Python识别为标识符(变量名/函数名等),解释器会去当前代码作用域查找对应名称的已定义对象,如果找不到就直接抛出
NameError报错。 - 带单引号/双引号的参数会被Python识别为字符串字面量,本身就是固定的字符串值,不需要提前定义,可以直接作为参数传入。
第一段代码的报错原因
你写的第一段代码本身存在逻辑冗余:
def my_name(first_name,last_name): first_name = input('enter the first name:') last_name = input('enter the last name:') print(first_name+' ' + last_name) my_name('first_name','last_name')
函数定义的first_name、last_name两个形参,在函数内部前两行就被input()的返回值直接覆盖了,你调用函数时传入的任何参数都不会被实际使用,属于完全无效的传参。
当你调用时去掉参数的引号,写成my_name(first_name, last_name)时,Python会尝试查找名为first_name、last_name的变量,而你在函数调用前并没有定义这两个变量,自然会触发报错。
第二段代码加不加引号都能运行的原因
从运行表现反推,你的第二段代码属于以下两种情况之一:
- 调用函数前已经提前定义了
first_name、last_name两个变量并完成赋值,此时不加引号传参时,解释器可以找到对应变量的值,不会触发报错;传入带引号的字符串时,字符串字面量可以正常作为参数传入,也不会报错。 - 第二段代码的函数没有定义形参,所有姓名内容都通过函数内部的
input()交互获取,调用时不需要传入任何参数,自然不存在参数是否加引号的报错问题,这类函数写法参考:def my_name(): first_name = input('enter the first name:') last_name = input('enter the last name:') print(first_name+' ' + last_name)
编写建议:如果函数逻辑是通过
input()实时获取用户输入,就不需要在函数定义时设置同名形参,避免传入的参数被直接覆盖产生冗余代码。
内容的提问来源于stack exchange,提问作者Geetu Sethi
相关产品推荐
相关产品推荐

