【问题标题】:Variable referencing error: how do I make this work?变量引用错误:如何使这项工作?
【发布时间】:2017-05-01 06:43:03
【问题描述】:

现在我知道了全局声明,也可以弄清楚为什么会出现错误(函数中引用了计数,我稍后会调用它),但想不出任何方法来规避它。为什么count 在定义变量后调用函数f 仍会出错?我怎样才能重写这段代码sn-p? 感谢您的帮助!

def f(x):
    if count < x:
        <some irrelevvant code>

for i in range(10):
    count = 1
    f(3)
    <some more irrelevant code>

抱歉,我认为我最初的问题有点不清楚。我提到的“不相关代码”实际上可能是相关的,因此我正在上传我的整个代码:

def ways(l, h):
    if count2 < h:
        for v in A:   #A is a globally defined list
            if u != v:
                if check(t, v):
                    count2 += 1
                    t = v
                    ways(l, h)
    else:
        count1 += 1

count1 = 0
for u in A:
    count2 = 1
    t = u
    ways(9, 3)

现在由于我递归调用函数ways,我不能将count2 定义为ways 中的函数参数。每次 u for 循环运行时,Count2 必须重置为 1,但每次调用 ways 时都不会。

【问题讨论】:

  • 您将count 明确传递给f
  • 在循环中,+ f(3, count)
  • 你可以在定义f(x)之前做count=1,它会起作用,但你不应该这样做,最好将count明确传递给f,因为Explicit is better than implicit.跨度>
  • @Darth Kotik:是的!使用 Python 之禅!

标签: python function variables reference variable-assignment


【解决方案1】:
def f(x,count):
    if count < x:
        <some irrelevant code>

for i in range(10):
    count = 1
    f(3,count)
    <some more irrelevant code>

在函数中使“计数”成为局部变量。如果您将 count 传递给函数 f,则无需将其设为全局,它应该可以正常工作。

【讨论】:

  • 我在问题中添加了更多细节。我认为这种方法不会起作用,因为该函数是递归调用的。
猜你喜欢
  • 2012-02-21
  • 2020-02-19
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多