python - 条件变量初始化的pythonic方式是什么?

标签 python

由于 Python 的范围规则,一旦在范围内初始化的所有变量此后都可用。由于条件不引入新的范围,因此不一定需要其他语言的构造(例如在该条件之前初始化变量)。例如,我们可能有:

def foo(optionalvar = None):
    # some processing, resulting in...
    message = get_message()
    if optionalvar is not None:
        # some other processing, resulting in...
        message = get_other_message()
    # ... rest of function that uses message

或者,我们可以改为:

def foo(optionalvar = None):
    if optionalvar is None:
        # processing, resulting in...
        message = get_message()
    else:
        # other processing, resulting in...
        message = get_other_message()
    # ... rest of function that uses message

当然,get_messageget_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()。

关于python - 条件变量初始化的pythonic方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8404856/

相关文章:

python - 如何从nd数组python中删除空格

python - 有什么方法可以减小 python 2.7.6 数据包的大小(不需要的文件夹或不需要的文件夹或 python 包中不需要的文件夹))

仅包含单个字符串的 Python 模块

python - 获取 Django 中每个页面用户类型的值

python - 使用正则表达式检查密码的强度

python - Python 中的模糊智能数字解析

python - 如何根据日期创建单独的跟踪列?

python - 有条件地从数组中删除一个元素

Python SIGINT 不终止调用 shell

python - 在Python中从HDF5文件中删除子组