菜鸟学Python第一天(安装,2.x与3.x区别)

Python2.x与3.x版本区别

Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。

为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。

许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。

为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。

新的Python程式建议使用Python 3.0版本的语法。

除非执行环境无法安装Python 3.0或者程式本身使用了不支援Python 3.0的第三方库。目前不支援Python 3.0的第三方库有Twisted, py2exe, PIL等。

大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。

Python 3.0的变化主要在以下几个方面:


print 函数

print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:

print "fish"print ("fish") #注意print后面有个空格print("fish") #print()不能带有任何其它参数

然而,Python 2.6实际已经支持新的print()语法:

from __future__ import print_functionprint("fish", "panda", sep=‘, ‘)

Unicode

Python 2 有 ASCII str() 类型,unicode() 是单独的,不是 byte 类型。

现在, 在 Python 3,我们最终有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。

由于 Python3.X 源码文件默认使用utf-8编码,这就使得以下代码是合法的:

>>> 中国 = ‘china‘ >>>print(中国) china

Python 2.x

>>> str = "我爱北京天安门">>> str‘\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8‘>>> str = u"我爱北京天安门">>> str
u‘\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8‘

Python 3.x

>>> str = "我爱北京天安门">>> str‘我爱北京天安门‘

除法运算

Python中的除法较其它语言显得非常高端,有套很复杂的规则。Python中的除法有两个运算符,/和//

首先来说/除法:

在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完全忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。

在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。

Python 2.x:

>>> 1 / 20>>> 1.0 / 2.00.5

Python 3.x:

>>> 1/20.5

而对于//除法,这种除法叫做floor除法,会对除法的结果自动进行一个floor操作,在python 2.x和python 3.x中是一致的。

python 2.x:

>>> -1 // 2-1

python 3.x:

>>> -1 // 2-1

注意的是并不是舍弃小数部分,而是执行floor操作,如果要截取小数部分,那么需要使用math模块的trunc函数

python 3.x:

>>> import math>>> math.trunc(1 / 2)0>>> math.trunc(-1 / 2)0

异常

在 Python 3 中处理异常也轻微的改变了,在 Python 3 中我们现在使用 as 作为关键词。

捕获异常的语法由 except exc, var 改为 except exc as var

使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支持这两种语法。

  • 1. 在2.x时代,所有类型的对象都是可以被直接抛出的,在3.x时代,只有继承自BaseException的对象才可以被抛出。
  • 2. 2.x raise语句使用逗号将抛出对象类型和参数分开,3.x取消了这种奇葩的写法,直接调用构造函数抛出对象即可。

在2.x时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在3.x中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。


xrange

在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。

这个表现十分像生成器(比如。"惰性求值")。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。

由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。

在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名异常)。

import timeit

n = 10000def test_range(n):
    return for i in range(n):
        passdef test_xrange(n):
    for i in xrange(n):
        pass

Python 2

print ‘Python‘, python_version()print ‘\ntiming range()‘ %timeit test_range(n)print ‘\n\ntiming xrange()‘ %timeit test_xrange(n)Python 2.7.6timing range()1000 loops, best of 3: 433 μs per loop

timing xrange()1000 loops, best of 3: 350 μs per loop

Python 3

print(‘Python‘, python_version())print(‘\ntiming range()‘)%timeit test_range(n)Python 3.4.1timing range()1000 loops, best of 3: 520 μs per loop
print(xrange(10))---------------------------------------------------------------------------NameError                                 Traceback (most recent call last)<ipython-input-5-5d8f9b79ea70> in <module>()----> 1 print(xrange(10))NameError: name ‘xrange‘ is not defined

八进制字面量表示

八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。

新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支持这两种语法。

在Python 3.x中,表示八进制字面量的方式只有一种,就是0o1000。

python 2.x

>>> 0o1000512>>> 01000512

python 3.x

>>> 01000
  File "<stdin>", line 1
    01000
        ^SyntaxError: invalid token>>> 0o1000512

不等运算符

Python 2.x中不等于有两种写法 != 和 <>

Python 3.x中去掉了<>, 只有!=一种写法,还好,我从来没有使用<>的习惯


去掉了repr表达式``

Python 2.x 中反引号``相当于repr函数的作用

Python 3.x 中去掉了``这种写法,只允许使用repr函数,这样做的目的是为了使代码看上去更清晰么?不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。

def sendMail(from_: str, to: str, title: str, body: str) -> bool:
    pass

