广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python笔记之3.x与2.x的使用区
  • 719
分享到

python笔记之3.x与2.x的使用区

笔记python 2023-01-31 07:01:48 719人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

python目前有两个分支:2.7.3和3.3.0,基本用法大同小异,但在个别细节上还是有出入的,具体看Python.org网站。 个人感觉的差异有: 1、py3默认就是unicode,终于在写程序时可以不用再考虑中文

python目前有两个分支:2.7.3和3.3.0,基本用法大同小异,但在个别细节上还是有出入的,具体看Python.org网站。
个人感觉的差异有:

1、py3默认就是unicode,终于在写程序时可以不用再考虑中文支持的问题。
py3中字符串不再分str和unicode两种类型,统统都是unicode类型。个人认为此点进步最大。
py2则是ascii,处理中文要考虑编码,罗哩罗嗦,麻烦的要命!

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'mbcs'
>>>

上面是py2.7的测试,py默认是“ascii”,win系统则是“mbcs”。
py3.3则默认是“utf-8”,win系统也是“mbcs”。

2、除法“/”在py3中返回浮点数。
算式3/4在py3中结果是0.75,在py2.7中是0,因为后者是看作整数除法,要得到结果必须将一个整数改为浮点类型:
3/4.0,3.0/4,3.0/4.0,任选一种都可以求出0.75。
整数除法在py3中写作3//4,注意是两道斜杠。

3、输入输出的变化
【3.1】为print解决输出的一致性问题,py3中将之改为函数调用格式:
print "hello"
无法通过,必须被修改为
print("hello")

【3.2】为解决raw_input输入的一致性问题,py3中将之废弃,统一使用input函数。
“py2中input处理数值输入,raw_input处理字符串输入”的经验没法使用了。

>>> my=input('?'); print(my,type(my))
?hello world
hello world <class 'str'>
>>>
>>> my=input('?'); print(my,type(my),len(my))
?123
123 <class 'str'> 3
>>>
>>> my=input('?'); print(my,type(my),len(my))
?1234567890098765432112345678900987654321
1234567890098765432112345678900987654321 <class 'str'> 40
>>>
>>> my=input('?'); print(my,type(my),len(my))
?12345.67890
12345.67890 <class 'str'> 11
>>>
>>> my=input('?'); print(my,type(my),len(my))
?The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog. <class 'str'> 44
>>>
>>> my=raw_input('?'); print(my,type(my),len(my))
Traceback (most recent call last):
    File "<pyshell#23>", line 1, in <module>
        my=raw_input('?'); print(my,type(my),len(my))
NameError: name 'raw_input' is not defined

>>>


看到没有,raw_input已经不用了,被input彻底取代,读入的内容都视作字符串,然后可以自行转换为需要的类型。

>>> my=input('?'); print(my,type(my),len(my))
?1000
1000 <class 'str'> 4
>>>
>>> my[1:3]
'00'
>>>
>>> my*4
'1000100010001000'
>>>
>>> int(my)*4
4000
>>>

另附:更详细的说明python 3.0到3.2的what's new主要内容

