【问题标题】:python pass function arguments outside functionpython在函数外传递函数参数
【发布时间】:2017-06-21 06:08:26
【问题描述】:

我的代码是这样设计的

while True:

    globvar = 0
    def test(self, response):
      #something
      callback=self.set_globvar_to_one

    def set_globvar_to_one(self, response):
      global globvar
      globvar = raw_input("Please enter 'hello':")

    set_globvar_to_one()

    if globvar.strip() == 'hello':
        continue
    else:
        print 'Goodbye'
        break

但我收到以下错误

TypeError: set_globvar_to_one() 只需要 2 个参数(给定 0)

更新: 我想获取在函数中分配的 globvar 变量,并在函数之外使用它 问题是参数不是在函数之外定义的

【问题讨论】:

  • 为什么会有两个不同的同名函数?
  • 我不知道您要实现什么目标,但您显然没有朝着正确的方向前进...您应该解释您要解决的真正问题(以及上下文)而是。
  • 是的,@brunodesthuilliers 所说的没有全貌,很难看到您希望实现的目标。
  • 很酷,不是你已经编辑了它似乎是我编辑的答案@kim

标签: python function arguments


【解决方案1】:

您已定义函数 set_globvar_to_one 以接收 2 个参数 selfresponse

但是当你在第 12 行调用它时,你并没有向它传递任何参数 set_globvar_to_one()

添加这两个参数,您的问题就会消失。

set_globvar_to_one(self, response)

【讨论】:

  • 然后我得到 NameError: name 'self' is not defined
  • 这是一个更大的类的一部分吗? self 通常被保留来表示一个类的实例,以供该类的函数使用。你能发布更多关于你正在尝试做的事情的背景信息吗?我认为 set_globvar_to_one 的参数中不需要包含响应
【解决方案2】:

就在您的函数定义下方,您正在调用原始函数set_globvar_to_one(),并且它也没有任何参数。由于您将 self 作为定义中的第一个参数传递,因此我假设此块在 class 定义中。

所以你应该尝试类似self.set_globvar_to_one(response) 而不是set_globvar_to_one()

P.S:在set_globvar_to_one 的定义中,我认为不需要response。此外,在循环之外定义此函数将是一种更好的编码实践。

【讨论】:

    【解决方案3】:

    如前所述,这主要是因为您没有将正确数量的参数传递给函数。

    请参阅以下代码,它应该可以执行您想要的操作(获取函数内设置的 globvar 的值):

       while True:
    
          globvar = 0
    
          def test(self, response):
            #something
            callback=self.set_globvar_to_one
    
          def set_globvar_to_one(self, response):
            global globvar
            globvar = raw_input("Please enter 'hello':")
    
          set_globvar_to_one("self","response")
    
          if globvar.strip() == "hello":
            continue
          else:
            print 'Goodbye'
            break
    

    【讨论】:

    • 那里甚至没有发生错误。它位于 set_globvar_to_one() 的第 12 行
    • 等等......所以你知道这一点但你没有给它任何参数?......问题仍然存在,它需要两个参数。
    • 在 Python 中,函数是一个对象,因此将其分配给变量是完全合法的。
    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 2019-10-26
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    相关资源
    最近更新 更多