多个模块被改名(根据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()函数。


5.数据类型

1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long

2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:

>>> b = b‘china‘ >>> type(b) <type ‘bytes‘>

str对象和bytes对象可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化。

>>> s = b.decode() >>> s 
‘china‘ >>> b1 = s.encode() >>> b1 
b‘china‘

3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。

时间: 2024-08-02 11:01:41

菜鸟学Python第一天(安装,2.x与3.x区别)的相关文章

菜鸟学Python第一天(安装,编程风格)

Python安装 获取Python 1.官网:www.python.org 2.任何一台Linux系统上(推荐,几乎所有的Linux用户已经在安装系统的时候默认安装了Python) 3.PythonXY(交互器比较全),portable python(绿色版本) a.对于Linux系统,很可能你已经在你的系统里安装了Python.否则,你可以通过你的发行版附带的包管理软件安装Python. b.对于Windows系统,安装Python就是下载安装程序然后双击它那么简单. 查看版本:python

菜鸟学Python第一天(简介)

Python简单介绍 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构.  Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言. Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序. Python 是面向对象语言: 这意味着Python支持面向对象的风

菜鸟学Python训练营第一期练习题

菜鸟学Python训练营第一期练习题 1.比如自然数10以下能被3或者5整除的有,3,5,6和9,那么这些数字的和为23. 求能被3或者5整除的1000以内数字的和 1 multiple_of_threes=[] 2 for multiple_of_three in range(0,1001,3): 3 multiple_of_threes.append(multiple_of_three) 4 sum_of_threes=sum(multiple_of_threes) 5 print(mult

菜鸟学python(11)list列表基本操作

想写点东西把自己学习python的过程记录下来,于是就有了菜鸟学python... list列表是在编写程序中经常用到,是用来处理一组有序项目的数据结构. 比如说range(1,5)其实就是个整数列表 所以 for x in range(1,5) 可以写成 for x in [1,2,3,4] 下面是一些列表的常见基本操作 首先创建一个空列表list list = [] 用append向这个列表里面添加一个值 list.append(1) #向list里面添加1 可以通过extend向list中

菜鸟学Python第十七天

菜鸟学python第十七天 1.logging 模块 logging模块即日志记录模块 用途:用来记录日志 为什么要记录日志: 为了日后复查,提取有用信息 如何记录文件 直接打开文件,往里写东西 直接写入文件的两个问题:(logging模块解决这两个问题) 你写的数据格式 别人看不懂 解析数据模块 logging的使用 logging模块的两种记录日志的方式 使用logging提供的模块级别函数 使用logging日志系统四大组件 <!--本质上logging模块级别函数日志记录就是对日志系统四

简学Python第一章__进入PY的世界

#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff; height: 55px width:100% -moz-border-radius: 3px; padding: 3px; margin: 10px 0px; font-family: "微软雅黑", "宋体", "黑体", Arial } P

&lt;-0基础学python.第一课-&gt;

初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人用python来实现了,而且还给出了原代码, 我兴致勃勃的下载下来用,但是根本没有效果,原因是他们给的是2.7版本的程序,我用的软件是3.4版本的, 我又下载了2.7版本的但是运行的时候还是有地方报错,而我又不知道怎么修改,然后觉得时候系统的学习一下了. 宏观目标:让我的工作效率更高 1.写程序帮我

菜鸟学python之类和对象

我们把一类相同的事物叫做类,其中相同事物相同的属性可以抽象出来,而一些相同的动作行为,也可以抽象成方法. 比如,汽车是一个类,它包括价格.品牌等属性.那么我们需要打印某一辆车的价格和品牌,只需要使用一句代码 print "the car's type 'ford',price:280000",但是当我们需要对一百个品种的车打印这句话的时候,怎么办呢? 这个问题我们通过以前学过的函数式编程就可以实现啦!我们只需要写一个类,然后将不同的车品牌和价格以参数的方式传到类里就好了.这样大大的提高

跟阿铭学linux &nbsp; 第一课 安装Centos

从事STM32的开发工作3年多,一直有一个梦想学习linux,但苦于没有人带路,中间学过几次,结果都中途中断了没有坚持下去,基于巧合再想学习时,看到阿铭有99元的体验课,就报了名,还收到了送的教程书,很开心,这次我一定要坚持下去,跟着阿铭好好学习linux.为了一直的梦想加油!! 约定 印象笔记             app.yinxiang.com 51CTO 博客        blog.51.com 密码保管             Keepass  Keepass.info 软件安装包