【问题标题】:Function Return But No Value函数返回但没有值
【发布时间】:2012-01-07 09:37:47
【问题描述】:

我定义了一个包含 return 语句但没有返回值的函数。我的代码如下:

def seed(addy):

    # urllib2 stuff is here

    seed_result = re.search('<td>Results 1 - \d+ of (\d+)',seed_query)  # searches for '<td>Results 1 - x of y', captures 'y'
    seed_result = seed_result.group(1)  # this is 'y' from above

    # there's a call to a different function here which works properly    
    # other stuff going on here pertaining to addy but seed_result still has my string

    # now I want to return the seed_result string...
    return seed_result

# ... some code outside of the seed function, then I call seed...

seed(addy)
print "Result is %s" % seed_result

我已经尝试过在函数之外定义和不定义seed_result以“初始化”它,但这对结果没有影响,即我的打印语句最后产生“结果是” - 没有seed_result。我还在 return 语句中将 seed_result 包裹在括号中,尽管我相信我的做法是正确的。括号没有任何区别。

A 在 Python shell 中设置了一个非常基本但类似的函数,并像我在这里所做的那样调用它,但它确实有效。不知道我错过了什么。

感谢您的反馈和指导。

【问题讨论】:

  • 尝试执行打印语句来调用导致“结果为无”的函数。 挠头
  • 它在 Python shell 中工作的原因是 shell 会打印出任何计算表达式的结果。正如 Jon Skeet 所说,要在您的程序中获取它,您必须将它分配给某个变量。

标签: python function return


【解决方案1】:

您没有使用返回值(例如,将其分配给变量)。试试这个:

result = seed(addy)
print "Result is %s" % result

【讨论】:

    【解决方案2】:

    解决这个问题的两种方法:

    首先,properobviouseasy 方式实际上是使用returned 值:

    seedresult = seed(addy)
    

    或者您使用全局变量(糟糕的风格 - 不惜一切代价避免):

    seedresult = None
    
    def seed(addy):
        global seedresult
        ...
    

    【讨论】:

    • 全局变量advice是有害的;这比糟糕的风格更糟糕。您的第一个解决方案是正确的。
    • 确实,我已经在帖子中强调了这一点。
    • 我当然可以看到使用 global 的利弊,因此我将不得不进一步离线教育自己。非常感谢你们。
    • 使用global 恕我直言,当它位于模块内并用于访问真正共享的对象(例如缓存)时。缓存的全部意义在于跨实例共享它。
    • 但在这种情况下,它掩盖了问题,即返回并使用函数中的值。在这种情况下,使用全局方法没有任何优点。
    【解决方案3】:

    这是由于在您的函数执行期间将None 分配给seed_result 造成的。

    正如 Jon Skeet 所指出的,您没有对函数的返回值做任何事情。不过,您还应该解决以下问题。

    特别是,您没有对参数addy 执行任何操作,而是搜索全局变量seed_query。我想您所看到的行为是其结果。

    【讨论】:

    • Addy 实际上被用于为简洁起见从示例中截取的代码中。感谢您的反馈。
    • @BitBucket:如果您知道自己在做什么,请仅为简洁起见。
    • 我剪掉了与我的问题无关的代码,但它正在工作 - 这在我的原始帖子中有所说明。
    • @BitBucket:你剪到了让你的代码混乱的地步,更不用说如果你不知道变量是如何工作的(你问题的根源),你没有多少可信度影响您判断哪些代码相关和不相关的能力。
    • @Mercin:你是唯一一个似乎对我的帖子感到困惑的人——显然是因为你没有阅读(我发帖说使用了 addy)。我当然知道要剪断袖口以获得简明的帮助——这项努力是成功的。保重。
    猜你喜欢
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2014-02-27
    相关资源
    最近更新 更多