Глобальный список не стал глобальным - PullRequest
0 голосов
/ 02 февраля 2020

Выдержка из моего кода:

my_list = []

def scrape_the_web():
    # some code for scraping the web
    global my_list
    my_list.append(data scraped from web)

def print_list():
    print(my_list)     # Output []

Не уверен, почему он не работает.

Ответы [ 2 ]

2 голосов
/ 02 февраля 2020

В своем коде вы никогда не звоните scrape_the_web. Это будет работать:

my_list = []

def scrape_the_web():
    global my_list
    my_list.append("x")

def print_list():
    print(my_list)

scrape_the_web()
print_list()

Обновление : Кстати, поскольку вы не изменяете my_list, а только добавляете его, global не является строго необходимым, но может сделайте ваш код более понятным.

1 голос
/ 02 февраля 2020

Я хотел бы уточнить предыдущий ответ myke.

В программировании функции являются только определениями набора задач, которые вы можете повторное использование . Однако пользовательская функция не вызывается автоматически. Команды, которые вы вводите внутри scrape_the_web(), являются только командами, хранящимися в памяти, они никогда не выполняются .

вызывают метод непосредственно перед использованием print_list()

scrape_the_web()
print_list()

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

Также python использует метод доступа к переменным, называемый Call by Sharing. По сути это означает, что переданный в переменную не может быть изменен с помощью присваивания , если он не является глобальной переменной. Однако можно изменить , если вы измените свойства переменной. То есть, если вы используете встроенные методы для переменной (то есть append() для list).

Так что в этом случае, поскольку вы изменяете my_list свойство , оно не обязательно должно находиться в глобальной области видимости. Однако, если вы попытаетесь использовать операции присваивания вместо append(), например, так-

my_list += ["x"]

Вы должны будете объявить my_list в качестве глобальной переменной для ее изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...