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 + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Python环境变量设置方法
Aug 28 Python
python 读取文件并替换字段的实例
Jul 12 Python
Python异常处理操作实例详解
Aug 28 Python
python的中异常处理机制
Aug 30 Python
Django-Rest-Framework 权限管理源码浅析(小结)
Nov 12 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
对python For 循环的三种遍历方式解析
Feb 01 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
浅谈Python协程
Jun 17 Python
Python手拉手教你爬取贝壳房源数据的实战教程
May 21 Python
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 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连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
影视动画专业个人的自我评价
2013/12/31 职场文书
大学生学习自我评价
2014/01/13 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
先进个人推荐材料
2014/12/29 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
多属性、多分类MySQL模式设计
2021/04/05 MySQL