[英]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)
结果是True
而print(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
,
示例中b
和a
的值是:
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 == 1
和a == 2
评估为True
,而例如a == 3
评估为False
。
但请注意, multiple_values
的类型定义需要扩展,以便不仅仅用于相等测试。
此外,您要求int
、 float
或string
具有多个值。 a
不是一个int
- 它只是在这个有限的例子中“表现”得像一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.