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 相关文章推荐
python3.3使用tkinter开发猜数字游戏示例
Mar 14 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
Python兔子毒药问题实例分析
Mar 05 Python
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
Python使用functools实现注解同步方法
Feb 06 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
使用Eclipse如何开发python脚本
Apr 11 Python
python下载微信公众号相关文章
Feb 26 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
Python实现简单的2048小游戏
Mar 01 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
香妃
2021/03/03 冲泡冲煮
php&java(一)
2006/10/09 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
Python解析xml中dom元素的方法
2015/03/12 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
python IDLE添加行号显示教程
2020/04/25 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
亿企通软件测试面试题
2012/04/10 面试题
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
电子商务专业个人的自我评价
2013/12/19 职场文书
校园广播站开场白
2015/06/01 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