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 相关文章推荐
基于Django模板中的数字自增(详解)
Sep 05 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
python机器学习理论与实战(二)决策树
Jan 19 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
Jun 23 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
Django 实现图片上传和下载功能
Dec 31 Python
python单例模式的应用场景实例讲解
Feb 24 Python
浅析Django接口版本控制
Jun 26 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
Search Engine Friendly的URL设计
2006/10/09 PHP
一个简单的域名注册情况查询程序
2006/10/09 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
Python实现list反转实例汇总
2014/11/11 Python
Python进阶篇之字典操作总结
2016/11/16 Python
Python 递归函数详解及实例
2016/12/27 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
python基础练习之几个简单的游戏
2017/11/10 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
Python3.5运算符操作实例详解
2019/04/25 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
九年级数学教学反思
2014/02/02 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
表彰大会新闻稿
2015/07/17 职场文书
Python集合set()使用的方法详解
2022/03/18 Python
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技