python 从2.x-3.x一些变化 - 小众知识

python 从2.x-3.x一些变化

2013年01月27日 14:18:05 苏内容
  标签: python
阅读:7328

1、urllib2是python自带的模块,在python3.x中被改为urllib.request,如

[python] view plaincopy在CODE上查看代码片派生到我的代码片
<span style="font-size:12px;">url = "http://music.baidu.com/album/all?order=time&style=pop" 
html = urllib.request.urlopen(url).read() 
</span> 
2、raw_input 和 input

在 Python 版本 2.x 中,raw_input() 会从标准输入(sys.stdin)读取一个输入并返回一个字符串,且尾部的换行符从末尾移除

[python] view plaincopy在CODE上查看代码片派生到我的代码片
<span style="font-size:12px;">>>>quest = raw_input("What is your quest? ") 
What is your quest? To seek the holy grail. 
</span> 

与之不同,Python 2.x 中的 input() 函数需要的是一个有效的 Python 表达式,比如 3+5

最初,曾有人建议将 input() 和 raw_input() 从 Python 内置的名称空间一并删除,因此就需要进行导入来获得输入能力。这从方法上就不对;因为,简单键入:
>>>quest = input("What is your quest?")

将会变为:

[python] view plaincopy在CODE上查看代码片派生到我的代码片
<span style="font-size:12px;">>>>import sys 
>>>print("What is your quest?") 
>>>quest = sys.stdin.readline() 
</span> 
对于一个简单输入而言,这太过繁琐,并且对于一个新手,这未免太难理解。往往需要向他们讲述模块 和导入 究竟是怎么回事、字符串输出以及句点操作符又是如何工作的(如此麻烦的话,与 Java™ 语言就没什么差别了)。所以,在 Python 3 内,将 raw_input() 重命名为 input(),这样一来,无须导入也能从标准输入获得数据了。如果您需要保留版本 2.x 的 input() 功能,可以使用 eval(input()),效果基本相同。

3、can't use a string pattern on a bytes-like object

  3.0现在的参数更改了,现在读取的是bytes-like的,但参数要求是chart-like的,故定义pattern的时候在前面加一个小b,表示要操作的对象是bytes类型就可以了,,如

[python] view plaincopy在CODE上查看代码片派生到我的代码片
url = "http://music.baidu.com/album/all?order=time&style=pop" 
html = urllib.request.urlopen(url).read() 
uri = re.findall(b'/song/d+',html,re.M) 

扩展阅读