eval()
eval(expression, globals=None, locals=None)
- expresiion string
- globals optional,dict
- locals optional, a mapping object
-
需注意:
- 在mac或者Linux这类系统上运行
- import os
- 这时候要小心eval接收的expression修改或者删除本地文件,可以用globals和locals限制函数和参数的实用
-
同时不使用globals和locals
eval(expression)
>>> eval("1+2") 3
-
仅使用globals
eval(expression, globals)
-
globals为空字典
>>> from math import * >>> print(eval('dir()', {})) ['__builtins__'] # failed >>> print(eval('sqrt(25)', {})) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> NameError: name 'sqrt' is not defined # success >>> print(eval('__builtins__', {}))
这个时候只有
__builtins__
是可用的 -
globals为非空字典
>>> from math import * >>> print(eval('dir()', {'square_root': sqrt, 'power': pow})) ['__builtins__', 'power', 'square_root'] >>> print(eval('square_root(9)', names)) 3.0
在globals中指定除了
__builtins__
外可用的函数,也可以重命名函数,如'square_root': sqrt
将sqrt()重命名为square_root(),这时候如果输入print(eval('sqrt(9)', names))
则会报错,因为不存在这个名字的函数 -
同时使用globals和locals
>>> from math import * >>> a = 169 >>> print(eval('sqrt(a)', {'__builtins__': None}, {'a': a, 'sqrt': sqrt})) 13.0
globals= {'__builtins__': None}
表示__builtins__
不可用
在该例子中,仅a
参数和sqrt
函数可用
-
max()
max(arg1, arg2, *args[, key])
- 传入多个值,返回最大的一个
>>> max(2,6,8) 8
max(iterable, *[, key, default])
-
传入可迭代对象,key指定排序函数用的参数
# demo 1 >>> d = {"a": 3, "b": 2, "c": 1, "d": 1} >>> max(d.keys(), key=d.get) "a" # demo 2 >>> max([1,2,3,4]) 4
-
default定义了当可迭代对象为空时的返回值
>>> max([],default=2) 2
-
若可迭代对象为空,且没有定义default,则会抛出ValueError
>>> max([]) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: max() arg is an empty sequence
exac()
exec(object, globals, locals)
网友评论