无法在另一个 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]
funcResults 是 func() 的返回值,即列表 [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 函数的属性的主要内容,如果未能解决你的问题,请参考以下文章
使用命令行参数在另一个 Python 脚本中调用一个 Python 脚本
gnome 终端:找不到目录(在另一个终端中运行 python 脚本)