#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. Да, спасибо за исправление. Я недостаточно внимательно прочитал вопрос!