python - 在python函数中使用inner function让逻辑清晰好不好?

标签 python refactoring

下面是函数 foo 的基本逻辑:

def foo(item_lst):
    val_in_foo_scope = 1        

    for item in item_lst:
        # some logic to deal with item
        # val_in_foo_scope used
        pass

    return 0

循环中的逻辑可以很复杂,为了让代码更清晰,我想把逻辑拆分成一个单独的函数。


有内部函数:

def foo(item_lst):
    val_in_foo_scope = 1 

    def some_logic(item):
        # val_in_foo_scope used
        pass

    for item in item_lst:
        some_logic(item)

    return 0

有外部函数:

def some_logic(item, val):
    # val used
    pass

def foo(item_lst):
    val_in_foo_scope = 1 

    for item in item_lst:
        some_logic(item, val_in_foo_scope)

    return 0

内函数版本

  1. val_in_foo_scope 可以直接使用 -- good
  2. 我们很容易知道some_logicfoo相关,实际上只用在foo函数中 -- good
  3. 每次函数 foo 被调用时,都会创建一个新的内部函数 -- 不太好

外函数版本

  1. val_in_foo_scope 不能直接使用 -- 不太好
  2. 我们无法直接看到 some_logicfoo 之间的相关性 -- 不太好
  3. some_logic 将创建一次 --
  4. 全局命名空间会有这么多函数 -- 不太好

那么,哪种方案更好,或者还有其他方案吗?

可以考虑以下因素或您想到的任何其他因素:

  1. 是否使用val_in_foo_scope
  2. 是否可以忽略每次创建内部函数的时间成本

最佳答案

使用lambda如果它是一个简单的函数。

如果它很复杂并且您不想使其“公开”,请使用内部函数。

如果您想将其标记为隐藏并使用实例成员,请使用“private”方法。

如果你想让它“公开”并使用实例的成员,请使用一个方法。

如果它使用类成员,则使用类方法。

如果通用函数足以被其他类/函数使用,最后使用全局函数。

关于python - 在python函数中使用inner function让逻辑清晰好不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48063382/

相关文章:

python - rosjava catkin_make 失败

python - 如何修复此迭代 python 代码并减少重复?

python - 使用 Cython 的 setup_requires?

python - 命令 '/bin/sh -c pip install -r requirements.txt' 返回非零代码 : 1

python - 满足特定条件的列表列表的所有组合

c# - 分解神对象的接口(interface)继承?

c# - 使用 Double 数据类型传输 Money 值

javascript - 这些javascript代码行是否相同?

java - 需要帮助重构这个方法

php - 我的模型看起来都一样