locals()获取本地变量 和 exec()执行字符串中的代码
#!/user/bin/env python3
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# @File : exec()执行字符串中的代码.py
# @Time : 2022-08-11 11:43
# @Author : mojin
# @Email : 397135766@qq.com
# @Software : PyCharm
#-------------------------------------------------------------------------------
#locals()获取本地变量 exec()执行字符串中的代码
x = 10
y = 20
z = 30
def sum():
sum = x + y + z
return (sum)
说明='示例定义变量“说明”,,在locals(),可查看到'
###locals()获取本地变量
#将locals()获取的值赋值给loc
loc = locals()#获取本地变量数据,数据为字典类型
'''
locals()返回一个字典类型,里面包含我们定义的变量和函数
{
'__name__': '__main__',
'__doc__': None,
'__package__': None,
'__loader__': < _frozen_importlib_external.SourceFileLoader object at 0x00000223556CFE88 > ,
'__spec__': None,
'__annotations__': {},
'__builtins__': < module 'builtins' (built - in ) > ,
'__file__': 'D:/Python/python3/ui2_app/pytest_allure_request_jsonpath_excle/te_001/exec()执行字符串中的代码.py',
'__cached__': None,
'x': 10, #定义的变量
'y': 20, #定义的变量
'z': 30, #定义的变量
'sum': < function sum at 0x0000022355BA9558 > , #定义的函数
'说明': '示例定义变量“说明”,,在locals(),可查看到', #定义的变量
'loc': { ...
}
}
'''
#取值方法:字典取值方法
print(loc['说明']) #示例定义变量“说明”,,在locals(),可查看到
print(loc['z']) # 30
sum_func=sum() #给sum()函数赋值给变量sum_func
print(loc['sum_func']) # 同理通过变量sum_func,获取sum()函数值,为60
###exec()执行字符串中的代码
# 我们要定义一个num 变量值34234
# 代码中的写法 num = 34234
num = 34234
print(loc['num'])
# 假如我们有个需求,代码是写死的封装好的,不能定义变量,但允许读取文本类容,那么我们如何通过文本定义变量?
# 使用exec()函数
read_text="num = 34234"#假如我们从文本中读出来的"num = 34234",赋值给了read_text
exec(read_text)# ==exec("num = 34234") 就等同于 代码中写了 num = 34234
print(loc['num'])
# 执行函数
read_text="sum()"#假如我们从文本中读出来的"sum()",赋值给了read_text
exec(read_text)# ==exec("sum()") 就等同于 代码中写了 sum(),在该脚本中找sum()函数执行函数,
#sum()
# exec(read_text)这样执行完成后,我们没有拿到他的值 所以我们给他赋值才能拿到他的值
sum_result=sum()#等同于exec("sum_result=sum()")
exec("sum_result=%s"%read_text) # 等同于exec("sum_result=sum()")
print(loc['sum_result'])