Python3.0与2.X版本的区别实例分析
本文通过列举出一些常见的实例来分析Python3.0与2.X版本的区别,是作者经验的总结,对于Python程序设计人员来说有不错的参考价值。具体如下:
做为一个前端开发的码农,最近通过阅读最新版的《AbyteofPython》并与老版本的《AbyteofPython》做对比后,发现Python3.0在某些地方还是有些改变的。之后再查阅官方网站的文档,总结出一下区别:
1.如果你下载的是最新版的Python,就会发现所有书中的HelloWorld例子将不再正确。
Python2.X代码如下:
print"HelloWorld!"#打印字符串
Python3.0代码如下:
print("HelloWorld!")
将字符串放到括号中print出来,这种写法对于我这种学习Java出身的人来说,很是亲切啊~O(∩_∩)O~
2.
Python2.X代码如下:
guess=int(raw_input('Enteraninteger:'))#读取键盘输入的方法
Python3.0代码如下:
guess=int(input('Enteraninteger:'))
方法名变得更加容易记!
3.
加入了一个新的nonlocalstatement,非局部变量,它的范围介于global和local之间,主要用于函数嵌套,用法如下:
#!/usr/bin/python #Filename:func_nonlocal.py deffunc_outer(): x=2 print('xis',x) deffunc_inner(): nonlocalx x=5 func_inner() print('Changedlocalxto',x) func_outer()
4.
VarArgsparameters,不知道这个翻译成什么比较妥当?先看下面这个例子:
#!/usr/bin/python #Filename:total.py deftotal(initial=5,*numbers,**keywords): count=initial fornumberinnumbers: count+=number forkeyinkeywords: count+=keywords[key] returncount 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 defhowMany(klass): '''Printsthecurrentpopulation.''' print('Wehave{0:d}robots.'.format(Robot.population))
9.
可以将以个类用Metaclasses的方式声明为抽象类抽象方法
fromabcimport* classSchoolMember(metaclass=ABCMeta): '''Representsanyschoolmember.''' def__init__(self,name,age): self.name=name self.age=age print('(InitializedSchoolMember:{0})'.format(self.name)) @abstractmethod deftell(self): '''Tellmydetails.''' 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 fromcontextlibimportcontext @contextmanager defopened(filename,mode="r") f=open(filename,mode) try: yieldf finally: f.close() withopened("poem.txt")asf: forlineinf: print(line,end='')
12.python3.0中添加了loggingmodule,给我的感觉类似于Java中的log4j,直接看代码:
importos,platform,logging ifplatform.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("Startoftheprogram") logging.info("Doingsomething") logging.warning("Dyingnow")
希望本文所述能对大家理解Python3.0与Python2.X一些区别性的用法有所帮助。