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内存管理分析
Apr 08 Python
Python下的twisted框架入门指引
Apr 15 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
redis之django-redis的简单缓存使用
Jun 07 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
python实现PID算法及测试的例子
Aug 08 Python
python getpass模块用法及实例详解
Oct 07 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
python 合并多个excel中同名的sheet
Jan 22 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 Python
总结Python使用过程中的bug
Jun 18 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
初学CAKEPHP 基础教程
2009/11/02 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
初探nodeJS
2017/01/24 NodeJs
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
什么是python的id函数
2020/06/11 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
Python创建自己的加密货币的示例
2021/03/01 Python
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
财政局长自荐信范文
2013/12/22 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
银行批评与自我批评
2014/02/10 职场文书
10的分与合教学反思
2014/04/30 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
表扬信范文
2015/05/04 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