任何人都可以解釋為什么/下面的代碼如何從0 到 100獲得數字
[代碼]
print(*range(*b'e'))
[結果]
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
uj5u.com熱心網友回復:
你可以“從里到外”看這樣的事情:
'e'將只是字串中的字母“e”。但是,當以bas inb'e'為前綴時,它定義了一個位元組序列,它只是一系列原始位元組,而不是像字串那樣編碼的字符。
您可以*在位元組序列上使用解包運算子來獲取單個位元組的整數值,例如[b'e']將評估為[101],因為字母“e”的 ascii 值為 101,所以b'e'實際上只是意味著“創建一個僅包含位元組的位元組序列十進制值 101"。
如果您將解壓縮的位元組序列傳遞給一個范圍,因為它只有一個值,您將獲得等效于range(101)from 的值range(*b'e')。
像范圍這樣的序列也可以解包,按順序從范圍中獲取各個值,這就是在外部發生的事情 - 范圍中的所有值都被解包并作為引數傳遞給print()函式。
所以這就是為什么要print(*range(*b'e'))列印從 0 到 100 的數字。當然,您只能像這樣撰寫它來教某人有關 Python 的知識。這是可怕的代碼。
uj5u.com熱心網友回復:
b'e'是一個包含字母“e”的二進制表示的單元素位元組陣列(8 位數字)。這恰好是數字 101 ( ord('e') --> 101)。
所以,range(*b'e')就像range(*[101])。* 將單元素陣列解包為 range 函式的單個引數,結果為range(101).
另一個 * 只是將 range(101) 的輸出解包為列印函式的 101 個引數。喜歡print(*range(101))或print(0,1,2,3,4,...,99,100)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/333183.html
