本文只介绍Python2.7.5的关键字,陆续补充。
对于一个初学者,首先要弄清Python中每个关键字的用法。
首先你可以使用以下代码来获得当前版本的关键字:import keyword
print keyword.kwlist
输出关键字列表>>[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
点击快速可到达:
个人对关键字的解释如有错误,请指出
and、or、not
常用的与( && )、或( || )、非( ! )逻辑运算符,这个就不用说了,每个编程语言都有吧…
as、with
as相似于等号运算符,用于某些语句中对象的赋值。
with是一个控制流语句,一般和as配合使用,格式:with…as…。with可以用来简化try finally代码,看起来可以比try finally更清晰。
看下面的代码你可能会懂。
我们先创建一个拥有__enter__和__exit__方法的类。class test:
def __enter__(self):
print "enter"
raise EOFError
return self
def test1(self):
print "code..."
def test2(self):
print "test Error..."
raise EOFError
def __exit__(self,*args):
print "exit"
return True
然后我们用with调用它:with test() as a:
a.test1()
a.test2()
它等价于:self = test()
a = self.__enter__()
try:
a.test1()
a.test2()
finally:
self.__exit__()
我们可以用with来处理文件操作或者一些连接数据库的操作,免去忘记关闭的错误。with open("1.txt" ,"r") as f:
line = f.read()
print line
因为open内置函数已经包含了__enter__和__exit__方法。
assert
Python的断言语句,assert判断一个条件是否为真,如果不为真则引发一个AssertionError。
尝试运行以下代码:a = 1
b = 2
assert a == b
break、continue
用于循环语句for、while的终止循环和跳过循环。
class
类定义关键字。例:class main:
def
函数定义关键字。例:def main(*args):
del
删除对象关键字,可以删除变量、对象、函数。例:del var
if、elif、else
用于逻辑判断语句。else也用于异常处理。不多说。
try、except、else、finally
四个关键字都用于Python的异常处理。try、except和finally就不说了。主要说else在异常处理语句中的作用。try:
block
except [exception,[data...]]:
block
else:
block
当try块中的代码执行成功时,才会执行else块中的代码。
一个try…except中只能用一个else语句,但是可以存在多个except。
exec
用于执行Python代码,它不同于内建函数 eval(),eval执行的是表达式 ( eval(“6*3+4*6”) ),exec则执行代码 ( exec “import sys” )。
for、while
用于循环语句。for常与in关键字配合使用。不多说。
from、import、as
三个关键字用于加载模块。可以搭配使用,例:from time import time as t
global
这个关键字用于声明全局变量。在函数代码块中使用。
in
用于判断一个序列中是否存在某元素。常与for配合使用。例:a = range(10)
for i in a:
x = x + i
1 in a
is
用于判断对象的内存地址是否相同 (即判断是否为同一对象) 。可以配合not关键字使用。例:classone is not classtwo
lambda
用于创建匿名函数,是个很神奇的函数。由于Python的灵活性,你可以把一个很长的函数块写为一个匿名函数,让你免去缩进的痛苦,但是这个难度比较高- –
lambda返回的是一个函数地址,你可以把它赋给任何一个变量。
看一些例子:a = lambda x, y: x + y
print a(1,2)
print (lambda x:[0 for i in range(x)])(5)
l = [12, 7, 5, 19, 21]
print map(lambda x: x * 3, l)
可以看出,lambda能用于很多场合。
pass
创建一个空的占位符,表示Python什么也不做。
用于打印一个对象。在Python3.x中,print成为了内置函数。
raise
用于抛出一个异常。这个异常可以自定义。例:raise StopIteration(停止迭代)
return
传递返回值。常用于函数传递返回值。
yield
这也是一个很神奇的关键字。它可以使一个函数成为可迭代的容器!我们称这样的函数叫做生成器。
看一个网上的例子:如何生成斐波那契數列
斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到。用计算机程序输出斐波那契數列的前 N 个数是一个非常简单的问题,许多初学者都可以轻易写出如下函数:def fib(max):
n, a, b = 0, 0, 1
while n < max:
print b
a, b = b, a + b
n = n + 1
执行fid(50),你会发现它一次就把所有的数都输出了。如果你想一个一个的输出怎么办?那么咱们就让这个函数可以迭代!
只需把print关键字换成yield关键字即可。def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
你会试着运行print fib(50),你只会得到一个类似于的对象地址。因为直接调用生成器返回的是 iterable 对象,而不是迭代的值。那么怎么使用它呢?
我们可以用 generator(生成器)对象( fib(50) )的 next() 方法。a = fib(50)
print a.next()
print a.next()
print a.next()
print a.next()
这样你每调用一次a.next(),就会返回一个值。当函数执行结束时,generator自动抛出StopIteration异常,说明生成器已经迭代完毕了。
我们看一下生成器的运行机制。在你向生成器获取一个值的时候,生成器会执行代码,出现yield关键字的时候,生成器把yield的参数返回给你,然后生成器会暂停运行。 当你再次向生成器获取值的时候,它会从上次的状态开始运行,直到出现yield语句,把yield的参数返回给你,暂停运行…如此反复直至函数运行结束。
一般使用迭代的时候,都会用到for关键字。for i in fib(50):
print i
这样不用每次都调用生成器的next()方法,而且迭代结束,for循环会自动退出。
Python 2.7.5的关键字也就这么多了。不懂的可以继续百度。欢迎一起讨论!