"self.default = default if default else type()"是什么意思?

tam*_*are 1 python

自从我开始工作(约6年)以来,我一直是一个.NET人.最近,我正在使用Django开发一个项目,这需要我并行学习Python.很多时候我碰到了看似简单的Python代码,但我无法理解.这是其中之一.

class TypedProperty(object):
    def __init__(self, name, type, default=None):
        self.name = "_" + name
        self.type = type
        self.default = default if default else type()
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下代码的最后一行是做什么的吗?

我希望这个问题不是太微不足道,因为我无法想出一个好的头衔.

Sve*_*ach 6

a if b else c是条件表达式,其值a如果b计算结果为True,以及c以其他方式.在给定的上下文中,这将检查是否default"trucy",在这种情况下它将被存储self.default.否则,将type创建并输入一个新实例self.default.

请注意,此实现有几个问题:

  1. type用作变量名称,遮蔽内置函数type().这被认为是不好的风格.

  2. 它使用if default实际if default is None应该使用的条件.该检查旨在测试参数default是否实际传递给构造函数.实际上,实现不会接受任何False值的默认值.

  • +1其他"虚假"值包括零,空字符串和空集合.所以通常最好使用`如果arg不是None:x = default`,除非你确切地知道要排除那些. (3认同)