吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2404|回复: 19
收起左侧

[Python 转载] python2.x和python3.x的一些区别

  [复制链接]
lz270978971 发表于 2020-7-3 22:22
本帖最后由 lz270978971 于 2020-7-3 22:29 编辑

1 使用 future的模块

python3.x 引入了一些与python2.x不兼容的关键字和特性。2.x中可以通过future模块导入新的内容

2 print函数

2.x中print是个语句,3.x中print是个方法,也是说2.x中print 或者print() 、print () 都是可以的,

print "magedu.com"
print("magedu.com")
print ("magedu.com")

不过3.x中print一定要方法的形式调用

print("magedu.com")

3 整数除法

python2.x

>>> 1/2
0

python3.x

>>> 1/2
0.5
>>> 1/0

4 Unicode

python2.x:ASCII的str类型,有unicode() 转成unicode类型

Python 2.7.16 (default, Apr 17 2020, 18:29:03) 
[GCC 4.2.1 Compatible Apple LLVM 11.0.3 (clang-1103.0.29.20) (-macos10.15-objc- on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

python3.x:Unicode(utf-8)类型str,bytes,bytearrays

Python 3.7.3 (default, Mar  7 2020, 00:16:22) 
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>> 

5 xrange

python2.x xrange

python3.x range,使用xrange会有异常

6 异常

python2.x 支持两种格式

>>> try:
...     a = raw_input("输入一个数:")
...     if not a.isdigit():
...         raise ValueError("a 必须是数字")
... except ValueError as e:
...     print("引发异常:",e)
... 
输入一个数:a
('\xe5\xbc\x95\xe5\x8f\x91\xe5\xbc\x82\xe5\xb8\xb8\xef\xbc\x9a', ValueError('a \xe5\xbf\x85\xe9\xa1\xbb\xe6\x98\xaf\xe6\x95\xb0\xe5\xad\x97',))
>>> try:
...     a = raw_input("输入一个数:")
...     if not a.isdigit():
...         raise ValueError("a 必须是数字")
... except ValueError,e:
...     print("引发异常:",e)
... 
输入一个数:a
('\xe5\xbc\x95\xe5\x8f\x91\xe5\xbc\x82\xe5\xb8\xb8\xef\xbc\x9a', ValueError('a \xe5\xbf\x85\xe9\xa1\xbb\xe6\x98\xaf\xe6\x95\xb0\xe5\xad\x97',))

python3.x 只支持as e的这种

>>> try:
...     a = input("输入一个数:")
...     if not a.isdigit():
...         raise ValueError("a 必须是数字")
... except ValueError as e:
...     print("引发异常:",e)
... 
输入一个数:a
引发异常: a 必须是数字
>>> 

7 next方法

python2.x next() 或者.next()
--
python3.x next() __next__

8 input方法

python2.x raw_input()
python3.x input()

9 iter和list

python2.x 有些迭代对象直接转成list了:dict.key(),dict.values(), map, reduce,filter等等

>>> lst = map(lambda x:int(x), [x for x in "123456789"])
>>> type(lst)
<type 'list'>
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> dt = {x:x for x in range(10)}
>>> dt.values()
dict_values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> dt.keys()
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> dt.items()
dict_items([(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)])
>>> 

python3.x 默认返回的是可迭代对象:dict.key(),dict.values(), map, reduce,filter等等

>>> lst = map(lambda x:int(x), [x for x in "123456789"])
>>> type(lst)
<class 'map'>
>>> lst
<map object at 0x10457a128>
>>> 
>>> dt = {x:x for x in range(10)}
>>> dt.values()
dict_values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> dt.keys()
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> dt.items()
dict_items([(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)])
>>> 

10 字典

python2.x  字典插入无序

>>> dt = {}
>>> dt["a"] = "A"
>>> dt["b"] = "B"
>>> dt["c"] = "C"
>>> dt
{'a': 'A', 'c': 'C', 'b': 'B'}
>>> 

python3.5以后,字典插入有序

>>> dt = {}
>>> dt["a"] = "A"
>>> dt["b"] = "B"
>>> dt["c"] = "C"
>>> dt
{'a': 'A', 'b': 'B', 'c': 'C'}
>>> 

11 字符串格式化

python2.x  %

>>> a = "%d+%d=%d" %(1,2,3)
>>> a
'1+2=3'

python3.x  format 和f

>>> a = "{}+{}={}".format(1,2,3)
>>> a
'1+2=3'
>>> a = 1
>>> b = 2 
>>> c = 3
>>> d = f"{a}+{b}={c}"
>>> d
'1+2=3'

12 True和False

python2.x True 可以被赋值

>>> True + True
2
>>> True = 0
>>> True + True
0
>>> 
  • python3.x True是关键字
    
    >>> True+True
    2
    >>> True = 0
    File "<stdin>", line 1
    SyntaxError: can't assign to keyword
    >>> 

python2.x 里面 while 1 要比while True 速度快一些(来自你像从前一样的Python学习笔记-python天坑系列)
python2.py
[Python] 纯文本查看 复制代码
```
#! /usr/bin/python
# -*- coding: utf-8 -*-

import timeit


def while_one():
    i = 0
    while 1:
        i += 1
        if i == 10000000:
            break

def while_true():
    i = 0
    while True:
        i += 1
        if i == 10000000:
            break

if __name__ == "__main__":
    w1 = timeit.timeit(while_one, "from __main__ import while_one", number=3)
    wt = timeit.timeit(while_true, "from __main__ import while_true", number=3)
    print "while one: %s\nwhile_true: %s" % (w1, wt)
python python2.py
while one: 0.646219015121
while_true: 1.01446509361
```

欢迎小伙伴来补充

免费评分

参与人数 5吾爱币 +9 热心值 +4 收起 理由
Zeaf + 1 我很赞同!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xccxvb + 1 + 1 好久不见的技术贴
GleeChan + 1 + 1 感谢分享!
Alan丶Chen + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

6767 发表于 2020-7-3 23:32
Suvorov 发表于 2020-7-3 23:13
感觉是不是可以写一个脚本,将python2环境下的一些有用脚本转换成python3兼容的格式,二者也可以互相转化~
...

官方工具 2to3,搜一下就知道怎么用了;
写出兼容2,3两个版本的代码毫无意义,因为python2的时代已经结束,未来将都是python3的生态环境,企业开发除外

"Python 之父两年前就已宣布 Python 2.7 将于 2020 年 1 月 1 日终止支持,现在这一天已经到来。"
https://www.oschina.net/news/112492/python-2-7-eol
Ldfd 发表于 2020-7-3 23:33
Suvorov 发表于 2020-7-3 23:13
感觉是不是可以写一个脚本,将python2环境下的一些有用脚本转换成python3兼容的格式,二者也可以互相转化~
...

bug满天飞预定
还得手改
Abrahams 发表于 2020-7-3 23:03
Suvorov 发表于 2020-7-3 23:13
感觉是不是可以写一个脚本,将python2环境下的一些有用脚本转换成python3兼容的格式,二者也可以互相转化~
似乎是可行的,找天可以试一试
goblin0427 发表于 2020-7-4 00:13
学习了感谢分享
asdime 发表于 2020-7-4 01:05
感谢整理分享
Future2012 发表于 2020-7-4 02:12
感谢分享
woaipojiesoft 发表于 2020-7-4 07:00
新手只学Python 3,就不会搞混
peiyi 发表于 2020-7-4 07:01
只会3,没用过2的路过
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-29 17:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表