繁体   English   中英

将多个值分配给 python 中的单个 int 或 float 或 string 变量。 可能吗?

[英]Assigning multiple values to a single int or float or string variable in python. Is it possible?

最近我遇到了某人的代码:

b = {
  'b': "b" or []
}

当我执行print(b)时,我得到{'b': 'b'} 这让我质疑b什么时候会是[] 还是说b既是"b"又是[]

但如果是这样的话:

a = (1 or 2)
print(a == 1)
print(a == 2)

为什么print(a == 1)结果是Trueprint(a==2)结果是False

这引出了最后一个问题,int、float 或 string 类型的变量是否可以同时保存多个值? 即, a既是1又是2 ,前提是它不是列表或字典?

不,您不能将多个值分配给单个变量。

如果 x 为假,则表达式x or y返回y ,否则返回x

一个字符串只有在它为空时才计算为假。 你的字符串"b"不为空,所以它永远不会是假的。 因此,该表达式"b" or []无法等于[] ,它将始终为"b"

不,这是不可能的。

您所做的是分配给表达式(1 or 2) a值; or -ing 1 和 2 的结果。

a永远不会是 2。 (1 or 2)将始终计算为1 ,因为 python 从左到右计算这些逻辑表达式。

如果最左边的不是 False、空列表、None 等,那么它将将该值分配给a并停止读取。 如果第一个值“不好”,解释器只会查看第二个值。

int、float 或 string 类型的变量是否可以同时保存多个值?

也许在量子计算中,但在普通编程中肯定不是。

您误解了发布的语法的作用。 当您使用该表达式分配一个值时,它会按从左到右的顺序分配它遇到的第一个“真实”值。 在第一个真实值之后的任何剩余值候选者都将被丢弃/忽略。

就目前而言,您给出的示例非常多余-非空字符串是“真实的”,并且由于它是文字“b”,因此甚至从未考虑过空列表。 该代码基本上等同于:

b = {
  'b': "b"
}

对于您的代码片段, or ed 表达式在分配时进行评估:

由于x or y如果x计算结果为True则返回x ,否则返回y

示例中ba的值是:

b = {'b': 'b'}
a = 1

也就是说,打印 function 返回的内容。

关于最后一个问题: a不可能同时1 和 2,但是您可以创建一个新类型,使a同时等于1 和 2:

class multiple_values:
  def __init__(self, data):
    self.data = set(data)
  def __eq__(self, value):
    return value in self.data

a = multiple_values([1, 2])

给出了一个“有效”值列表来初始化a ,但a本身不是一个列表。

a == 1a == 2评估为True ,而例如a == 3评估为False

但请注意, multiple_values的类型定义需要扩展,以便不仅仅用于相等测试。

此外,您要求intfloatstring具有多个值。 a不是一个int - 它只是在这个有限的例子中“表现”得像一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM