Cicle для и функциональное поведение в Jupyter

#python #function #for-loop

Вопрос:

вероятно, мой вопрос очень прост, но моя проблема в том, что если я пишу цикл для внутри функции, результат не сохраняется, но если я делаю цикл для не в fction, поведение правильное. Где я не справляюсь с написанием своей функции? Спасибо вам за время, потраченное на меня

 def infoClean(liste, database):  for i in liste:  database = database[~(database['Username'].str.contains(i, case = False, na = False))]  infoClean(toRemove, twitter) twitter.info()  

Это не работает, но если я напишу:

 for i in toRemove:  twitter = twitter[~(twitter['Username'].str.contains(i, case = False, na = False))]  twitter.info()  

Это работает. В этом случае первая база данных под названием twitter обновляется с циклом для. Где я проваливаюсь? Спасибо всем за терпение и поддержку

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

1. возможно, вам придется использовать return database и запускать twitter = infoClean(toRemove, twitter)

Ответ №1:

Это проблема вызова по ссылке или вызова по значению.

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

 def infoClean(liste, database):  for i in liste:  database = database[~(database['Username'].str.contains(i, case = False, na = False))]  return database  twitter = infoClean(toRemove, twitter) twitter.info()  

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

1. Это не работает, и я не знаю, почему

2. спасибо @Eumel, вместо этого это работает. У меня возникла проблема с IDE pycharm. Большое вам спасибо!