本节介绍一些以前语法的高级使用,能够是咱们的程序看起来更为优雅和高效。python
若是遇到大量含有if和elif的分支判断中,按照传统的写法无疑会下降程序逻辑的可读性,此时可使用字典方式替换if else的使用。express
如下示例进行说明:安全
a = 10 b = 8 strs = input("输入你的操做:") if strs == '+': print(a+b) elif strs == '-': print(a-b) elif strs == '*': print(a*b) else: print(a/b)
输入你的操做:+ 18
能够转化为:app
a = 10 b = 8 strs = input("输入你的操做:") actions = {'+':a+b,'-':a-b,'*':a*b,'/':a/b} print(actions[strs])
输入你的操做:+ 18
生成器提供了一种执行“惰性”评估的方法,意味着只有在实际须要的时候才计算值,这比一次性计算一个很大的列表要更加有效。有效的生成器能够生成咱们所须要数量的值--而没有上限函数
(expression for item in iterable) (expression for item in iterable if condition)
for t in (x for x in range(10) if x%2==0): print(t)
0 2 4 6 8
def getNum(num=1): num = 1 while True: yield num num +=1
getNum()
<generator object getNum at 0x00000214B6597D58>
for t in getNum(): if t > 5: break print(t)
1 2 3 4 5
def getNum1(num=1): num = 1 while True: recived = yield num if recived is None: num += 1 else: num = recived + 10
result = [] cnum = getNum1(2) while len(result)<5: x = next(cnum) if x==4: x = cnum.send(7) result.append(x)
print(result)
[1, 2, 3, 17, 18]
动态代码执行便是让用户本身输入代码并让Python执行,此种方法即容许Python程序执行任意代码必然会带来很大的安全风险,故而须要谨慎使用。ui
另外经过动态执行,能够为程序增长和扩展动态功能。spa
计算指定表达式的值。也就是说它要执行的python代码只能是单个表达式(注意eval不支持任何形式的赋值操做),而不能是复杂的代码逻辑。其语法格式以下:设计
eval(source, globals=None, locals=None)
参数说明:code
返回值:对象
eval(input('请您输入要执行的脚本:'))
请您输入要执行的脚本:print([x for x in range(5)]) [0, 1, 2, 3, 4]
动态执行python代码。也就是说exec能够执行复杂的python代码,而不像eval函数那样只能计算一个表达式的值。
exec(source, globals=None, locals=None)
参数说明:
__builtins__
,则系统会将当前环境中的 __builtins__
复制到本身提供的 globals 中,而后才会进行计算;若是连 globals 这个参数都没有被提供,则使用 Python 的全局命名空间。返回值:
import math code = """ def area_of_sphere(r): print(4*math.pi*r**2) """ context = {} context['math']=math exec(code,context)
area_of_sphere = context['area_of_sphere'] area_of_sphere(5)
314.1592653589793
globals参数便可做为exec执行函数中须要获取参数或模块的来源(如:math),也能够做为外部想获取exec执行函数的字典(如:area_of_sphere)
compile() 函数将一个字符串编译为字节代码。其语法格式
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
参数说明:
code = """ import math def area_of_sphere(r): print(4*math.pi*r**2) """ c = compile(code,'','exec') c
<code object <module> at 0x00000214B6662C90, file "", line 2>
context = {} exec(c,context) context['area_of_sphere'](5)
314.1592653589793
exec(c) c1 = globals()['area_of_sphere'] c1(5)
314.1592653589793
更多文章,请关注: