2017-03-24 141 views
0

我有一个函数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() ction和特定对象的总和将被计算

的问题是当get_arcs()被调用:

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

它不会返回预期的总和(LST),但我怎么能检索我的sid值,因为我不能在函数外部任何地方调用它。

回答

1

所以,你需要这个函数返回两个i.strip()sid?当您尝试从单个函数返回两个值时,我总是发现它是一种代码异味。但如果在这种情况下确实需要,我会返回一个元组。

yield i.strip(), sid 

后来:

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

是的,这工作就好了。非常感谢!附:是的,我确实需要1个函数来返回两个值,因为有一个paramiko ssh连接也被建立。 – feedthemachine

+0

当然,每个规则都有一个例外。在这些情况下,总是值得双重检查。 ;) – Nathan