簡體   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