我有以下代码
import os
os.chdir('<<some folder>>')
import codeFile as CF
我们在
codeFile.py
中有<<some folder>>
文件,我正在导入
现在,在
codeFile.py
,有一行叫做
print(a_Variable)
当我执行
import codeFile as CF
时,我得到错误名称 'a_Variable'
未定义。
所以为了定义那个变量,我在下面的代码行
import os
os.chdir('<<some folder>>')
a_Variable = 6
import codeFile as CF
但我仍然遇到同样的错误。
有没有办法让
a_Variable
可用于import codeFile as CF
.
出于我的原因,我想在
a_Variable
之外定义
codeFile.py
任何指针都会很有帮助
根据@ProfDFrancis 的回答更新
@ProfDFrancis 为上述问题提供了一种解决方案。然而,这个解决方案似乎不适用于以下问题
在
codeFile.py
中,我有以下几行
def My_Fun(args)
return args + 10
def My_Fun1(args)
return args * 10
def init(a_Variable) :
if a_Variable == 10 :
print('RUNNING..')
def My_Fun(args) :
return args + 10 + 2
def My_Fun1(args) :
return args * (10 + 2)
主文件中的任何内容,我在下面
import codeFile as CD
CD.init(10)
CD.My_Fun(100)
有了这个,我期望我得到的值是 112,但实际上我得到的是 110。看起来,函数的第一个定义即
args + 10
被认为不是第二个定义,即 args + 10 + 2
解决此问题的任何方法都将非常有帮助。
import
作为运行带有参数的代码的方式更好的方法是将您当前期望在导入时运行的代码放入函数中。
代替
do something with a_Variable
放
def initialize(a_Variable):
do something with a_Variable
导入代码文件,然后调用相关函数,将您要用于
a_Variable
.的值传递给它
import os
os.chdir('<<some folder>>')
import codeFile as CF
CF.initialize(6)
My_Fun
之前的做法的问题是
My_Fun
只在initialize
的范围内创建。一旦该函数结束,确实创建的 My_Fun
的特殊变体将被销毁,因此在 CodeFile 的主要范围内,只有“外部”定义。
但有一个简单的方法:创建一个函数,creates
My_Fun
的一个版本,然后 返回它。以后使用 returned 函数。
import codeFile as CD
my_fun = CD.create_my_fun(0)
print("When created with 0, my_fun(1) returns", my_fun(1))
my_fun = CD.create_my_fun(10)
print("When created with 10, my_fun(1) returns", my_fun(1))
def create_my_fun(a_Variable):
if a_Variable == 10:
def my_fun(args):
print("Running special version")
return args + 10 + 2
else:
def my_fun(args):
print("Running standard version")
return args + 10
return my_fun # <---- This is the critical part: return the function, rather than simply letting it be destroyed when this function ends.
Running old version
When created with 0, my_fun(1) returns 11
Running new version
When created with 10, my_fun(1) returns 13
做一个返回函数的函数可能感觉有点奇怪,但是软件工程的整个分支实际上都是这样生活的,并且认为这是正常的!所以别担心。