Python 知识点

Contents:

介绍

本书适用于 Python 2.7.6

本书试图列出 Python 的所有知识点,务求详尽。

关于知识点的概念

我认为,要学习一门语言,实际上就是理解,掌握它所包含的一个个知识点。一门语言究竟包含多少知识点呢?没有人知道。本书就试图列出 Python 的所有知识点。我希望,看完本书,我们可以说,Python 就这么多内容,我都掌握了!

Python 的知识点是非常丰富的。有很多知识点,对于开发,是非必要的。但正是这些非必要的知识点,使开发更高效,更爽。

相比之下,C++ 的知识点也非常多。常使人感觉 C++ 的内容太多了,永远也学不完。而且,我个人认为,学到最后,C++ 的那些高深的知识点并不能增加开发的效率,往往变成了一些无趣的概念。可能也正是因为这个原因,很多天才的程序员开始不喜欢 C++,转而爱上了 Python 。

Go 语言作为一门新兴的语言,它追求简练。几乎没有什么非必要的知识点。因为 Go 语言的知识点极少,它非常容易学。但不得不承认,Go 语言太简练了,许多高效开发必须的特性都没有,很难说它是一门高效开发语言。

Python Knowledge Point (Python 知识点)

Section Title

Subtitle

UnaryOp 单目操作符 (+4)

Python 的单目操作符有4个: ’~’, ‘not’, ‘+’, ‘-‘

BinOp 双目操作符 (+12)

Python 的双目操作符有12个: ‘+’, ‘-‘, ‘*’, ‘/’, ‘%’, ‘**’, ‘<<’, ‘>>’, ‘|’, ‘^’, ‘&’, ‘//’

BoolOp 布尔操作符 (+2)

Python 的布尔操作符有2个: ’and’, ‘or’

注意:Python的布尔操作符运行结果不是布尔类型。这一点与C++等其它语言不一样。

example

'he' and 'she' -> 'she'
'he' or 'she' -> 'he'
'he' and 2 and (5,6) -> (5,6)

函数调用

函数调用的形式 (KP_FunctionCall_01)

Python 的函数调用,最基本的形式

def func1(a,b):
    print 'a=', a
    print 'b=', b

func1(2,'hello')

输出

a= 2
b= hello

缺省值 (KP_FunctionCall_02)

调用参数支持缺省值

def func1(a,b='hello'):
    print 'a=', a
    print 'b=', b

func1(2)

输出

a= 2
b= hello

显然,缺省参数必须靠右。你不可以 def func1(a=2,b) 。

内置函数 (Built-in Functions) (+80)

内置函数列表

abs divmod input open staticmethod
all enumerate int ord str
any eval isinstance pow sum
basestring execfile issubclass print super
bin file iter property tuple
bool filter len range type
bytearray float list raw_input unichr
callable format locals reduce unicode
chr frozenset long reload vars
classmethod getattr map repr xrange
cmp globals max reversed zip
compile hasattr memoryview round __import__
complex hash min set apply
delattr help next setattr buffer
dict hex object slice coerce
dir id oct sorted intern

共 16*5=80 个,计 80 个知识点。

流程控制(Control Flow)

try 语句

try 语句可以后跟 except, except...else, finally, except...finally, except...else...finally

对于 try...except...finally 和 try...except...else...finally 相当于是

try:
        try:
                ...
        except:
                ...
        else:
                ...
finally:
        ...

这是一个知识点(PKP+1)

try ... except...(else...) 语句(PKP+1)

只有当没有任何异常发生时,才会走到 else 子句中

如果有异常发生,但except 没有捕获,会发生一个隐含的 raise ,所以

try:
        ...
except A:
        ...
except B:
        ...
else:
        ...

相当于是

try:
        ...
except A:
        ...
except B:
        ...
except:
        raise
else:
        ...

如果不知道是什么异常,用 Exception

try:
    kk
except Exception, e:
    print type(e), e

输出

<type 'exceptions.NameError'> global name 'kk' is not defined

可以 except NameError 也可以 except NameError, e 也可以 except NameError as e 当然也可以不带参数

一个 try 后可以跟多个 except 测试不同的条件。

每个 except 中还可以跟多个测试条件如 except (RuntimeError, TypeError, NameError):

try ... finally... 语句(PKP+1)

for 语句(PKP+1)

for...else... 语句(PKP+1)

注意,看到 for ... else 语句,初学者容易理解为,当 for 循环一次也不满足时,走 else ,这是不对的。 只有当 for 循环中遇到 break 时,才不走 else 。

附录:Go语言简析

os.Exit

http://golang.org/pkg/os/#Exit 我们可以看到

func Exit(code int)
Exit causes the current program to exit with the given status code. Conventionally, code zero indicates success, non-zero an error. The program terminates immediately; deferred functions are not run.

实际运行时,发现如果 code != 0,会输出信息:exit status n

现在,问题出来了 :

  • 如果我想 os.Exit(3) 但是不想看到那一句信息 “exit status 3”,有办法吗?
  • 如果我想体面地退出当前程序,把 deferred 函数都运行后再退出,有办法吗?

答案是 no 。 没有办法。

从这个简单的例子,就可以看出,Go 语言是一个不完备的语言。不建议把 Go 语言作为主开发语言。

慎之

模块(Modules)

内置模块

Python 有以下内置模块:
_struct sys

hello world

Indices and tables