[英]Python and functional programming: is there an apply() function?
Scala具有apply()
函數。
我是Python的新手,我想知道如何編寫以下單行代碼:
(part_a, part_b) = (lambda x: re.search(r"(\w+)_(\d+)", x).groups())(input_string)
我會感覺更好:
(part_a, part_b) = input_string.apply(lambda x: re.search(r"(\w+)_(\d+)", x).groups())
從FF的角度來看,我錯了嗎? Python中有這樣的結構嗎?
編輯:我知道糟糕挑選的片段。
在編寫Haskell時編寫Haskell。 編寫Python時只需編寫Python:
part_a, part_b = re.search(r"(\w+)_(\d+)", input_string).groups()
如果您使用Python而不apply
,您可以隨時自己編寫...
def apply(fn, args=(), kwargs=None):
if kwargs is None:
kwargs = {}
return fn(*args, **kwargs)
只是因為你可以,並不意味着你應該......
Python沒有這樣的構造; 重點是什么? lambda x: ...
是一個函數,因此它應該像普通函數一樣使用,即像你的第一個片段一樣使用(lambda x: ...)(input_string)
。
但是,在你的情況下,我認為沒有理由你甚至不打擾lambda; 做就是了:
(part_a, part_b) = re.search(r"(\w+)_(\d+)", input_string).groups()
如果您擔心重用,可以編譯正則表達式:
rx = re.compile(r"(\w+)_(\d+)")
a, b = rx.search(input_string).groups()
Python曾經有一個應用函數( docs ),但它已經在python 3中被刪除了,因為它是不必要的,而且對於python的原則,應該只有一種方法來做特定的事情。
比方說,我們有一個名為“func”的函數,我們可以輕松調用func(* args)而不是apply(func,args)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.