python - 在python中导入files.py的问题
问题描述
我认为这是一个非常基本的问题,但我找不到任何东西。抱歉,如果这恰好是重复的。
我有一个定义了一些函数的文件,我们称之为这个文件main_functions.py
。
在这个文件中,我依赖一个函数,我们可以调用它foo()
。例如,在文件中main_functions.py
我们可以有这样的东西:
def bar():
return foo()
foo()
在另一个文件中定义,称为secondary_functions.py
def foo():
return 1
现在,在我的main
脚本中,我想导入一个可以定义的文件foo()
,然后执行以下操作:
from secondary_functions import * # Here I define foo()
from main_functions import *
bar()
如果这样做,内部的函数main_functions
将无法找到 中存在的定义,secondary_functions
我将收到如下错误:
NameError:名称'foo'未定义
解决这个问题对我来说非常重要。
我的目标是能够拥有不同的文件,称为secondary_functions1.py
, secondary_functions2.py
, eccetera, 的定义foo()
。
而且,为了解决这个问题,我不想每次都更改依赖于这些定义的文件,例如每次插入类似import secondary_functionsX.py
的东西,这样可以解决问题。我只想更改主脚本。
解决方案
在 import 语句之后,变量 likepippo
已经成为主程序范围内的全局变量。但是全局变量不会被导入的模块继承。模块应该能够作为独立的单元独立存在,可以由任何程序导入;想象一下,如果他们开始使用来自任何导入它们的变量,会出现什么问题......
因此,做到这一点的唯一方法是显式地“给予”模块的值,例如作为附加的函数参数。您可以将所有内容main_functions.py
放在一个类中,然后让您的主脚本将所需的全局变量作为其init
构造函数的参数提供给它,以便它可以存储它们以供bar()
其他方法使用。
推荐阅读
- apache-spark - 个性化 monotonically_increasing_id 火花
- html - 如何使用 Groovy 脚本将 json 转换为 html
- php - Php Curl 不能只在一个网站上工作
- azure - 如何模拟 IMessageReceiver
- apache-superset - Superset 是否支持一次查询/连接多个表?
- node.js - 点击硒元素
- apache - “www 到非 www”的 mod_rewrite 规则不会重定向子页面
- c++ - gRPC C++ 如何在 Windows 10 上构建?
- rest - 将 REST 请求与异步服务器中的响应匹配
- javascript - 列表中复选框上的 onclick 事件