【问题标题】:How do I replace a variable in a if statement in a function?如何替换函数中if语句中的变量?
【发布时间】:2023-04-04 01:30:02
【问题描述】:
print 'Welcome to the Pig Latin Translator!'

def pyg():
    if name.isalpha and len(name) > 0:
        print
    elif name.isdigit:
        print "This is an integer, not a string!"
        name = raw_input()
        pyg()
    elif len(name) <= 0:
        print "You typed nothing!"
        name = raw_input()
        pyg()
name = raw_input()
pyg()        

所以我得到了错误

UnboundLocalError: 赋值前引用了局部变量 'name'

我想要做的是当我的输入 name 是一个整数时,我输入一些东西来替换 name 并再次运行该函数

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    为什么不把name作为参数传递给函数,让函数接受参数呢?

    print 'Welcome to the Pig Latin Translator!'
    
    def pyg(name):
        if name.isalpha() and len(name) > 0:
            print
        elif name.isdigit():
            print "This is an integer, not a string!"
            name = raw_input()
            pyg()
        elif len(name) == 0:
            print "You typed nothing!"
            name = raw_input()
            pyg(name)
    
    name = raw_input()
    pyg(name)
    

    顺便说一句,()isalphaisdigit 之后缺少代码。 并且长度永远不会变成负数。 len(name) &lt; 0 没有意义。

    【讨论】:

      【解决方案2】:

      这是variable scoping 的问题。 Python 采用与大多数语言不同的approach to function scopes and conflicts。如果您只是读取变量,它将使用全局版本。但是,如果您尝试设置它,它将使用本地版本。

      python 解释器看到你在底部设置了name = raw_input(),并使用本地版本,在整个函数中。由于本地的第一次没有初始化,你会得到一个错误。所以要修复它,你只需要强制 python 使用全局的,这行:

      def pyg():
          global name
      
          . . .
      

      当然,其他人给你的建议是更好的做法,是你应该使用的。

      【讨论】:

      • 谢谢现在我的代码可以工作了,但我还是不明白什么时候应该使用“global”
      • @Ch3wbacc4 很少,如果有的话。通常有比 global 更好的解决方案,看看我的和 falsethu 的答案。全局变量通常会产生您没有意识到的副作用,例如,如果在您的函数调用之间有其他东西正在修改变量。
      猜你喜欢
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2019-09-15
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多