Почему я получаю предупреждение «Локальная переменная не используется в функции»?

1

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

Я использую pycharm для записи своих назначений, и вижу, что одна из моих переменных не используется, и я не понимаю, почему и как ее исправить. Я тренировался пару часов и потерялся.

# Function "checkName" takes in 2 parameters
# The first is name, which will be given by user input
# The second is nameList, which comes from the function getNamesList
def checkName(name, nameList):
    for i in range(0, len(nameList)):
        if name == nameList[i]:
            rank = i + 1
            break
        else:
            rank = 0 ## This rank is undefined ##
        return rank

Любые указания на то, что я делаю неправильно? Также будет оценено объяснение различий между определением локальных и глобальных переменных!

  • 3
    Ваше заявление о return зарезано слишком далеко. Поддержите это на один уровень.
  • 0
    «одна из моих переменных ...»: какая? Где?
Показать ещё 2 комментария
Теги:
pycharm
variables
local

6 ответов

1

Вы получаете сообщение об ошибке "Локальная переменная" значение ранга не используется "в строке rank = я + 1 потому что оператор break на следующей строке приводит к завершению функции, не считывая значения из rank. Это относится только к случаю, потому что ваш оператор return слишком удален. Переместите его на один уровень отступов, чтобы он не возвращался до тех пор, пока цикл не будет выполнен, и предупреждение не исчезнет.

def checkName(name, nameList):
    for i in range(0, len(nameList)):
        if name == nameList[i]:
            rank = i + 1
            break
        else:
            rank = 0 ## This rank is undefined ##
    return rank
0

С точки зрения написанного кода ранг определяется, но не используется - вы устанавливаете его и ломаете, поэтому похоже, что с ним ничего не делается. Еще раз, это то, что другие другие упомянули.

0

Большое вам спасибо за быстрые и полезные ответы! Мой отступ был упущен, глупая ошибка. Честно говоря, я не знаю, как я это забыл много раз.

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

0

Вероятно, самым коротким может быть:

nameList = ["a", "b", "c"]

def checkName(name, nameList):
    return(nameList.index(name) + 1 if name in nameList else 0)

for i in ["a", "b", "c", "d"]:
    print(checkName(i, nameList))

Результат:

1
2
3
0
0

Читая свой код, я понимаю, что эти функции возвращают ранг или индекс name в данном list names. У вас есть неправильный отступ в инструкции return.

Поэтому, чтобы улучшить код, проверьте следующее:

def checkName(name, nameList):
    for i in range(nameList):
        if name == nameList[i]:
            return i + 1
        # you don't need an else here, just return -1 or 0 or None ( by default )
        # whenever 'name' doesn't exists on the nameList
    # not very pythonic
    return 0

Ваш код не всегда использовал rank локальной переменной из-за неправильного отступа.

0

Я могу сказать вам, что если вы нажмете на свой "разрыв", вы ничего не будете возвращать, потому что у вас неправильный отпечаток. Вам нужно взять один отступ из вашего возвращения.

Я также могу рассказать вам немного о глобальных и локальных переменных в простых терминах: Любая переменная, которую вы определяете внутри своей функции, например "ранг", не будет сохраняться вне функции. Если вы запустите выше, а затем попробуйте вызвать "ранг" вне вашей функции, вы будете вызывать пустую переменную (если только вы не указали другую "ранг"). Это позволяет использовать ранг внутри функции, не опасаясь конфликта с переменными вне функции. В общем, вы хотите избежать каких-либо действительно "глобальных" переменных, но переменная, названная вне функции, более глобальна, чем одна из них внутри.

Что касается того, что указывает pyCharm, я не уверен, потому что я не использую программу. Вы называете свою функцию в любом месте? Это может дать вам понять, что вы определяете свою функцию, а затем не называете ее.

  • 0
    Его проблема заключается в его операторе return , так как он всегда будет вызываться на первой итерации цикла for, за исключением того факта, что первое условие в операторе if сработало. Затем вы инициируете оператор break , который полностью отделится от цикла for, а оператор return никогда не будет достигнут.
  • 0
    Да, я определенно согласен с вами там. На самом деле мне не ясно, что он пытается сделать со своей программой, иначе мы могли бы быть более полезными.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню