无法在另一个 python 脚本中使用来自 python 函数的属性

Posted

技术标签:

【中文标题】无法在另一个 python 脚本中使用来自 python 函数的属性【英文标题】:unable to use attribute from a python function in another python script 【发布时间】:2019-09-27 10:37:10 【问题描述】:

我想将 python 脚本 (x) 中的函数返回的属性之一用于 python 脚本 (y)

两个脚本之间的通信运行良好;我可以获取函数和属性,但不允许我获取函数返回的属性。

这是我的工作方式:

x.py

def func():
    b = 10
    a = 15
    return [a,b]
c = 20

y.py

from x import func
import x
print (x.c)
print (func.b)

我得到“c”值和以下错误AttributeError: 'function' object has no attribute 'b'

我也尝试打印x.b,我得到了AttributeError: module 'WorkingLSTM' has no attribute 'b'

提前致谢

【问题讨论】:

除非函数返回,否则不能调用函数中设置的变量。 那些不是属性。这些是局部变量 @juanpa.arrivillaga ,是的,对于这个问题,我只是将局部变量放在我的实际脚本中,b 是来自 LSTM 网络的预测时间序列 @Nour 为什么这有关系?无论如何,这些都不是属性。 @juanpa.arrivillaga ,感谢您提供的信息 ^^ 我不确定是否理解您的问题,但我接受了答案,因为我想要的只是访问生成的数据,并且提供的方法工作。 【参考方案1】:

调用 func 的方法是使用func(),它会给你[a,b]。

示例:

funcResult = func()

a = funcResult[0]
b = funcResult[1]

funcResultsfunc() 的返回值,即列表 [a,b]

【讨论】:

调用函数调用newFunc 的返回值可能会产生误导。对于初学者来说可能特别容易误导,因为结果(func() 的返回值)不是一个函数,而是一个包含两个值的列表【参考方案2】:

这是不允许的,你必须调用函数从函数返回列表中获取值。

a, b = func()
print(b)
# or just...
print(func()[1])

PS:这是“不允许的”,因为它没有任何意义;当没有函数调用时,根本就没有变量 b。你可以看看类,它们可以保存静态变量。

【讨论】:

【参考方案3】:

您不能访问函数的局部变量。 这些变量只在 func 执行期间存在,之后会被销毁。

你当然可以调用函数并查看结果,但结果只是一个包含两个值的列表

rslt = func()
print("A = ", rslt[0])
print("B = ", rslt[1])

【讨论】:

【参考方案4】:

该变量在函数内部声明,使其成为局部变量,因此不能在函数外部访问。

该变量在函数外部声明,使其成为全局变量,并且与您的函数无关。

属性的概念与类有关,并且您正在处理一个函数,因此您可能必须将其视为类对象。

如果您担心访问局部变量,不妨这样做:

y.py

from x import *

d = func()       # func returns a list which is now 
                         # identified/referenced by variable d

# displays the elements in the list using index position
print(d[0])
print(d[1])

【讨论】:

【参考方案5】:

如果你想使用属性,你可以创建一个可调用的类而不是函数:

class Func:
    def __init__(self):
        self.b = 10
        self.a = 15
    def __call__():
        return [self.a, self.b]
func = Func()

【讨论】:

【参考方案6】:

Python 有作用域的概念。局部变量在函数之外没有影响。 如果您想使用它,请使用 class 和 self 或制作 getter 函数(但它不是 Pythonic)。

x.py

class X:
    def __init__(self):
        self.b = 10
        self.a = 15
        self.c = 20

    def func(self):
        return [self.a, self.b]

y.py

from x import X

x = X()
print(x.c)
print(x.func()[1])

【讨论】:

以上是关于无法在另一个 python 脚本中使用来自 python 函数的属性的主要内容,如果未能解决你的问题,请参考以下文章

在另一个线程中中断 pySerial readline

使用命令行参数在另一个 Python 脚本中调用一个 Python 脚本

gnome 终端:找不到目录(在另一个终端中运行 python 脚本)

通过 terraform 在 cloud init 中传递 python 脚本

Python 在另一个脚本上引用数据库连接

如何将数据从 Perl 发送到 Python