gpt4 book ai didi

python - 我应该使用 str.something(...) 还是 '…' .something()?

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:46 28 4
gpt4 key购买 nike

我的问题基本上是标题,在这种情况下我使用 .lower() 作为函数,

所以:

>>> s = 'A'
>>> s.lower()
'a'
>>> str.lower(s)
'a'

哪个更好,更受欢迎? (我认为它应该是第一个,因为它更容易,但我仍然不知道。)

最佳答案

如果您只是直接调用它,那么使用绑定(bind)方法 s.lower() 绝对是首选。它表达了你的意思(object: do this!),它更短,对读者来说更明显,并且对于像 str 这样的内置类型它甚至更快(但与你自己创建的类型的速度大致相同).


不同之处在于,当您需要存储方法或将其作为回调传递等而不是立即调用时。在这种情况下,您想要做什么几乎总是显而易见的:

  • 如果您想要对您尚未见过的字符串或一大堆不同的字符串调用该方法,您想要存储/传递/无论是未绑定(bind)的方法,str。降低
  • 如果你想在你周围的字符串上调用该方法,特别是如果你想在同一个字符串上一遍又一遍地调用它,你想要存储/传递/任何绑定(bind)方法,s。降低

对于 str.lower 的情况,很容易想到未绑定(bind)方法的用途,例如:

lower_strings = map(str.lower, strings)

或者,无耻地窃取Dair's answer ,因为它比我的例子更好:

sorted_strings = sorted(strings, key=str.lower)

但是很难想象为什么您会想要一遍又一遍地调用绑定(bind)方法 s.lower

但是请考虑使用不同方法的这些其他情况:

  • 您正在构建一个 GUI,并且您希望每次单击按钮时在窗口对象上调用特定的 onclick 方法。显然,您总是希望在这个特定的窗口对象(拥有按钮的窗口对象)上调用该方法,因此您将使用绑定(bind)方法 self.onclick 作为按钮回调,而不是未绑定(bind)方法Window.onclick.
  • 您正在寻找唯一值,您是否保留了一组 values_seen,其中包含您目前看到的所有值。 values_seen.add 可能对存储或传递给其他函数很有用,但 set.add 对您没有任何好处。

还有第三种你没有提到的情况:

lambda x: x.lower()

这就像 str.lower 一样,您可以将它传递给 map 或保存它以备后用,而且更复杂、更慢。那么,您为什么要这样做?

假设您需要一个函数来调用 lower 任何“鸭子类型”为字符串的东西,而不仅仅是实际的字符串。例如,b'AbC'.lower() 是一件完全有效的事情。所以,如果你有一个字符串或字节的列表,但你不确定是哪个,并且你想将它们全部小写,你不能 map(str.lower, xs)map(bytes.lower, xs),但您可以map(lambda x: x.lower(), xs)

虽然对于那种特殊情况你可以——而且通常应该——只使用一个理解:

(x.lower() for x in xs)

关于python - 我应该使用 str.something(...) 还是 '…' .something()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51940695/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com