做为一个前端开发的码农,却正在阅读最新版的《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")

【和我一起学Python吧】Python3.0与2.X版本的区别的更多相关文章

  1. 【转载】python3.0与2.x之间的区别

    python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好 ...

  2. python3.0与2.x之间的区别

    python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好 ...

  3. 【和我一起学python吧】python的一些推荐

    看到未名的几篇帖子 使我想起了和python的一些经历,于是写了一篇咚咚. 1 书籍: python的syntax足够简单,semantics也不复杂,不怎么会使人混乱,一般来说看自带的文档足够可以学 ...

  4. Python 3.9.0 首个迭代版本发布了

    Python 3.9.0 alpha 1 发布了,这是 3.8 之后的首个 3.9 系列版本. ! 官方没有介绍新特性,也没有添加新模块,但是以下模块有所改进: ast asyncio curses ...

  5. 【和我一起学python吧】初学Python,版本如何选择?

    早在四年多以前,在我进入英才网之前,去面试过一家海归创业的公司.他们需要的是有unix开发经验的技术人员,但是因为他们当时所处的阶段对很多成熟 技术人员不是很吸引,所以条件放宽为熟悉面向对象的程序开发 ...

  6. 和我一起学python,控制语句 (life is short ,we need python)

    控制语句 if/elif/else if语句和一般编程语言一样,条件为true 执行 如: if true : print 'true'         <----if.else下对齐,要使用相 ...

  7. 和我一起学python,基本概念 (life is short ,we need python)

    作者:tobecrazy  出处:http://www.cnblogs.com/tobecrazy 欢迎转载,转载请注明出处.thank you! 基本概念 : 常量: 常量名全部大写,如PI 变量: ...

  8. 【和我一起学python吧】python 中的函数

    一.函数的定义: Python中使用def关键字定义函数,函数包括函数名称和参数,不需要定义返回类型,Python能返回任何类型: #没有返回值的函数,其实返回的是None def run(name) ...

  9. 【和我一起学python吧】Python 启航

    话说万张高楼平地起,不会走之前先学会爬吧.尤其对于我等的小菜同学来说更是这样,不管怎么先code first吧,等我等小菜们翅膀硬了才test first吧. 1, 怎么运行python? 先到pyt ...

随机推荐

  1. dubbo与zookeeper安装手册

    原文 示例提供者安装 (+) (#) 安装: wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-provider ...

  2. QEvent大全,有中文解释

    简述 QEvent 类是所有事件类的基类,事件对象包含事件参数. Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件,将它们转化为 QEvents, ...

  3. .NET中操作SQLite

    C#操作SQLite Database C#下SQLite操作驱动dll下载:System.Data.SQLite C#使用SQLite步骤: (1)新建一个project (2)添加SQLite操作 ...

  4. android的jni

    一.底层实现: c文件:hardware/libhardware_legacy/power/power.c 以其中set_screen_state(int)函数为例 其Android.mk中添加:   ...

  5. java知识积累——单元测试和JUnit(二)

    首先来复习一下几个重要知识点,然后接着进行一些介绍.在上一篇文章中,我曾经贴过下面这张图片: 在Which method stubs would you like to create?这里,现在结合4 ...

  6. [POJ2377]Bad Cowtractors(最大生成树,Kruskal)

    题目链接:http://poj.org/problem?id=2377 于是就找了一道最大生成树的AC了一下,注意不连通的情况啊,WA了一次. /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリ ...

  7. poj 2528 Mayor's posters(线段树)

    题目:http://poj.org/problem?id=2528 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度.现在往墙上贴N张海报,每张海报的宽度是任意的, 但是必定是单位宽度的整数 ...

  8. 结构体key

    http://www.cnblogs.com/xpchild/p/3770823.html http://blog.sae.sina.com.cn/archives/3968 实例 http://bl ...

  9. Android ArrayAdapter 详解

    本文主要讲解ArrayAdapter的创建方法,我把ArrayAdapter分为三种:简单的.样式丰富的但内容简单的.内容丰富的. 默认的,ArrayAdapter期望接受的样式文件里只含有一个tex ...

  10. 纯css做的安卓开机动画

    随着css3的发展,越来越多的负责绚丽的效果可以由纯css来完成了.用css3实现的动画效果丝毫不必js实现的逊色,而且浏览器对css渲染的速度远比js快,大多数时候css的体积也不js小.其中css ...