【问题标题】:Using script in other scripts在其他脚本中使用脚本
【发布时间】:2020-11-26 10:13:27
【问题描述】:

我对 Python 并不陌生,但不知何故,我总是在一个脚本中创建所有内容,然后按原样运行。

但是,现在我发现自己必须创建一个脚本,然后为包含不同变量等的不同场景创建不同的文件,然后在另一个脚本中使用这些文件。所以我想做的就是将此主脚本导入其他不同的脚本(主要包含不同的变量),然后按预期运行所有内容。

所以基本上我现在拥有的是:

    import matplotlib.pyplot as plt


    VAR1 = [1, 3, 5]
    VAR2 = "Foo Bar"
    VAR3 = {"foo": 1, "bar": 2}


    def my_func(arg):
        something something


    def my_func2(arg2):
        something something
        if VAR2 == "Foo Bar":
            print("Awesome var name")
        else:
            print("Not awesome var name")


    if __name__ = '__main__':
        something something
        
        my_stuff = [my_func(my_argument) for my_argument in some_list]

        print(VAR3["foo"])
        plt.hist(VAR1)
    
        plt.show()

所以这当然只是一个例子,但正如你所见,我使用了函数,if __name__ = '__main__' 中的变量,以及函数中的一些变量。

我想做的是创建多个包含不同变量的文件,这样我自己或同事就可以找到正确的脚本,并在需要时运行它。

但同样,我从未尝试过组合多个脚本,所以我真的不确定这是如何工作的。如果我尝试只导入我认为是主脚本的内容,即:

    import matplotlib.pyplot as plt


    def my_func(arg):
        something something


    def my_func2(arg2):
        something something
        if VAR2 == "Foo Bar":
            print("Awesome var name")
        else:
            print("Not awesome var name")


    if __name__ = '__main__':
        something something
        
        my_stuff = [my_func(my_argument) for my_argument in some_list]

        print(VAR3["foo"])
        plt.hist(VAR1)
    
        plt.show()

进入我想创建多个文件的脚本,即:

    import main_script


    VAR1 = [1, 3, 5]
    VAR2 = "Foo Bar"
    VAR3 = {"foo": 1, "bar": 2}

然后它只是运行变量,甚至没有加载其他脚本。如果我尝试删除 if __name__ = '__main__' (如果我没记错的话)确保它里面的东西在脚本被加载时不会运行(这可能是我想要它做的,或者......? ),然后我认为它运行脚本,但现在它缺少变量脚本中的变量。

所以基本上,我该如何解决这个问题? :)

【问题讨论】:

  • 在你实际运行的脚本中调用导入的函数。
  • 可能是this? (如何即时修改导入的源代码?)
  • 这实际上是我的第一个想法。但是if __name__ 部分中的内容是相当多的代码。理想情况下,我希望变量文件,即我的同事应该能够运行和更改变量的文件尽可能干净。如果所有if __name__ 内容也都在该文件中,那将是很好的 imo。但也许可以将 if __name__ 部分中的所有内容放入一个函数中?
  • 是的,你可以。请参阅下面的答案

标签: python


【解决方案1】:

尝试将if __name__ = '__main__':下的部分改成函数。

主脚本:

import matplotlib.pyplot as plt


def my_func(arg):
    something something


def my_func2(arg2):
    something something
    if VAR2 == "Foo Bar":
        print("Awesome var name")
    else:
        print("Not awesome var name")


def executeMainFunction(VAR1, VAR2, VAR3):
    something something
    
    my_stuff = [my_func(my_argument) for my_argument in some_list]

    print(VAR3["foo"])
    plt.hist(VAR1)

    plt.show()

单独的脚本

import main_script

VAR1 = [1, 3, 5]
VAR2 = "Foo Bar"
VAR3 = {"foo": 1, "bar": 2}

main_script.executeMainFunction(VAR1, VAR2, VAR3)

解释 if __name__ = '__main__' 下的部分(如您所想)在您将脚本导入另一个脚本时不会执行。但是,如果您只是将那部分代码放在主脚本中,则在将该脚本导入另一个脚本时会直接执行(即使在声明变量VAR1VAR2 等之前)。所以这也行不通。将要使用的部分放入函数中,可以使用单独脚本中的变量从单独的脚本中执行该部分。

【讨论】:

  • 但是我需要将所有变量作为参数吗?我有大约 20 个变量。将 20 个名称放入函数中可能看起来有点傻。但也许这就是这样做的方法?
  • 如果你想更简洁,你也可以把这 20 个变量放在一个字典里,然后用那个字典作为参数。但是你需要从主脚本中的字典中获取变量(例如plt.hist(var_dict['VAR1'])
猜你喜欢
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 2016-01-25
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多