《A byte of Python》。发现Python3.0在某些地方还是有些改变的。准备慢慢的体会,与老版本的《A byte of Python》做对比,最后再去查阅官方网站的文档。 1. 如果你下载的是最新版的Python,就会发现所有书中的Hello World例子将不再正确。 Old: print "Hello World!" #打印字符串 New: print("Hello World!") 将字符串放到括号中print出来,这种写法对于我这种学习Java出身的人来说,很是亲切啊:) 2. Old: guess = int(raw_input('Enter an integer : ')) #读取键盘输入的方法 New: 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,分隔符的缩写) 一个很晕菜的例子: Old: target_dir = '/mnt/e/backup/' target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip' New: 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")