py2 與 py3 中map的區別

2021-09-11 18:44:43 字數 764 閱讀 2194

**如下:

s = [timestamp, token, nonce]

s.sort()

sha1 = hashlib.sha1()

# for i in s:

# sha1.update(i.encode('utf-8'))

map(sha1.update, s)

hashcode = sha1.hexdigest()

在py3環境下時算出來的雜湊值怎麼都不對,那問題處在**呢?

原來,1. 在py2中,map返回的是乙個列表

2.在py3中,map返回的是乙個生成器

什麼意思呢?簡單來說就是py3返回的生成器,他的值是在你呼叫的時候才計算生成,而py2中返回的是列表,返回的時候就把結果算好了。所以在py3中需要使用for的**段,而不用使用map。

下面是測試**

l1 = ["1", "2", "3"]

def a(x):

print(x)

return x+"1"

r = map(a, l1)

for i in r:

pass

# print(r)

exit()

當把for**段注釋時,程式無輸出。當執行上述**時,輸出如下:

123

process finished with exit code 0

即驗證了上述說法

py2與py3的區別

py2與py3的區別 1 py2 的預設編碼是ascii,py3的預設編碼是utf 8 2 py2print函式可以用引號引起來也可以括起來執行,py3必須括號括起來執行 3 py2互動使用函式raw input 得到了str,input 得到了int資料型別,py3使用input 得到str 4 ...

py2和py3之間的區別

1.編碼 py2採用的是ascll編碼 py3採用unicode編碼 2.print py2中print是乙個關鍵字 py3中print是乙個函式,含有括號 3.input py2中raw input 這個函式返回乙個字串,但不會對輸入的字串進行計算 比如將它轉化成int或者float input ...

py2和py3之間的不同

很瑣碎,而print語法的變化可能是最廣為人知的了,但是仍值得一提的是 python 2 的 print 宣告已經被print 函式取代了,這意味著我們必須包裝我們想列印在小括號中的物件。python 2 不具有額外的小括號問題。但對比一下,如果我們按照 python 2 的方式不使用小括號呼叫pr...