布尔变量驱动代码的Python代码可读性
我有一个config.py文件,它是一堆bool参数,比如布尔变量驱动代码的Python代码可读性,python,Python,我有一个config.py文件,它是一堆bool参数,比如 show_timer = True display_graph = True 我的主代码运行在一个while循环中,如果上述参数为False,则循环中的代码似乎非常混乱,无法执行。这种配置文件驱动代码的可读性最好的方法是什么?我目前使用的格式如下: init_someting() if display_graph else None while True: do_something() if show_
show_timer = True
display_graph = True
我的主代码运行在一个while循环中,如果上述参数为False,则循环中的代码似乎非常混乱,无法执行。这种配置文件驱动代码的可读性最好的方法是什么?我目前使用的格式如下:
init_someting() if display_graph else None
while True:
do_something() if show_timer else None
.
.
.
如果保留其他对象不是约束条件,则可以使用配置到函数映射的
dict
func_dict = {'show_timer': timer_func,
'display_graph': display_graph_func}
现在迭代func_dict以检查配置值。比如:-
for config_param, func_obj in func_dict.items():
if config[config_param]:
func_obj()
或简写:-
[func_obj() for config_param, func_obj in func_dict.items() if config[config_param]
但是,再次向函数传递参数将是一个问题。检查您是否能计算出它。如中所述,不要使用条件表达式;使用正常的if
语句。看起来你已经在函数中完成了所有的操作,所以我认为没有其他的事情要做了
if display_graph:
init_something()
while True:
if show_timer:
do_something()
if other_option:
do_other_thing()
仅用于教育目的(但在某些地方,这种模式很有用)
根据您正在执行的操作的详细信息,您还可以使用配置选项来构建要调用的函数列表,然后在该列表上重复循环。大概是这样的:
if display_graph:
init_something()
functions_to_call = []
if show_timer:
functions_to_call.append(do_something)
if other_option:
functions_to_call.append(do_other_thing)
while True:
for function in functions_to_call:
function()
或:
/仅用于教育目的使用条件表达式不是这里的方法,不可以。如果显示图形:init\u something()只需使用
。作为一名C#/Java程序员,我的目标是通过多态性消除所有类似的条件,如果您不喜欢If…:
的两行,您可以创建一个类似于do#u If(condition,function#u to_execute,*parameters)
的帮助函数,但这只适用于单个函数。就我个人而言,我只会使用常规的if
语句。虽然似乎Simple比complex
更好。坚持常规的if语句似乎是目前最简单的选择,但我喜欢函数到调用列表的想法,这将在将来有所帮助。你能告诉我为什么要避免使用单行条件表达式吗?我有点喜欢它,因为它是一行。@ovunctuzel,它用于返回值,而不是有条件地调用函数;您应该使用正常的if
语句来进行此操作。一行程序可能很酷,但这并不意味着你应该尽可能地在任何地方使用它们。线路很便宜:)。
if display_graph:
init_something()
all_functions = [
(show_timer, do_something),
(other_option, do_other_thing),
]
functions_to_call = [function for (flag, function) in all_functions if flag]
while True:
for function in functions_to_call:
function()