gpt4 book ai didi

Python C API - 如何为 eval 表达式赋值?

转载 作者:行者123 更新时间:2023-11-30 14:46:38 32 4
gpt4 key购买 nike

是否可以在不操作求值字符串的情况下为“eval 表达式”赋值?示例:用户编写表达式

"globalPythonArray[10]"

它将计算出 globalPythonArray 的第 10 项的当前值。但目标是,将第 10 项的值设置为新值,而不是获取旧值。一个肮脏的解决方法是定义一个临时变量“newValue”并将评估字符串扩展为

"globalPythonArray[10] = newValue"

并编译并评估修改后的字符串。是否有一些低级 Python C API 函数可供我使用,这样我就不必操作评估字符串?

最佳答案

我想说可能不会,因为访问和存储订阅是不同的操作码:

>>> dis.dis(compile('globalPythonArray[10]', 'a', 'exec'))
1 0 LOAD_NAME 0 (globalPythonArray)
2 LOAD_CONST 0 (10)
4 BINARY_SUBSCR
6 POP_TOP
8 LOAD_CONST 1 (None)
10 RETURN_VALUE
<小时/>
>>> dis.dis(compile('globalPythonArray[10] = myValue', 'a', 'exec'))
1 0 LOAD_NAME 0 (myValue)
2 LOAD_NAME 1 (globalPythonArray)
4 LOAD_CONST 0 (10)
6 STORE_SUBSCR
8 LOAD_CONST 1 (None)
10 RETURN_VALUE
<小时/>

此外,在此处插入有关用户输入和 eval() 的常见警告:

globalPythonArray[__import__('os').system('rm -rf /')]

关于Python C API - 如何为 eval 表达式赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52116906/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com