Как использовать переменную, которая определена в другой функции, но которую нужно использовать в следующей функции?

#python #python-3.x #function #variables

#python #python-3.x #функция #переменные

Вопрос:

Здесь я хочу снова использовать переменный объект a в своей следующей функции, но когда я попытался использовать a в своей следующей функции, это выдало ошибку имени. Также я не хочу создавать переменную в начале функции, я хочу создать ее в функции, которую также хочу использовать в следующей функции.

код

 def A():
    a=12
    print(a*12)
A()

def B():
    b=14
    print(b*a)
B()
  

ВЫВОД

   144
Traceback (most recent call last):
 File "C:/Users/ADMIN/Documents/a.py", line 9, in <module>
  B()
 File "C:/Users/ADMIN/Documents/a.py", line 8, in B
  print(b*a)
NameError: name 'a' is not defined
  

Любое решение было бы оценено, заранее спасибо.

Комментарии:

1. Похоже, что a является константой, а не переменной. Почему бы не определить a в общей области видимости обеих функций?

Ответ №1:

Вероятно, вы хотите передать a в качестве параметра в B функцию.

 def A():
    local_a=12
    print(local_a*12)
    return local_a
    # local_a stops existing here, but that's okay because we 
    # have returned the value it contained

outer_a = A() # variable `outer_a` is the value we returned from function `A` (12 in this case)

def B(a):
    b=14
    print(b*a)

B(outer_a) # pass outer_a  into function `B`
  

Комментарии:

1. Хм…… Я понял. Итак, мне просто не хватало, чтобы вернуть и вызвать переменную, которую я хочу использовать в своей следующей функции.

Ответ №2:

Это простая проблема глобальной переменной и локальной переменной, обратите внимание, что когда вы объявляете «a», ее область действия находится только внутри функции A, скорее вы можете объявить «a» вне функции и продолжить программу как есть, потому что теперь область действия переменной предназначена для всей программы.

 a = 0
b = 0 
def A():
    a=12
    print(a*12)
    return a
a = A()

def B():
    b=14
    print(b*a)
B()
  

Комментарии:

1. ммм ….. вы допустили ошибку здесь, присвоив a = 0 и b = 0, поскольку это даст результат 0 в функции B, потому что значение не изменится, т.Е. Оно будет 0 bcoz после выполнения функции A переменная a не будет существовать как 12, она будет существовать как a, поэтому функция B выдаст результат 0. вы можете проверить, если вы мне не верите.

2. да, вы правы, возможно, лучшим решением является функция (), также возвращающая a .

Ответ №3:

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

 def A():
    global a
    a = 12
    print(a*12)
A()

def B():
    b=14
    print(b*a)
B()
  

Вывод:

 144
168

Process finished with exit code 0
  

С учетом этого ответа ценность вашего кода сомнительна.
Поскольку вы объявляете переменную в своих функциях и возвращаете «арифметическую» версию этой переменной, ваша функция практически бесполезна. Или, скорее, ваши функции не выполняют цель программным способом, а именно упрощают повторяющиеся операции для ввода типа-статического.
Вызов вашего A() или B () буквально такой же, как печать арифметики или целых чисел, поскольку выходные данные (return) ваших функций в значительной степени статичны.

Комментарии:

1. Глобальные переменные не являются заменой аргументов функции и возвращаемых значений.

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

3. Да, спасибо за исправление. Я недостаточно внимательно прочитал вопрос!