执行字符串表示的函数,并为该函数提供全局变量:
1 #! /usr/bin/env python3
2
3 namespace = {'name': 'zingp', 'data': [16, 19, 25]}
4
5 code = '''def sayHi():return "name %s ,age %d" %(name,data[1],) '''
6
7 func = compile(code, '<string>', "exec")
8 # print("func>>>:",func)
9 exec(func, namespace)
10 # print(namespace)
11 result = namespace['sayHi']()
12
13 print(result)
运行结果:name zingp ,age 19
上述代码解析:
1 {'sayHi': <function sayHi at 0x02036D20>, 'data': [16, 19, 25], 'name': 'zingp', '__builtins__': {python的所有内置函数...}}
而且namespace字典的中的key,value好比是一个个的全局变量:
1 name = 'zingp'
2 data = [16, 19, 25]
3 def sayHi():
4 return "name %s ,age %d" % (name,data[1],)
我了个擦,居然把字符串变成了函数并且还为该函数提供了全局变量,是不是很巧秒。这个功能其实就是python的web框架中模板语言部分至关重要的部分,因为在模板处理过程中,首先会读取html文件,然后分割html文件,再然后讲分割的文件组成一个字符串表示的函数,再再然后就是利用上述方法执行字符串表示的函数。