(引用自:Http://www.kissuki.com/blog/2011/11/15/whats-new-in-python-3/)

大家好,又到了科普时间,咳咳。

距离 Python 3 发布已经有一段时间了,主流发行版都已经带了 Python 3 的软件包,甚至 Arch 等发行版还将其设为了默认的 Python 版本。多数的库也已经带了 Python 3 的支持(也有 Twisted、Django 等例外),是不是偶尔也想着要不要将自己的程序升级一下呢?

昨天稍微有时间研究了一下 Python 3,就将我在文档中找到的有趣新特性分享给大家。

默认返回迭代器(Iterator)

print 成为一个函数、默认不用地板除(Floor Divide)之类的我就不说了,想必地球人都知道有这么回事。

值得一提的是,原来需要使用 xrange 、 iteritems 等等函数和方法才能返回的迭代器现在成为了默认,替代了原来返回列表的函数。就连 map 、 filter 、 zip 等函数都返回迭代器了。

大家都知道相对于返回完整的列表,迭代器省去了一次生成所有元素的开销,并且在循环 break 的时候,就停止迭代,防止了额外的开销,所以一般情况下迭代器要比列表快得多。

如果你仍然需要完整列表,可以通过 list(some_iter) 构造,不过这种问题往往使用列表解析(List comprehension)就能够解决。

字符串分为 str 和 bytes

在 Python 2 中,字符串分为 ASCII 码表示(‘some text’)和 Unicode 表示(u‘Unicode 字符串’),默认为 ASCII 码。

不过在 Python 3 中,默认就是万能的 Unicode 码了,所以字符串前面不用加字母 u 也可以写 Unicode 了,当然这不是重点,重点是不会有各种 ASCII 和 Unicode 转换和混用带来的错误了。

另外, Python 3 中增加了一种 bytes 对象(b‘\xb6\xfe\xbd\xf8\xd6\xc6\xca\xfd\xbe\xdd’),专门用来表示编码后的(二进制)数据,所以现在对字 符串的编码就是从 str 到 bytes 的转换,反之亦然,两者不能混用,这样编码与否一目了然,免除了很多错误。

源文件编码默认为 UTF–8

Python 3 在字符编码方面有很多改进,其中之一就是默认的源文件编码从 ASCII 变为 UTF–8 ,也就是说以前在文件头加上的各种花样的 coding=utf–8 不再需要了!

# coding: UTF-8   # vim:fileencoding=UTF-8   # -*- coding=UTF-8 -*-   # vim: set fileencoding=UTF-8 

标识符支持非 ASCII 字符

这个自行理解,易语言表示压力很大。


>>> 所有 = all
>>>
>>> class 男人:
...     @claSSMethod
...     def 包括(cls, Ta):
...         return isinstance(Ta, cls)
...
>>> def 一起玩(人们):
...     if 所有(男人.包括(Ta) for Ta in 人们):
...         print('他们是×××')
...     else:
...         print('他们是朋友')
...
>>> 小攻 = 男人()
>>> 小受 = 男人()
>>> 一起玩([小攻,小受])
他们是×××
>>>

新的字符串格式化语法

原来的 %s %d %你妹 语法已经不推荐,并且很快会被弃用,新的字符串格式化方法(2.6 版引入)为 str.fORMat 或者内置函数 format 。比如:


>>> 三青年 = {'小红':'普通青年','小明':'文艺青年','小亮':'二逼青年'}
>>> '{小红}说我想吃罐头,{小明}说更上一层楼,{小亮}说阿伊呀伊呦。'.format(**三青年)
'普通青年说我想吃罐头,文艺青年说更上一层楼,二逼青年说阿伊呀伊呦。'
>>>

字典解析和集合解析

有了列表解析,当然也少不了字典解析:


>>> {k: v + '青年' for k, v in [('小明', '文艺'), ('小红', '普通'), ('小亮', '二逼')]}
{'小明': '文艺青年', '小红': '普通青年', '小亮': '二逼青年'}
>>>

还有集合解析:


>>> {小吃 for 小吃 in ('豆浆', '油条', '包纸')}
{'油条', '包纸', '豆浆'}
>>>

有序字典与 configparser

默认 Python 字典是无序的,不过新引入的 collections.OrderedDict 类提供了一种有序字典实现,并且被 configparser 默认使用,现在使用 configparser 类就可以得到有序的 ini 格式配置文件了!

而 configparser 模块现在完全支持使用类字典的方法进行读写了!你妹, 我之前的工作 全白做了!

ABC

抽象基类(Abstract Base Classes),就是像 c++ 里面虚类一样的东西。作为其子类,只有将所有抽象方法都实现,才能实例化。

抽象基类是对 Duck Typing 的补充,由于引入了 @abstractmethod@abstractstaticmethod@abstractclassmethod@abstractproperty 四个修饰符,强制抽象方法必须实现,所以可以一定程度上避免错误,用起来感觉比 Duck Typing 安心一些。

结局

以上就是我把 Python 3.0 到 3.2 的 What’s new 看了一遍的成果,总体来说 Python 3 本身变得更加规范,更加灵活,如果你的程序不依赖于 Python 2 特有的库的话,来试试 Python 3 很不错!

结局?结局?结局就是小亮和小红幸福地生活在了一起,小明自己吃豆浆油条包纸。

(完)

--结束END--

本文标题: python笔记之3.x与2.x的使用区

本文链接: https://www.lsjlt.com/news/191843.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python笔记之3.x与2.x的使用区
    python目前有两个分支:2.7.3和3.3.0,基本用法大同小异,但在个别细节上还是有出入的,具体看python.org网站。 个人感觉的差异有: 1、py3默认就是unicode,终于在写程序时可以不用再考虑中文...
    99+
    2023-01-31
    笔记 python
  • python笔记之2.x上兼容3.x版本
    在前文《python笔记之3.x与2.x的使用区别》谈及了不同版本的区别问题。长远看软件新版本肯定会取代低版本的,除非你有成熟的老版本代码必须考虑兼容性问题,一般还是推荐新手学习新版本。 最近学习python,主要使用3.3版本,但看代码和...
    99+
    2023-01-31
    版本 笔记 python
  • Python笔记之a=[0]*x格式的含义及说明
    目录python a = [0]*x格式的含义python使用技巧与爬过的坑1 dict的使用2 numpy3 文件操作python a = [0]*x格式的含义 a为一个含有x个字...
    99+
    2022-11-11
  • HTTP/1.x 的 keep-alive与 HTTP/2 多路复用的区别是什么?
    本篇内容介绍了“HTTP/1.x 的 keep-alive与 HTTP/2 多路复用的区别是什么?”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2023-06-17
  • Spring Boot 2.x基础教程之使用@Scheduled实现定时任务的方法
    我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。 创建定时任务 在Spring ...
    99+
    2022-11-12
  • Python与Git结合使用: 如何写出高效的分布式学习笔记?
    在现代的学习和工作中,我们经常需要写笔记来记录所学的知识和经验。而随着互联网的发展和信息技术的普及,越来越多的人开始采用分布式笔记的方式来记录和分享自己的学习笔记。在这种情况下,Python和Git是两个非常重要的工具,它们可以帮助我们写...
    99+
    2023-07-01
    git 学习笔记 分布式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作