从文件中获取变量,该文件正在python中导入我的函数

时间:2018-09-29 03:04:04

标签: python python-3.x operating-system

我有2个文件:

Main.py

from test import test
def main():
    sol = 'hello'
    if test() == sol:
        print('Yes')
    else:
        print('No')

test.py

def test():
    return 'hello'

在我的测试功能中是否可以访问另一个文件中的 sol 变量?我想做这样的事情:

def test():
    return sol

这样,它总是与Main.py中的变量相同。我尝试了Python extract variables from an imported file中提到的解决方案,但对我而言不起作用。谢谢您的帮助

编辑:我想在不更改Main.py文件的情况下完成

3 个答案:

答案 0 :(得分:2)

由于函数中未定义sol,因此您需要将其声明为全局函数,以便可以在函数中使用它。将test.py更改为以下内容...

test():
    global sol
    return sol

希望有帮助。

答案 1 :(得分:2)

如果sol是一个常数(即在程序执行过程中不会改变的变量),则可以将其放入一个单独的文件(例如var.py)中,并将其导入main.py和test中。 py:

from var import sol

但是,您要导入的是变量的副本,该副本具有导入时变量的值-任何后续重新分配都不会更新test.py和main.py中sol的值。因为字符串是不可变的,所以当您为它重新分配一个值时,实际上是在为新实体重用变量名。

您需要做的是将变量设置为可变结构(例如列表或类),因此您的var.py如下所示:

class v(object):
    sol = 'Hello'

,然后在main.py和test.py中,您可以使用以下命令引用sol:

from var import v
print(v.sol)

这样,对v.sol的任何更改都将正确地反映在导入v类的任何位置。有点麻烦,但是在Python中就是这样。

答案 2 :(得分:0)

您可以使用inspect模块从sol函数获取main变量,而无需更改main.py的任何内容。当然,您需要调用main函数。

Main.py:

from test import test
def main():
    sol = 'hello'
    if test() == sol:
        print('Yes')
    else:
        print('No')

main()

test.py:

import inspect

def test():
    frame = inspect.currentframe()
    sol_from_main = 'default'
    try:
        sol_from_main = frame.f_back.f_locals['sol'] # line A
    except:
        print('No sol found')
    print(sol_from_main)  # this print 'hello'
    return sol_from_main

输出:

  

你好

     

说明:

python doc中,我们可以看到下一个:

  

框架

     

f_back |下一个外部框架对象(此框架的调用者)

     

f_locals |此框架看到的本地名称空间

因此line A获取当前函数的调用者,即main function,并使用f_locals获取main function的所有局部变量,因此它可以获取{{来自sol的1}}值。仅供参考,以防您仍然需要。