[英]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.