Python3.0与2.X版本的区别实例分析
admin
2023-07-31 02:08:32
0

本文通过列举出一些常见的实例来分析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一些区别性的用法有所帮助。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...