如何在Python的exec语句中传递变量

0 投票
2 回答
518 浏览
提问于 2025-04-16 01:23

我有两个 Python 文件,分别是 1.py 和 2.py。

**1.py is as** 
class A:
       def __init__(self):
              x = 5
              y = 7
              NUMBERS = self
              fp = open(filePath)
              temp = fp.read()
              exec(temp)
              fp.close()
              ADD_METHOD()

**2.py is as**
    def ADD_METHOD():
          print NUMBERS.x + NUMBERS.y

我的问题是,为什么 2.py 文件里能使用 NUMBERS 这个变量。这个例子是为了更好地说明问题,我知道可以通过导入模块来解决,但我需要用 exec() 方法来实现,那我该怎么在 2.py 文件中获取 NUMBERS 呢?是需要把它作为参数传给 exec,还是有其他的方法?

任何帮助都非常感谢!

2 个回答

0

我不太确定你具体需要什么,但我有一个解决你简单例子的办法,符合你的要求。

# 1.py
...
os.execl( "2.py", str( NUMBERS.x ), str( NUMBERS.y ) )

# 2.py
from collections import namedtuple
A = namedtuple( "A", "x y" )
NUMBERS = A( x=sys.argv[1], y=sys.argv[2] )
...
2

如果这两个文件都是你自己写的Python文件,为什么不在2.py里创建一个函数,然后在1.py中导入并调用呢?这样做会更简单、更干净。而且这样可以避免创建一个新的进程。你可以写成这样:

# **1.py is as**
from 2 import ADD_METHOD
class A:
       def __init__(self):
              x = 5
              y = 7
              ADD_METHOD(x, y)

# **2.py is as**
    def ADD_METHOD(x, y):
          print x + y

注意,最好给1.py2.py起个更好的名字,以免以后搞混哦;)

撰写回答