Python 常用关键字

# 查看所有关键词
import keysword  
keyword.kwlist
'''
	# 逻辑与 或 非  and or not
	优先级:not and or
	 x and y  如果 x 为 False 、空、0,返 回 x,否则返回 y
	 x or y   如果 x 为 False、 空、0,返回  y,否则返回x
	 not  x   如果 x 为 False、 空、0,返回 True,否则返回False
	# 判断 与 循环
	if elif else 
	is in  
	for while break continue 
	# 函数
	def lambda 
	pass return yied 
	# 异常处理
	try except finally raise assert
	# 导入模块 包
	import from
	# 重命名
	as
	# 变量
	global nonlocal 
	# 类
	class
	# 删除
	del
	# 上下文管理
	with
'''

一、关键词raise

关键字raise是用来抛出异常的,一旦抛出异常后,后续的代码将无法运行。 这实际上的将不合法的输出直接拒之门外,避免黑客通过这种试探找出我们程序的运行机制,从而找出漏洞,获得非法权限。

基础使用

try:
	s = None
	if s is None:
	    print "s 是空对象"
	    raise NameError     #如果引发NameError异常,后面的代码将不能执行
	print len(s)  #这句不会执行,但是后面的except还是会走到
except TypeError:
    print "空对象没有长度"
 
s = None
if s is None:
   	raise NameError 
print 'is here?' #如果不使用try......except这种形式,那么直接抛出异常,不会执行到这里

触发异常

我们可以使用raise语句自己触发异常
raise语法格式如下:
raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

二、关键词yield

yield的功能类似于return,但是不同之处在于它返回的是生成器。

生成器

生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器)。
如果一个函数包含yield关键字,这个函数就会变为一个生成器。
生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。
由于生成器也是一个迭代器,那么它就应该支持next方法来获取下一个值。
# 通过`yield`来创建生成器
def n():
    for i in range(2):
        yield i

for i in n():
    print(i)
# 输出:0,1
def n():
    print('1')
    yield 2
    print('3')

h = n() # yield 制作出的生成器
print(h.send(None))
print(h.__next__()) # 1,2
print(h.__next__()) # 3 报错 
# 通过列表来创建生成器
[i for i in xrange(10)]
next()分开执行代码(python2用next(),python3用__next__());
h.next()调用后,n()开始执行,直到遇到yield 2,因此输出结果:
当我们再次调用h.next()时,会继续执行,直到找到下一个yield表达式,由于后面没有yield了,因此会拋出异常:

其实next()和send()在一定意义上作用是相似的,区别是send()可以传递yield表达式的值进去;
而next()不能传递特定的值,只能传递None进去。因此,.next() 和 .send(None) 作用可以理解为是一样的。

猜你喜欢

转载自blog.csdn.net/u011146423/article/details/83993460