漫谈Python(1)

接上一篇  

PS: 在本篇中 你会了解到:

1.Python3.5 在Linux平台上的安装步骤 

2.Python3.5 与Python2.7 的区别


不一会儿, 小李又来找志强了,"师兄, 那个啥.....我是应该安装Python2.7还是Python3.5呢? 我在官网上看的版本说明看的头大 "

志强听了,说道:"我应该学习哪个版本的Python。对于这个问题,对于初学者来说很常见. 我的回答是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用哪一个版本。教程的选取可以从书籍资料、教学视频、实例代码这三个方面来参考。学得差不多了,再来研究不同版本之间的差别.  大部分Python库都同时支持Python 2.7.x和3.x版本的,所以不论选择哪个版本都是可以的。但为了在使用Python时避开某些版本中一些常见的陷阱或需要移植某个Python项目时,依然有必要了解一下Python两个常见版本之间的主要区别不过既然你问了,我也不妨给你解答一下 : "

Python3.5 与Python2.7 的区别


PS: 这里会简单的叙述Python3.5 和Python2.7几个比较重要的区别 。Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。

from__future__import division

至于更多的细节,可以参看这里 

1.  print函数

Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。Python3.5语法要比之前更为严格。

在Python 2中使用额外的括号也是可以的, 但是在Python3中却是必须带括号的,否则会引起SyntaxError

# 可以尝试着在Python2/3 环境下输入一下语句,体验一下区别

print 'Hello, World!'

print('Hello, World!')


2. 整数除法

Python3 在除法上对Python2 进行了改进:

Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。

所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python2环境下可能导致的错误(或与之相反,在Python 2脚本中用from __future__ import division来使用Python3的除法)


print('Python', python_version())

##尝试采用不同的环境来检查结果

print('3 / 2 =',3/2)

print('3 // 2 =',3//2)

print('3 / 2.0 =',3/2.0)

print('3 // 2.0 =',3//2.0)

3. Unicode

Python 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。

print type(unicode('this is like a python3 str type')) 
print type(b'byte type does not exist')

print('strings are now utf-8 u03BCnicou0394é!')

print(' also has',type(bytearray(b'bytearrays')))


4. xrange

在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。

这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。

由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。

在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。

PS: 这里暂时不对xrange()和range展开,后期会有对Python2.7 下的xrange /range 的话题


5.异常

Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError)

PS: 这里也不做过多的介绍,后期会详细介绍。



6. 异常处理

在Python 2 中的异常处理一般是这种形式


print 'Python', python_version()

try:

      let_us_cause_a_NameError

except NameError, err:

      print  err,'--> our error message'


但是在Python3.5中是这样的:

print('Python', python_version())

try:

   let_us_cause_a_NameError

except  NameError as err:  #  as 作为别名

    print(err,'--> our error message')



2. next()函数和.next()方法


由于会经常用到next()(.next())函数),所以还要提到另一个语法改动(实现方面也做了改动):在Python

2.7.5中,函数形式和方法形式都可以使用,而在Python3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。

# 再举一个栗子:

my_generator=(letter for letter in'abcdefg') # 生成了一个list

#在python2.7 中调用

my_generator.next()

#在Python3.5中调用

next(my_generator)  # 输出的 'a'

my_generator.next()  # 抛出异常

#Python2.7 中调用

my_generator.next() # 输出的是'b'


For循环变量与全局命名空间泄漏

这个也应该是好消息: 在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了。

这是Python 3.x中做的一个改动,在“What's New In Python 3.0”中有如下描述:

“列表推导不再支持[... for var in item1, item2, ...]这样的语法,使用[... for var in

(item1, item2,

...)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。”


相关的资料:


awesome features of Python that you can't use because you refuse to upgrade to Python 3

关于你不想知道的所有Python3 unicode特性

Python 3 正在毁灭 Python

Python 3 能振兴 Python

Python 3 is fine

Should I use Python 2 or Python 3 for my development activity?

What's New In Python 3.0

Porting to Python 3

Porting Python 2 Code to Python 3

How keep Python 3 moving forward

听了志强的一番陈述. 小李似乎对Python3.5 更有兴趣了.  于是小李开始动手安装Python3.5了;

"嘿,等等",志强对小李说:"记得把安装手册发个我啊";


不一会儿, 小李便把安装手册发给我了志强。。。。




Linux环境下编译安装python3


由于一般的Linux系统下默认系统自带python2.*的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装python3和python2共存。

首先去python官网下载python3的源码包,网址:https://www.python.org/


下载Python 源代码


1 安装


./configure --prefix=/usr/python  #添加配置,指定安装目录


make -j40 # 编译python , j后面的数字和系统CPU核数有关,普通的设置为j4就好了


sudo make install  # 执行安装

如图所示:

执行安装


整个过程大约5-10分钟,安装成功之后,安装目录就在/usr/python

系统中原来的python在/usr/bin/python,通过ls -l可以看到,python是一个软链接,链接到本目录下的python2.6.

我们可以把这个删除,也可以新建一个python3的软链接,只不过执行时python要改成python3,或者python脚本头部声明要改为#!/usr/bin/python3

这里为了方便建议先重命名一下,然后建立个软链接就可以了,之前的程序头部也不用更改:

## 修改系统默认版本

$sudo mv /usr/bin/python /usr/bin/python.bak

$sudo ln -s /usr/python/bin/python3 /usr/bin/python

##修改本地用户版本

$sudo mv /usr/bin/python /usr/bin/python2.6 ##对系统默认版本python进行操作

这样就建立好了,以后直接执行python命令,就相当于调用python3,实际上python3也是个软链接,链接到python3.5.1,这个多次链接其实不影响,主要是为了版本升级更加方便,不用改版本号了

尝试着使用 python –V 命令:

(如果在sudo python –V 中显示python3.5 , 但是在python -V 显示为python2.7, 请选择重新启动服务器)


python –V

疑问或问题


3.1 如果还想使用python2.7 怎么办?

在原有的python 文件的第一行中添加python2.7 的路径:

#!/usr/bin/python.bak

或者是

#!/usr/bin/python2.7*

以上两句都是用于指定使用python 的版本.

3.2 接下来是另一个问题: pip2.7 与pip3 的问题:

注意:当安装好新版本的python后,会出现 pip2 和pip3 ; 这两个命令是有区别的,区别如下:

1- 安装的后的包位置不同

2- Pip2 /3 安装后都是仅适用于各自版本。




志强看过以后对小李说到: "嗯, 写的还可以。那明天开始动手练习Python的基本语法和数据结构吧"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容