首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"self.default = default if default else type()“是什么意思?

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

Stack Overflow用户
提问于 2011-04-30 02:20:44
回答 3查看 324关注 0票数 1

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

代码语言:javascript
复制
class TypedProperty(object):
    def __init__(self, name, type, default=None):
        self.name = "_" + name
        self.type = type
        self.default = default if default else type()

有人能给我解释一下代码的最后一行是做什么的吗?

我希望这个问题不是太琐碎,因为我很难为它想出一个好的标题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-30 02:24:14

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

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

  1. 它使用type作为变量名,隐藏了内置的type()。这被认为是不好的风格。
  2. 它使用条件if default,而实际上应该使用if default is None。该检查旨在测试参数default是否实际传递给了构造函数。实际上,该实现不会接受任何evaluates to False.
票数 6
EN

Stack Overflow用户

发布于 2011-04-30 02:28:44

在函数签名中可以看到default=None -这意味着如果没有传入第三个参数,default将等于None

最后一行很简单地检查default的计算结果是否为真,以确定是否传入了默认值。如果default为true,则self.default将被设置为true。否则,将self.default设置为传入的type的实例。

我之所以说天真,是因为default可能是0,也可能是False,或者(更有可能)它可能是一个对象,但该对象的计算结果不知何故为False。我更喜欢

代码语言:javascript
复制
self.default = default if default is not None else type()

或者,为了避免我觉得世界上最不清楚的条件表达式

代码语言:javascript
复制
if default is None:
    self.default = type()
else:
    self.default = default
票数 4
EN

Stack Overflow用户

发布于 2011-04-30 02:34:04

这就是Python的三元运算符(也就是conditional expression)的作用!值得一提的是,Python懒惰地计算布尔值,因此在本例中:

代码语言:javascript
复制
self.default = default if default else type()

等同于:

代码语言:javascript
复制
self.default = default or type()

如果default的计算结果为任何非False值,则将使用其值,否则将返回type()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5835784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档