用上下文管理器重构if-else块python吗?

问题描述

我希望重构一些重复的代码块,如下所示:

if condition == True:
    print("Doing some light work.")
else:
    print("Doing some work.")

    pass # this may be different for different purposes.
    
    print("Doing some other work.")

其中所有打印语句代表一些在块重复中通用的任务。

有很多这样的代码块,而我正在尝试排除重复部分,即上述块中pass表示的语句以外的所有内容

换句话说,我正在寻找类似于pass语句周围并能够处理if-else语句的contextmanager。用Python可以做到这一点吗?

解决方法

也许您应该更广泛地看待代码,并通过应用OOP的基本原理来重新设计代码:

class BaseWorker:
    def do_work(self,condition):
        if condition:
            print("Doing some light work.")
        else:
            print("Doing some work.")
            self.specific_work()
            print("Doing some other work.")

    def specific_work(self):
        raise NotImplementedError


class WorkerA(BaseWorker):
    def specific_work(self):
        """worker A processing"""
        ...


class WorkerB(BaseWorker):
    def specific_work(self):
        """worker B processing"""
        ...
,

编写一个函数,该函数对于不同部分采用回调函数。

def do_stuff(condition,callback):
    if condition:
        print("Doing some light work")
    else:
        print("Doing some work")
        callback()
        print("Doing some other work")

您还可以将其重写为在定义回调函数之前使用的装饰器。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...