【发布时间】:2011-09-17 13:52:30
【问题描述】:
我注意到我的代码中有很多这样的语句:
var = "some_string"
var = some_func(var)
var = another_func(var)
print(var) # outputs "modified_string"
这真的让我很烦,它看起来很糟糕(与整个 Python 相反)。 如何避免使用它并以这样的方式开始使用它:
var = "some_string"
modify(var, some_func)
modify(var, another_func)
print(var) # outputs "modified_string"
【问题讨论】:
-
根据我的经验,最好避免这样的副作用。相反,返回值(如第一个示例中所示)。如果有多个值,它们可能会像元组一样被包装复合类型(然后由调用者分解)。或者,也许问题是“重复任务太多”?考虑:
print another_func(some_func("some_string")) -
x = func(x)看起来比modify(x, func)差多少?我 100% 清楚第一个示例应该做什么,而 0% 清楚第二个示例应该做什么。 -
@Chris Lutz,我不确定确定这是重复的。字面上的问题是“我如何通过引用传递一个变量”,但真正的问题是“我如何避免重复地为同一个变量名分配一个新值”。这实际上是一个有趣且有价值的问题。
-
@senderle - 我想像
x = chain_funcs(func1, func2, ..., x)这样的东西还可以。不过,这会使调用的顺序有点模棱两可。 -
我完全同意 pst - 一般来说,最好坚持只做一件事的功能,并且把它们做好。如果您希望经常重复相同的函数序列并且不希望有重复的代码,请考虑将常见的函数序列包装在它们自己的高级函数中,其唯一目的是调用这些低级函数。从长远来看,这种做法会对你有所帮助,我保证。