【问题标题】:Importing variables from another file?从另一个文件导入变量?
【发布时间】:2013-06-19 19:04:27
【问题描述】:

如何将变量从一个文件导入到另一个文件?

示例:file1 有变量x1 和x2 如何将它们传递给file2?

如何将所有变量从一个变量导入另一个变量?

【问题讨论】:

  • 为什么你想这样做?根据用例,这实际上并不是您真正想要的。

标签: python file variables import


【解决方案1】:
from file1 import *  

将导入file1中的所有对象和方法

【讨论】:

  • 请注意,这通常是您should not do。
  • 正如 David 指出的那样,这会污染命名空间,并可能通过掩盖其他模块(包括标准发行版中的模块)中的对象和函数而产生灾难性后果
  • 我尝试这样做,但似乎 python 找不到 file1,因为我收到此错误:ImportError: No module named file1
  • 您有__init__.py 文件吗?有关详细信息,请参阅here。
【解决方案2】:

在file2中导入file1:

要从 file1 导入所有变量而不淹没 file2 的命名空间,请使用:

import file1

#now use file1.x1, file2.x2, ... to access those variables

将file1中的所有变量导入file2的命名空间(不推荐):

from file1 import *
#now use x1, x2..

来自docs:

虽然在模块级别使用from module import * 是有效的,但它是 通常是个坏主意。一方面,这失去了 Python 的一个重要属性 否则有 - 您可以知道每个顶级名称由 您最喜欢的编辑器中的简单“搜索”功能。你也开 如果某些模块增加了,您将来会遇到麻烦 函数或类。

【讨论】:

  • 如果我要传递 1000 个变量?
  • @Ofek 那就用import file1吧。
  • 它不导入变量:\
  • 它确实会导入变量,但您必须为每个文件添加 file1.varX。
【解决方案3】:

最好明确导入 x1 和 x2:

from file1 import x1, x2

这允许您在使用 file2 时避免与来自 file1 的变量和函数发生不必要的命名空间冲突。

但如果你真的想要,你可以导入所有变量:

from file1 import * 

【讨论】:

    【解决方案4】:

    实际上这与导入变量并不完全相同:

    from file1 import x1
    print(x1)
    

    和

    import file1
    print(file1.x1)
    

    虽然在导入时 x1 和 file1.x1 具有相同的值,但它们不是相同的变量。例如,在 file1 中调用一个修改 x1 的函数,然后尝试打印主文件中的变量:您将看不到修改后的值。

    【讨论】:

      【解决方案5】:

      script1.py

      title="Hello world"
      

      script2.py 是我们使用 script1 变量的地方

      方法一:

      import script1
      print(script1.title)
      

      方法二:

      from script1 import title
      print(title)
      

      【讨论】:

        【解决方案6】:

        first.py:

        a=5
        

        second.py:

        import first
        print(first.a)
        

        结果将是 5。

        【讨论】:

          【解决方案7】:

          马克response 是正确的。其实你可以打印变量print(hex(id(libvar))的内存地址,你可以看到地址是不一样的。

          # mylib.py
          libvar = None
          def lib_method():
              global libvar
              print(hex(id(libvar)))
          
          # myapp.py
          from mylib import libvar, lib_method
          import mylib
          
          lib_method()
          print(hex(id(libvar)))
          print(hex(id(mylib.libvar)))
          

          【讨论】:

            猜你喜欢
            • 2021-04-17
            • 1970-01-01
            • 2021-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多