【问题标题】:Variable assignment in function doesn't return it after the function is called函数中的变量赋值在函数调用后不返回
【发布时间】:2017-03-24 08:31:58
【问题描述】:

我有一个函数 get_arcs():

for i in rng:
    if not lines[i].startswith('[') and 'echo $ORACLE_SID' in lines[i].strip():
            sid = lines[i + 2]
            yield sid
    if lines[i].strip().find('SELECT') == 0:
        res = lines[i:]
        for i in res:
            print >> f, i.strip()
            yield i.strip()

应该:

  1. 为变量 sid 分配一个特定的值
  2. 将不同的内容写入 f 文件
  3. i.strip() 的生成器作为输出,将其传递给另一个函数并计算某些对象的总和

问题在于 get_arcs() 何时被调用:

for line in get_arcs():
    if len(line.split()) == 13:
        lst.append(int(line.split()[-5]))
print sum(lst), 'Bytes'

它确实按预期返回 sum(lst),但我如何检索我的 sid 值,因为我无法在函数之外的任何地方调用它。

【问题讨论】:

    标签: python function variable-assignment


    【解决方案1】:

    那么,你需要这个函数来返回i.strip()sid 吗?当您尝试从单个函数返回两个值时,我总是觉得这是一种代码味道。但如果在这种情况下确实有必要,我会返回一个元组。

    yield i.strip(), sid
    

    稍后:

    for (line, sid) in get_arcs():
        # both line and sid are defined here
    

    【讨论】:

    • 是的,这很好用。非常感谢!附言是的,我确实需要 1 个函数来返回两个值,因为还建立了一个 paramiko ssh 连接。
    • 当然,每条规则都有例外。在这些情况下,总是值得仔细检查。 ;)
    猜你喜欢
    • 2013-11-27
    • 2013-05-27
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多