gpt4 book ai didi

python - 在 python 函数中使用可选的跟踪变量

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:00 24 4
gpt4 key购买 nike

我有一个模块,我想在几个不同的应用程序中使用它。该模块非常简单,并且具有执行特定任务的功能:

# Fancy module

# Task1
def do_task1(param1):
step1()
step2()
step3()

第一个应用程序直接使用它。

对于第二个应用程序,我想传递一个跟踪器对象来跟踪处理状态。像这样的东西:

# Fancy module with tracker

# Task1
def do_task1(param1, tracker):
tracker.message = 'Starting step1'
step1()

tracker.message = 'Starting step2'
step2()

tracker.message = 'Starting step3'
step3()

tracker.message = 'Processing completed'

我不想拥有同一个模块库的两个版本(带和不带跟踪)。我能想到的一种方法是将跟踪器设为可选,然后在需要时使用 if 进行跟踪。

# Fancy module with conditional tracker

# Task1
def do_task1(param1, tracker=None):
if tracker:
tracker.message = 'Starting step1'
step1()

if tracker:
tracker.message = 'Starting step2'
step2()

if tracker:
tracker.message = 'Starting step3'
step3()

if tracker:
tracker.message = 'Processing completed'

我对这种方式不太满意,因为

  • 它增加了很多额外的条件和代码(影响可读性)
  • 必须有更好的方法!

有什么建议吗?

最佳答案

一个常见的解决方案是默认使用虚拟跟踪器:

class DummyTracker(object):
# your tracker API implemented here as noop


def do_task1(param1, tracker=None):
if tracker is None:
tracker = DummyTracker()
tracker.message = 'Starting step1'
step1()

tracker.message = 'Starting step2'
step2()

tracker.message = 'Starting step3'
step3()

tracker.message = 'Processing completed'

关于python - 在 python 函数中使用可选的跟踪变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45830661/

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