神秘的Python表达式

2024-10-05 13:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下初始化mbr2的表达式吗

class MyClass(object):
  def __init__(self, param1, param2=None):
    self.mbr1 = param1
    self.mbr2 = ({}, param2)[bool(param2)]

谢谢


Tags: selfnoneobjectinit表达式defmyclassclass
3条回答

逻辑根据param1真实性从元组中选择两个值中的一个。如果False元组索引为0,否则为1;布尔值很容易强制为整数

使用三元运算符可以更清楚地表示:

self.mbr2 = param2 if param2 else {}

或与or短路:

self.mbr2 = param2 or {}

这是一种(奇怪的)方法,可以做到以下几点:

self.mbr2 = param2 if param2 else {}

它更像Python

基本上,如果param2truthy(1)或falsy(0)(bool(param2)),它将在元组(({}, param2))上的两个元素之间进行选择

每当param1'truthy'self.mbr2 = param1。否则self.mbr2 = param1

注意:True == 1False == 0(和bool返回其中一个)

更像Python的方式是:

self.mbr2 = param2 if param2 else {}

相关问题 更多 >

    热门问题