1、print 打印内容要用括号括起来。
例如:print(’ Hello Tvm-ERP ')
2、reload 重载模块前需要先执行 import importlib 。
例如:import hello2
import importlib
importlib.reload(hello2) #重载hello2模块
3、socket发送send字符串时必须 str.encode(encoding = "utf-8")或gbk ,接收recv时需要str.recv(1024).decode('utf-8')
encode该方法返回编码后的字符串,它是一个 bytes 对象
例如:服务端
import socket
def main():
s = socket.socket()
port = 51234
s.bind(('localhost', port))
s.listen(5)
while True:
c, addr=s.accept()
print('got connection ', addr)
c.send('XDQ,你非常棒!'.encode(encoding = "utf-8"))
c.close()
if __name__ == "__main__":
main()
客户端
#socketc1.py
import socket
def main():
s = socket.socket()
add = input('请输入服务端地址:')
s.connect((add, 51234))
print(s.recv(1024).decode('utf-8'))
if __name__ == '__main__':
main()
4、除法运算
Python中的除法较其它语言显得非常高端,有套很复杂的规则。Python中的除法有两个运算符,/和//
再也不用关注什么类型了,结果总为浮点型
>>>1/2
0.5
>>>-1//2
-1 #//是作为floor运算
5、uncode
Python3.X 源码文件默认使用utf-8编码,这就使得以下代码是合法的:
>>> 中='232323'
>>> 中
'232323'
6、
range() 是像 xrange() 那样实现,xrange() 函数不再存在
7、八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。
新增了一个bin()函数用于将一个整数转换成二进制字串
8、不等运算符
Python 2.x中不等于有两种写法 != 和 <>
Python 3.x中去掉了<>, 只有!=一种写法,还好,我从来没有使用<>的习惯
9、去掉了repr表达式``
Python 2.x 中反引号``相当于repr函数的作用
Python 3.x 中去掉了``这种写法,只允许使用repr函数,这样做的目的是为了使代码看上去更清晰么?不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。
10、多个模块被改名(根据PEP8)
旧的名字 | 新的名字 |
---|---|
_winreg | winreg |
ConfigParser | configparser |
copy_reg | copyreg |
Queue | queue |
SocketServer | socketserver |
repr | reprlib |
StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经支援新的io模组。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。
11、.数据类型
(1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long
(2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:
>>> b = b'china' >>> type(b)
str 对象和 bytes 对象可以使用 .encode() (str -> bytes) 或 .decode() (bytes -> str)方法相互转化。
>>> s = b.decode() >>> s 'china' >>> b1 = s.encode() >>> b1 b'china'
(3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。
12、打开文件
原:
file( ..... ) 或 open(.....)
改为只能用
open(.....)
从键盘录入一个字符串
原:
raw_input( "提示信息" )
改为:
input( "提示信息" )
在python2.x中raw_input()和input( ),两个函数都存在,其中区别为:
在python3.x中raw_input()和input( )进行了整合,去除了raw_input(),仅保留了input()函数,其接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型。
13、map、filter 和 reduce
这三个函数号称是函数式编程的代表。在 Python3.x 和 Python2.x 中也有了很大的差异。
首先我们先简单的在 Python2.x 的交互下输入 map 和 filter,看到它们两者的类型是 built-in function(内置函数):
>>> map>>> filter >>>
它们输出的结果类型都是列表:
>>> map(lambda x:x *2, [1,2,3]) [2, 4, 6] >>> filter(lambda x:x %2 ==0,range(10)) [0, 2, 4, 6, 8] >>>
但是在Python 3.x中它们却不是这个样子了:
>>> map>>> map(print,[1,2,3])
首先它们从函数变成了类,其次,它们的返回结果也从当初的列表成了一个可迭代的对象, 我们尝试用 next 函数来进行手工迭代:
>>> f =filter(lambda x:x %2 ==0, range(10)) >>> next(f) 0 >>> next(f) 2 >>> next(f) 4 >>> next(f) 6 >>>
对于比较高端的 reduce 函数,它在 Python 3.x 中已经不属于 built-in 了,被挪到 functools 模块当中。