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基于select实现的socket服务器
Apr 13 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
python模拟事件触发机制详解
Jan 19 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
python程序变成软件的实操方法
Jun 24 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
Django分组聚合查询实例分享
Apr 29 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
python实现图片转字符画
Feb 19 Python
python批量更改目录名/文件名的方法
Apr 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
Laravel学习教程之View模块详解
2017/09/18 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
Node.js Express安装与使用教程
2018/05/11 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python使用多进程的实例详解
2018/09/19 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Django的models中on_delete参数详解
2019/07/16 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
土建工程师岗位职责
2014/06/10 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
python Tkinter的简单入门教程
2021/04/11 Python