如何在两个Python文件间传递循环中的y变量执行表达式?
问题描述
我有两个同一目录下的Python文件:randomvar.py和test_Random.py,代码分别如下:
randomvar.py 原代码
import numpy as np from test_Random import call_random def evaluate_expressions(expressions, x): def evaluate_expression(expr, x): return eval(expr) # Evaluate each expression in the list results = [evaluate_expression(expr, x) for expr in expressions] return results f = ['x[0]**2*y+x[1]', 'x[0]-y*x[1]'] def func(x): return evaluate_expressions(f, x) x = np.array([1,2]) call_random(func, x)
test_Random.py 原代码
import numpy as np yy=np.array([3,4]) def call_random(ff, x): for i in range(2): y = yy[i] z = ff(x) print(z)
需求:每次在randomvar.py中调用call_random(func, x)时,让randomvar.py里的表达式使用test_Random.py循环生成的y=yy[i]值,需要做哪些修改?
修改方案
核心问题是y变量的作用域不互通,test_Random.py里的y无法被randomvar.py的eval直接访问,需要通过参数传递实现变量共享,具体修改如下:
1. 修改 test_Random.py
将循环生成的y作为参数传递给ff(即randomvar.py中的func):
import numpy as np yy=np.array([3,4]) def call_random(ff, x): for i in range(2): y = yy[i] z = ff(x, y) # 新增y参数传递 print(z)
2. 修改 randomvar.py
调整相关函数的参数列表,接收并传递y,同时在eval时明确提供变量上下文:
import numpy as np from test_Random import call_random def evaluate_expressions(expressions, x, y): def evaluate_expression(expr, x, y): # 通过eval的局部变量字典,让表达式能访问x和y return eval(expr, {"x": x, "y": y}) # 传递y给每个表达式的求值逻辑 results = [evaluate_expression(expr, x, y) for expr in expressions] return results f = ['x[0]**2*y+x[1]', 'x[0]-y*x[1]'] def func(x, y): # 新增y参数 return evaluate_expressions(f, x, y) x = np.array([1,2]) call_random(func, x)
修改说明
- 原代码中
eval只能访问当前函数作用域内的变量,test_Random.py的y不在该作用域,直接调用会触发NameError。 - 通过参数传递将
y传入randomvar.py的求值函数,再通过eval的第二个参数(局部变量字典)明确提供x和y,确保表达式能正确解析这两个变量。
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

