Почему я получаю предупреждение «Локальная переменная не используется в функции»? - PullRequest
0 голосов
/ 19 октября 2018

Я новичок в программировании и только что начал свой первый скачок скорости с начала этого семестра.Мы работали в 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

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

Ответы [ 6 ]

0 голосов
/ 19 октября 2018

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

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 голосов
/ 19 октября 2018

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

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

0 голосов
/ 19 октября 2018

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

0 голосов
/ 19 октября 2018

Читая ваш код, я понимаю, что эта функция возвращает ранг или индекс 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 голосов
/ 19 октября 2018

В строке rank = i + 1 появляется ошибка «Значение локальной переменной 'rank' не используется», поскольку оператор 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 голосов
/ 19 октября 2018

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

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

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

...