什么是Python的条件变量初始化的惯用方式?
什么是Python的条件变量初始化的惯用方式?
由于Python的作用域规则,一旦在作用域内初始化了变量,之后就可以使用这些变量。由于条件语句不会引入新的作用域,因此在其他语言中可能不需要像初始化变量一样的构造。例如,我们可以这样写:
def foo(optionalvar = None): # 一些处理,结果是... message = get_message() if optionalvar is not None: # 其他处理,结果是... message = get_other_message() # ... 函数的其余部分使用 message
或者,我们可以这样写:
def foo(optionalvar = None): if optionalvar is None: # 处理,结果是... message = get_message() else: # 其他处理,结果是... message = get_other_message() # ... 函数的其余部分使用 message
当然,get_message
和get_other_message
函数可能有很多行代码,基本上是无关紧要的(可以假设每个路径后程序的状态相同);这里的目标是使message
在函数的其他部分可以使用。
我在其他问题中多次见到过后一种写法的使用,例如:
哪种写法更可接受?
Python中有一个非常有用的if语法模式,您可以在此处使用
message = get_other_message() if optional_var else get_message()
或者如果您想严格与None进行比较
message = get_other_message() if optional_var is not None else get_message()
与您发布的示例1不同,这样不会不必要地调用get_message()。
这是THE Pythonic的条件赋值方式(自v2.5以来),至少就语言本身而言是这样。请查看PEP 308获取更多信息。
PEP 308还表示,第二种格式是以前可接受的方法。好好知道一下!
在Python中,进行条件变量初始化有两种常见的方法。第一种方法是在变量声明时立即调用一个函数来初始化变量,即使在某些情况下这个函数不被使用。第二种方法是根据条件来初始化变量,只有在满足特定条件时才调用相应的函数来进行初始化。
然而,第一种方法并不是一个好的实践,因为它会在不需要时浪费资源并且降低代码的可读性。特别是在涉及到昂贵的资源或函数调用的情况下,这种方法的效率更低。例如,在一个搜索函数中,如果根据搜索引擎的不同选择不同的搜索结果获取函数,第一种方法将不是一个好的选择。
解决这个问题的Pythonic方法是使用第二种方法,根据条件来初始化变量。在这种方法中,首先检查条件,如果满足条件,就调用相应的函数来初始化变量,否则使用默认的初始化函数。这种方法更加通用,更容易理解和维护。例如,在搜索函数中,可以通过检查搜索引擎的类型并相应地调用不同的获取结果函数来初始化结果变量。
下面是使用第二种方法实现搜索函数的示例代码:
def search(engine): if engine == 'bing': results = get_from_bing() else: results = get_from_google()
通过这种方法,可以根据需要灵活地选择不同的初始化函数,而不会浪费资源或降低代码的可读性。这是Python中处理条件变量初始化的一种更Pythonic的方式。