py3.5 VS py2.7 语法上的一些差异

由于 bitcoin 项目的测试脚本都是用的python3.5, 之前只熟悉2.7, 记录一些2.7跟3.5的差异

print函数

3.5 版本的 print 必须加括号 print(), 2.7版本 可加可不加

#py2.7

print "shooter", 2017;  print("shooter", 2017)
#py3.5

print("shooter", 2017) 

除法运算

// / 计算结果不同

#py2.7

10/3  # 3
10//3 # 3
#py3.5

10/3  # 3.3333333333333335
10//3 # 3

Unicode

#py2.7

print('strings are now utf-8 \u03BCnico\u0394é!')
# strings are now utf-8 \u03BCnico\u0394é!
#py3.5

print('strings are now utf-8 \u03BCnico\u0394é!')
# strings are now utf-8 μnicoΔé!

xrange

py3.5 已经没有xrange, 而且range添加了一些新功能

#py2.7

range # <built-in function range>
xrange(1) # xrange(1)
#py3.5
range # <class 'range'>
xrange(1) # NameError: name 'xrange' is not defined

Exceptions 语法

#py2.7

raise IOError, "file error"

#####

try:
    let_us_cause_a_NameError
except NameError, err:
    print err, '--> our error message'
#py 3.5

raise IOError("file error")

#####

try:
    let_us_cause_a_NameError
except NameError as err:
    print(err, '--> our error message')

next

#py2.7

my_generator = (letter for letter in 'abcdefg')
next(my_generator)
my_generator.next()
#py3.5

my_generator = (letter for letter in 'abcdefg')
next(my_generator)
my_generator.next() # 报错

For 循环变量和全局命名空间泄漏

在 Python 3.x 中 for 循环变量不会再导致命名空间泄漏

#py2.7
 
i = 1
print 'before: i =', i

print 'comprehension: ', [i for i in range(5)]

print 'after: i =', i


#before: i = 1
#comprehension:  [0, 1, 2, 3, 4]
#after: i = 4
#py3.5
 
i = 1
print('before: i =', i)

print('comprehension:', [i for i in range(5)])

print('after: i =', i)

#before: i = 1
#comprehension: [0, 1, 2, 3, 4]
#after: i = 1

返回可迭代对象,而不是列表

#py2.7

print range(3) 
print type(range(3))

# [0, 1, 2]
# <type 'list'>
#py3.5

print(range(3))
print(type(range(3)))
print(list(range(3)))

# range(0, 3)
# <class 'range'>
# [0, 1, 2]

在 Python 3 中一些经常使用到的不再返回列表的函数和方法:

zip()
map()
filter()
dictionary's .keys() method
dictionary's .values() method
dictionary's .items() method

参考:

https://segmentfault.com/a/1190000000618286
廖雪峰Python教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容