python - 如何让 python 在运行 .py 文件时跳过某些代码块?
问题描述
我正在做超参数调整、特征选择、训练和拟合一些模型来评估哪个是最好的模型。所以可能有几百行代码。然而,我们可能知道,超参数调整部分通常需要数小时才能生成用于我们模型的最佳参数的输出。我的代码中还有其他部分需要 1 或 2 分钟来详细说明输出。
如果我要将此 .py 文件传递给某人,当该人单击“运行”时,我如何要求 python 跳过我的 .py 文件中的某些代码块(需要很长时间才能运行)?所以简而言之,这个人不需要运行需要数小时的调整部分和需要超过 3 分钟才能生成输出的其他部分,但他将能够预测我的模型并使用最佳超参数获得分数我之前调过的?
感谢是否有人可以提供任何关于我如何编码或提出更好方法的示例,因为我对编码仍然相对较新。
先感谢您!
解决方案
简单的答案
简单的方法,使用标志:
#!/usr/bin/python
RUN_TUNING = False
if RUN_TUNING:
# slow tuning code here
# rest of the code here
然后,根据您运行脚本的方式,您可以对标志进行硬编码,或将其绑定到用户输入:
RUN_TUNING = input('Run tuning? (y/N): ').lower() in ['y', 'yes']
或者可能是脚本参数(例如,使用argparse或许多可用替代方法之一)
更复杂代码的替代方案
如果您有复杂的代码,您可以将其组织在函数中以便更好地运行单独的部分,这里有一个更精细的选项,使用装饰器可以轻松地打开/关闭函数:
class SupervisedRun(object):
run = False
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
if self.run:
return self.func(*args, **kwargs)
@SupervisedRun
def tuning_function1():
print('I am only running when run=True')
def non_supervised_function1():
print('I am always running')
@SupervisedRun
def tuning_function2():
print('I am only running when run=True')
def non_supervised_function2():
print('I am always running')
if __name__ == '__main__':
SupervisedRun.run = input('Run tuning? (y/N): ').lower() in ['y', 'yes']
tuning_function1()
non_supervised_function1()
tuning_function2()
non_supervised_function2()
推荐阅读
- android - 当我在 post 方法上点击 api 时得到空对象响应
- azure - 如何查看 Azure 订阅的详细成本明细
- pattern-matching - 最大子图匹配
- reactjs - TypeScript 中的 React 组件类型
- php - 检查查询是否成功 laravel
- java - 尝试使用 ffmpeg 将音频与视频合并
- python - 访问 pandas 中的数据框行需要很长时间
- c# - MVC5 应用程序中的定时请求
- python - 如何获取列表中的每个不同检测对象?
- laravel - 当我让 composer install --optimize-autoloader --no-dev 时找不到类 'BeyondCode\DumpServer\DumpServerServiceProvider'