#python #python-3.x #local-variables
#python #python-3.x #локальные переменные
Вопрос:
Почему в нем говорится «имя ‘max_range’ не определено», когда я уже назначил его. это попытка задать вопрос оhttps://www.algoexpert.io/questions/Largest Range пример массива:
array = [1, 11, 3, 0, 15, 5, 2, 4, 10, 7, 12, 6]
def largestRange(array):
# Write your code here.
sub_array = array # substitute array as it will be modified later3
Range = [0,0]
max_range = [0,0]
def run() :
global max_range
num = min(sub_array)
Range = [num]
running = True
while running :
num = 1
if num not in sub_array :
Range.append(num - 1)
running = False
pass
else :
sub_array.remove(num)
pass
pass
print(Range)
print(max_range)
if (max_range[1] - max_range[0]) <= (Range[1] - Range[0]) :
max_range = Range
if len(sub_array) != 0:
run()
pass
run()
print(max_range)
return max_range
pass
largestRange(array)
Полная ошибка:
name 'max_range' is not defined
Traceback (most recent call last):
File "/tester/json_wrapper.py", line 9, in run
actual = program.largestRange(array[:])
File "/tester/program.py", line 30, in largestRange
run()
File "/tester/program.py", line 23, in run
print(max_range)
NameError: name 'max_range' is not defined
переполнение стека говорит, что мой вопрос в основном касается кода, поэтому я просто пишу эту строку, чтобы она позволила мне опубликовать вопрос
пример воспроизводимого кода :
def largestRange(array):
# Write your code here.
sub_array = array # substitute array as it will be modified later3
Range = [0, 0]
max_range = [0, 0]
def run():
global max_range
num = min(sub_array)
Range = [num]
running = True
while running:
num = 1
if num not in sub_array:
Range.append(num - 1)
running = False
pass
else:
sub_array.remove(num)
pass
pass
print(Range)
print(max_range)
if (max_range[1] - max_range[0]) <= (Range[1] - Range[0]):
max_range = Range
if len(sub_array) != 0:
run()
pass
run()
print(max_range)
return max_range
pass
largestRange([1, 11, 3, 0, 15, 5, 2, 4, 10, 7, 12, 6])
Комментарии:
1. я не понял
2. Также я имел в виду оставить исходный код (в противном случае название вопроса не имеет смысла), но добавить измененный код ниже
3. тааак не могли бы вы, пожалуйста, отредактировать вопрос, чтобы он был правильным. ПОЖАЛУЙСТА
4. ох, sryy теперь, что мне делать??
5. хорошо, я сделаю это
Ответ №1:
В Python переменная, которой присваивается, по умолчанию считается локальной переменной … т. Е. в
x = 3
def foo():
print(x) # <--- error: x is considered a local
# because of next statement, but at this
# point it has not yet received any value
x = 5
Если вы хотите изменить глобальную, вам нужно сообщить компилятору:
x = 3
def foo():
global x # <--- this informs x is global even if there are assignments
print(x) # <--- prints the global
x = 5 # <--- ok, this changes the global
Если переменная никогда не записывается, компилятор предполагает, что она захвачена из внешней области или глобальной.
Комментарии:
1. но когда он выдает File «/tester/program.py «, строка 23, в run print(max_range) NameError: имя ‘max_range’ не определено
2. @Mehul: нет … ошибка
UnboundLocalError: local variable 'max_range' referenced before assignment
. В первом примере вы получите ту же ошибку, что иx
. Python решил, что это локальная, но если вы используете ее перед назначением, она выдает полученную вами ошибку.3. я в замешательстве, что мне теперь делать?? скажите, пожалуйста, я очень новичок в python
4. о, подождите, я это сделаю
Ответ №2:
max_range
определяется в глобальной области видимости. Таким образом, «по умолчанию» она также видна в локальной области видимости функции.
max_range = whatever
def run():
....
print(max_range) # OK
Однако, создание max_range = Range
внутри функции, max_range
затем рассматривается как локальная переменная для функции, т. Е. В функции all она не имеет ничего общего с глобальной max_range
max_range = whatever
def run():
....
print(max_range) # error, because local max_range has not been declared yet
max_range = Range # this makes max_range local
РЕДАКТИРОВАТЬ (к отредактированному вопросу)
global
Ключевое слово хорошо работает для глобальных переменных. В вашем коде вы max_range
определили внутри функции (не в глобальной области видимости) и хотите изменить ее внутри внутренней функции. Вы можете достичь этого, например, приняв ее в качестве параметра и вернув измененное значение:
def largestRange(array):
...
max_range = [0,0]
def run(max_range):
... # the code you have
return max_range
max_range = run(max_range)
...
Комментарии:
1. но как мне внести изменения
2. Смотрите ответ 6502 с использованием
global
ключевого слова