builtin-eval-example.py

# -*- coding: utf-8 -*-

# @File    : builtin-eval-example.py
# @Date    : 2018-09-20
# @Author  : Peng Shiyu

# eval 函数将一个字符串作为Python 表达式求值

print(eval("1+1"))  # 2
print(eval("__import__('os').getcwd()"))
# /example

# Python 在求值前会检查这个字典, 如果没有发现名称为builtins 的变量(复数形式), 它就会添加一个
namespace = {}
print(eval("__import__('os').getcwd()", namespace))
print(namespace.keys())  # ['__builtins__']

# 如果这个变量存在, Python 就不会去添加默认的
namespace = {"__builtins__": {}}
print(eval("__import__('os').getcwd()", namespace))
# NameError: name '__import__' is not defined