python3与python2不一样的地方

进入不同语言版本的Python交互环境
py -2
py -3

pip 命令的执行 :
py -2 -m pip install xxxx
py -3 -m pip install nose

执行python文件
py -2 a.py
py -3 a.py

py2:
print "hello"

py3:
print("hello")


如果不想py -2这样进入python2,可以
进入到python27的安装目录
把python.exe 修改为python2.exe
在环境变量里面加入这个Python27的路径

python3 a.py
pip3 install


python3:str类型---》相当于py2的unicode类型
str类型encode之后变为了bytes类型---》相当于python2的str类型

print(s.encode("gbk"))
b'\xce\xd2\xc3\xc7'

print(s.encode("gbk").decode("gbk"))
我们


文件操作

在python3中,默认编码环境为utf8,故不需要像py2那样在文件头指定编码,但是在open()函数多一个encoding参数,在python2是没有的

with open('d:\\gloryroad\\1.txt','r',encoding='utf8') as fp:
...  print(fp.read())
...
abbcddeeegiiiilmnnooooorrrstuvyz
中文

在python3中,write函数里面必须是str类型的

with open('d:\\gloryroad\\1.txt','w',encoding='utf8') as fp:
...  fp.write("我们\n你们\n".encode('utf8'))
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: write() argument must be str, not bytes

在python3中连接数据库的包是PyMySQL,python2是MySQLdb,连接方法都一样。


序列化

python3没有cpickle,只有pickle


多线程

thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 "_thread"。


队列

python3的queue模块是小写,py2是Queue,因此
import queue

q=queue.Queue(5)
q.put(2)
q.get()
2
q
<queue.Queue object at 0x00000000022AAE80>


使用中文格式化时间
from datetime import datetime
nt=datetime.now()
print(nt.strftime('%Y年%m月%d日 %H时%M分%S秒')) --->报错
法1:

import locale
locale.setlocale(locale.LC_CTYPE, 'chinese')
print(nt.strftime('%Y年%m月%d日'))
2015年08月10日
原理是:“在Windows里,time.strftime使用C运行时的多字节字符串函数strftime,这个函数必须先根据当前locale配置来编码格式化字符串(使用PyUnicode_EncodeLocale)。”如果不设置好locale的话,根据默认的"C" locale,底层的wcstombs函数会使用latin-1编码(单字节编码)来编码格式化字符串,然后导致题主提供的多字节编码的字符串在编码时出错。
法2:
print(nt.strftime('%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日'))
原理是:既然直接丢中文字符进去会出错,那么就绕过这个问题,丢(可能)永远不会出错的ascii字符进去充当占位符,格式化完毕后再将占位符换回中文字符。
法3:
print(time.strftime('%Y年%m月%d日'))
2019年05月23日

写文件时不一样:
with("filename.txt","w",encoding="utf-8") as fp:
fp.write("我们\n很好\n")

python3和python2的导入有点不一样,import xxx不适用,后续需要详读核心编程的模块导入


python2的python27/Lib下 的是ConfigParser
python3的python27/Lib下是configparser
所以引入的时候是不同的,需要注意
py2.7.11:
import ConfigParser
py3.7.3:
import configparser

python2.7.11
try:
pass
except Exception, e:
raise e
python3.7.3:
try:
pass
except Exception as e:
raise e

python2.7.11
d={'a':123}
if d.haskey(a):
pass
python3.7.3:
if 'a' in d.keys():
pass

posted @ 2022-04-05 19:07  我是一言  阅读(60)  评论(0编辑  收藏  举报