【问题标题】:using method as function in python在python中使用方法作为函数
【发布时间】:2011-06-06 17:32:40
【问题描述】:

假设我有一个字符串列表,我想过滤掉所有非大写字符串。有没有比做 filter(lambda x: x.isupper(), list) 更简单的方法?

【问题讨论】:

  • @共产鸭:为什么样板不好?这没什么大不了的,但很烦人。
  • 您可以定义一个函数来执行此操作,但调用它仍需要一行代码。
  • @CromTheDestroyer:什么是“样板”?你能更具体地说明你反对什么吗?
  • @S.Lott:lambda 是。在我的脑海中,我将它与传入函数的情况进行了对比。Cosmologicon 的答案正是我想要的。
  • @CromTheDestroyer:lambdafilter 一样多的样板。只有在最微不足道的情况下才能被认为是“样板”。 lambda x: x.isupper() and x not in ('Z','z') 将证明 lambda 是基本语法。

标签: python function methods


【解决方案1】:

虽然我更喜欢列表理解,但这似乎是您正在寻找的:

filter(str.isupper, list)

【讨论】:

  • 如果函数已经按原样运行,为什么还要费心去理解呢?
  • 你是对的,这是对过滤器的完美使用。我几乎从不使用它。我只是喜欢理解。
  • 很明显,您在这里使用list 作为元语法变量,但如果您不是,我必须指出,以这种方式使用list 会掩盖内置的;)。
【解决方案2】:
uppers = [s for s in list if s.isupper()]

【讨论】:

  • 我认为使用s 作为变量名而不是i 会更容易阅读。
  • 对不起,我应该澄清一下,问题是关于将方法作为函数传递给函数,而不是解决这个小问题。
  • 好的,没问题。 (如果你重新阅读你的问题,你会发现这几乎是不可能理解的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2021-11-21
  • 2014-05-09
相关资源
最近更新 更多