You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的变量,而你在函数调用前并没有定义这两个变量,自然会触发报错。

第二段代码加不加引号都能运行的原因

从运行表现反推,你的第二段代码属于以下两种情况之一:

  1. 调用函数前已经提前定义了first_name、last_name两个变量并完成赋值,此时不加引号传参时,解释器可以找到对应变量的值,不会触发报错;传入带引号的字符串时,字符串字面量可以正常作为参数传入,也不会报错。
  2. 第二段代码的函数没有定义形参,所有姓名内容都通过函数内部的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:09:20