Python3.0与2.X版本的区别实例分析


Posted in Python onAugust 25, 2014

本文通过列举出一些常见的实例来分析Python3.0与2.X版本的区别,是作者经验的总结,对于Python程序设计人员来说有不错的参考价值。具体如下:

做为一个前端开发的码农,最近通过阅读最新版的《A byte of Python》并与老版本的《A byte of Python》做对比后,发现Python3.0在某些地方还是有些改变的。之后再查阅官方网站的文档,总结出一下区别:

1. 如果你下载的是最新版的Python,就会发现所有书中的Hello World例子将不再正确。
Python2.X代码如下:

print "Hello World!" #打印字符串

Python3.0代码如下:

print("Hello World!")

将字符串放到括号中print出来,这种写法对于我这种学习Java出身的人来说,很是亲切啊~O(∩_∩)O~

2.
Python2.X代码如下:

guess = int(raw_input('Enter an integer : ')) #读取键盘输入的方法

Python3.0代码如下:

guess = int(input('Enter an integer : '))

方法名变得更加容易记!

3.
加入了一个新的nonlocal statement,非局部变量,它的范围介于global和local之间,主要用于函数嵌套,用法如下:

#!/usr/bin/python 
# Filename: func_nonlocal.py 
def func_outer(): 
  x = 2 
  print('x is', x) 
  def func_inner(): 
    nonlocal x 
    x = 5 
  func_inner() 
  print('Changed local x to', x) 
func_outer()

4.
VarArgs parameters,不知道这个翻译成什么比较妥当?先看下面这个例子:

#!/usr/bin/python 
# Filename: total.py 
def total(initial=5, *numbers, **keywords): 
  count = initial 
  for number in numbers: 
    count += number 
  for key in keywords: 
    count += keywords[key] 
  return count 
print(total(10, 1, 2, 3, vegetables=50, fruits=100))

当在参数前面使用*标识的时候,所有的位置参数(1,2,3)作为一个list传递。
当在参数前面使用**标识的时候,所有的关键参数(vegetables=50, fruits=100)作为一个dictionary传递。

5.
关于Packages的话题,个人理解有限。感兴趣的读者可以查阅相关文档。

6.
在数据结构中,多了一种类型:set
Set是一种无序的简单对象的集合,当我们关心一个对象是否在一个集合中存在,而顺序和出现的次数是次要的时候,可以使用set。

7.
关于os.sep方法,(set是separator,分隔符的缩写)
来看看作者的一个很晕菜的例子:
Python2.X代码如下:

target_dir = '/mnt/e/backup/' 
target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'

Python3.0代码如下:

target_dir = 'E:\\Backup' 
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'

os.sep的功能是自动辨别操作系统,给出不同的分隔符,Windows上是\\,Linux上是/,原理是明白了,功能也很不错,但是作者的例子。只有一处使用了os.sep,其他的地方还是老的写法啊(E:\\)

8.
可以使用@修饰符声明一个类方法: 

@classmethod 
  def howMany(klass): 
    '''Prints the current population.''' 
    print('We have {0:d} robots.'.format(Robot.population))

9.
可以将以个类用Metaclasses的方式声明为抽象类抽象方法

from abc import * 

class SchoolMember(metaclass=ABCMeta): 
  '''Represents any school member.''' 
  def __init__(self, name, age): 
    self.name = name 
    self.age = age 
    print('(Initialized SchoolMember: {0})'.format(self.name)) 

  @abstractmethod 
  def tell(self): 
    '''Tell my details.''' 
print('Name:"{0}" Age:"{1}"'.format(self.name, self.age), end=" ") 
    #pass

10.
文件读写的模式又增加了两种:文本本件('t')二进制文件('b')。

11.将打开文件的操作放到使用with语句修饰的方法中,书上说好处是让我们更专注于文件操作,让代码看起来不凌乱,本文还不能完全体会with的好处。现给出示例代码供大家参考:

#!/usr/bin/python 
# Filename: using_with.py 
from contextlib import context 
@contextmanager 
def opened(filename, mode="r") 
  f = open(filename, mode) 
  try: 
    yield f 
  finally: 
    f.close() 

with opened("poem.txt") as f: 
  for line in f: 
    print(line, end='')

12.python3.0中添加了logging module,给我的感觉类似于Java中的log4j,直接看代码:

import os, platform, logging 
if platform.platform().startswith('Windows'): 
logging_file = os.path.join(os.getenv('HOMEDRIVE'), 
os.getenv('HOMEPATH'), 'test.log') 
else: 
  logging_file = os.path.join(os.getenv('HOME'), 'test.log') 
logging.basicConfig( 
  level=logging.DEBUG, 
  format='%(asctime)s : %(levelname)s : %(message)s', 
  filename = logging_file, 
  filemode = 'w', 
) 
logging.debug("Start of the program") 
logging.info("Doing something") 
logging.warning("Dying now")

希望本文所述能对大家理解Python3.0与Python2.X一些区别性的用法有所帮助。

Python 相关文章推荐
Python的subprocess模块总结
Nov 07 Python
Python简单定义与使用二叉树示例
May 11 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
使用python进行拆分大文件的方法
Dec 10 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
scrapy结合selenium解析动态页面的实现
Sep 28 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
python 爬取吉首大学网站成绩单
Jun 02 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 #Python
python3编写C/S网络程序实例教程
Aug 25 #Python
python实现从字符串中找出字符1的位置以及个数的方法
Aug 25 #Python
Python实现根据指定端口探测服务器/模块部署的方法
Aug 25 #Python
python的类变量和成员变量用法实例教程
Aug 25 #Python
Python写的创建文件夹自定义函数mkdir()
Aug 25 #Python
Python中的startswith和endswith函数使用实例
Aug 25 #Python
You might like
PHP中动态HTML的输出技术
2006/10/09 PHP
php xml文件操作代码(一)
2009/03/20 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
vscode调试django项目的方法
2020/08/06 Python
Python实现播放和录制声音的功能
2020/08/12 Python
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
给男朋友的道歉信
2014/01/12 职场文书
房屋租房协议书范本
2014/12/04 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
超强台风观后感
2015/06/09 职场文书
龙猫观后感
2015/06/09 职场文书
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript