zoukankan      html  css  js  c++  java
  • 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'xcexd2xc3xc7'

    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("我们
    你们
    ".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("我们 很好 ")

    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

    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/kknote/p/10915424.html
Copyright © 2011-2022 走看看