1. 程式人生 > >Python2和Python3中列表推導式的不同

Python2和Python3中列表推導式的不同

作用 循環 沒有 補充 小結 創建 列表推導 列表推導式 red

Python2和Python3中列表推導式的不同

python2

>>> x = 'my girl'
>>> lst = [x for x in 'hello']
>>> x
'o'

可以看到x的值被覆蓋了

來看python3

python3

>>> x = 'my girl'
>>> lst = [x for x in 'hello']
>>> x
'my girl'

x的值沒有被覆蓋,這是因為python3為列表推導式創建了局部作用域,這個局部作用域內定義的變量不會對全局作用域的變量造成幹擾



補充:
for 循環與列表推導式的情況不同,無論是python2還是python3都會覆蓋

python2

>>> i=10               
>>> for i in range(5): 
...     print(i)       
...                    
0                      
1                      
2                      
3                      
4                      
>>> i                  
4                      



python3

>>> i=10               
>>> for i in range(5): 
...     print(i)       
...                    
0                      
1                      
2                      
3                      
4                      
>>> i                  
4                      


小結

  • python2中列表推導式中定義的變量會覆蓋前面同名的變量
  • python3中不會,因為列表推導式中定義的變量只作用於列表推導式內部(局部作用域)
  • for循環中都會覆蓋之前的變量,不管是python2還是python3

Python2和Python3中列表推導式的不同