从其他代码文件访问变量的值

问题描述 投票:0回答:1

我有以下代码

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

解决此问题的任何方法都将非常有帮助。

python-3.x variables
1个回答
1
投票

看起来你正在尝试使用
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 函数。

main.py
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))
代码文件.py
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   

做一个返回函数的函数可能感觉有点奇怪,但是软件工程的整个分支实际上都是这样生活的,并且认为这是正常的!所以别担心。

© www.soinside.com 2019 - 2024. All rights reserved.