【问题标题】:return 'pass' iteration through a method python通过方法python返回“通过”迭代
【发布时间】:2017-01-25 22:04:56
【问题描述】:

是否有任何 Pythonic 方法可以从这样的方法返回“通过”迭代:

import numpy as np

x = [1, 2, np.nan, 4]

for q in x:

    if np.isnan(q):
        pass
    else:
        print q
1
2
4

我正在尝试(在更复杂的代码中)实现以下目标:

import numpy as np
x = [1, 2, np.nan, 4]

def skip(var):
    if np.isnan(var):
        return pass
    else:
        return var

for q in x:
    var(q)
    print q

有什么方法可以让它工作吗?通过方法传递迭代?

【问题讨论】:

  • 只需 passreturn Nonereturn

标签: python python-2.7


【解决方案1】:

你不能返回一个pass,但你可以只做return,这将隐含return None你可以在调用代码中使用None来检查它是否被传递。

【讨论】:

  • 随便if q is not None:
  • 我不太确定你为什么想要这个,最好还是直接做for q in x: if not np.isnan(q): print(q)
【解决方案2】:

您只需将一个标志从方法 skip 传递到 for 循环。没有办法通过通行证。

正如其他人所指出的,return 隐式返回 None。

由于您没有改变变量,因此在 if 块中运行函数后嵌套循环部分是安全的。

def skip(var):
    if not np.isnan(var):
        return var

for q in x:
    if var(q):
        print q

【讨论】:

  • 在此实现中,如果您在方法中执行任何要保持更改的跳过,则需要设置一个等于 skip(var) 的变量,然后检查它是否为无/您使用的任何标志,在那个 for 循环的 if 语句中。
【解决方案3】:

为什么不直接使用filter

for q in filter(lambda z: not np.isnan(z), x):
    # put the rest of your code here
    print q

filter 相当 Python 和轻量级,确保您的循环块只需要担心积极的情况。

【讨论】:

    【解决方案4】:
    def skip(var):
        if np.isnan(var):
            return None
        else:
            return var
    
    for q in x:
        result = skip(q)
        if result != None:
             var(result)
        print q
    

    【讨论】:

      【解决方案5】:

      我知道对此有多个答案,但我发现 continue 正是我所寻找的:

      将 numpy 导入为 np

      x = [1, 2, np.nan, 4]
      
      def skip(var):
          return np.isnan(var)
      
      
      for q in x:
          if skip(q)
             continue
          print q
      

      【讨论】:

        猜你喜欢
        • 2011-03-19
        • 2021-05-09
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        • 2013-11-02
        • 2019-09-02
        • 1970-01-01
        相关资源
        最近更新 更多