невозможно использовать атрибут из функции Python в другом скрипте Python - PullRequest
1 голос
/ 27 сентября 2019

Я хочу использовать один из атрибутов, возвращаемых функцией из скрипта 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'

Заранее спасибо

Ответы [ 6 ]

3 голосов
/ 27 сентября 2019

Для вызова func используется func(), что даст вам [a, b].

пример:

funcResult = func()

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

funcResults - это возвращаемое значение из func () , то есть список [a, b] .

2 голосов
/ 28 сентября 2019

Переменная была объявлена ​​внутри функции, что делает ее локальной переменной, и поэтому она не может быть доступна вне функции.

Переменная объявляется вне функции, что делает ее глобальной переменной и не являетсяв любом случае связаны с вашей функцией.

Концепция атрибутов относится к классам, и вы имеете дело с функцией, поэтому вам, возможно, придется рассматривать ее как объект класса.

Если вы обеспокоеныПолучив доступ к локальным переменным, вы также можете сделать это:

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])
2 голосов
/ 27 сентября 2019

вы не можете получить доступ к локальным переменным функции.эти переменные существуют только во время выполнения func и впоследствии уничтожаются.

Можно, конечно, вызвать функцию и посмотреть на результат, но результат - это просто список с двумя значениями

rslt = func()
print("A = ", rslt[0])
print("B = ", rslt[1])
2 голосов
/ 27 сентября 2019

Это недопустимо, вам нужно вызвать функцию, чтобы получить значение из списка возвращаемых функций.

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

PS: Это "не разрешено", потому что это не имеет никакого смысла;когда нет вызова функции, вообще не существует переменной b.Вы можете взглянуть на классы, они могут содержать статические переменные.

1 голос
/ 27 сентября 2019

Python имеет концепцию области видимости.Локальные переменные не действуют вне функции.
Если вы хотите использовать ее, используйте class и self или создайте функцию-получатель (но это не 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])

1 голос
/ 27 сентября 2019

Если вы хотите использовать атрибуты, вы можете создать вызываемый класс вместо функции:

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

...