python学习之关键字

1、assert
语句形式:assert 布尔表达式[,msg]
解释:assert是检验一个表达式是否为真。若不为真,则触发一个错误。
例如:
assert  False
assert 1==2
assert 'test' == 'tast' and 3
触发错误如下:
Traceback (most recent call last):
File "C:\Users\rznh\Documents\test.py", line 3, in <module>
assert 'test' == 'tast' and 3
AssertionError
Tip:在用try···except捕捉错误时,例如:
def test(inputp):
try:
assert inputp == 5
print 'assert'
except AssertionError:
print 'error'
return 0
当inputp != 5时,assert会触发AssertionError错误,直接被except捕获,print这句不再执行。
但是在调试此程序时,总是无法执行print语句。突然发现assert inputp == 5中的5是int型,而raw_input输入为str型,顿时恍然大悟。将5改成‘5’或者将raw_input改为input,程序通过。

2、yield
先看斐波那契数列程序
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
# print b
a, b = b, a + b
n = n + 1
调用
>>> for n in fab(5):
... print n
...
1
1
2
3
5
简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
参考:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

3、try···except···finally
try:
  语句1
except [error_name1]:
  语句2
finally:
  语句3
try将会捕获语句1中的异常,不在语句1中的无法捕获。except对应某一错误[error_name],当某一错误被触发时,将会执行语句2。无论某一错误是否被触发,都会执行语句3.

4、exec
这个是个新鲜玩意儿。exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句。下面是一个简单的例子。
>>> exec 'print "Hello World"'
Hello World
也可以这样:
exec '''
def won():
print "It's a wonderful thing" won()'''
还可以这样:
code = open('ex241.py').read()
print type(code)
exec code
5、global和局部变量
局部变量:当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。这称为变量的作用域。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。 例 使用局部变量
#!/usr/bin/python
# Filename: func_local.py
def func(x): print 'x is', x
x = 2
print 'Changed local x to', x x = 50
func(x)
print 'x is still', x

输出
$ python func_local.py x is 50
Changed local x to 2
x is still 50
它如何工作
在函数中,我们第一次使用x的值的时候,Python使用函数声明的形参的值。
接下来,我们把值2赋给x。x是函数的局部变量。所以,当我们在函数内改变x的值的时候,在主块中定义的x不受影响。
在最后一个print语句中,我们证明了主块中的x的值确实没有受到影响。 使用global语句
如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。 例 使用global语句
#!/usr/bin/python
# Filename: func_global.py
def func(): global x
print 'x is', x x = 2
print 'Changed local x to', x x = 50
func()
print 'Value of x is', x
输出
$ python func_global.py

x is 50
Changed global x to 2
Value of x is 2
它如何工作
global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。你可以使用同一个global语句指定多个全局变量。例如global x, y, z。 6、is
Python中的对象包含三要素:id、type、value。其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。is判断的是a对象是否就是b对象,是通过id来判断的。==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。
如下代码或许可以帮助你理解。
>>> a = 1
>>> b = 1.0
>>> a is b
False
>>> a == b
True
>>> id(a)
12777000
>>> id(b)
14986000
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a == b
True
>>> id(a)
12777000
>>> id(b)
12777000
2、lambda
lambda语句被用来创建新的函数对象,并且在运行时返回它们。 例:
def make_repeater(n,m):
return lambda s,t: s*n+t*m twice = make_repeater(2,3) print twice('word','')
print twice(5,6)
输出:
wordword222
28
解释:
make_repeater定义了一个二元函数f(s,t;n,m),s、t为变量,n、m为未知常量。twice给定了常量n、m的值,变成了二元常函数g(s,t),其中不含未知常量。twice(5,6)是给定函数的自变量,得出特定的因变量。可以说,lambda构造了一个函数集。
上一篇:前端 动态表单提交(post、put)


下一篇:[转]DOS特殊字符转义方法