【问题标题】:unable to use attribute from a python function in another python script无法在另一个 python 脚本中使用来自 python 函数的属性
【发布时间】: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 ,感谢您提供的信息 ^^ 我不确定是否理解您的问题,但我接受了答案,因为我想要的只是访问生成的数据,并且提供的方法工作。

标签: python function join ipc


【解决方案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])
          
          

          【讨论】:

            猜你喜欢
            • 2018-08-19
            • 2021-01-24
            • 1970-01-01
            • 1970-01-01
            • 2018-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多