Вопрос:
Я написал сценарий, который довольно темпераментен с отступом, поэтому я решил сделать функции. Я новичок в python, и теперь, когда я создал эти функции, ничего не работает!
def main (): wiki_scrape() all_csv() wiki_set = scraped_set(‘locations.csv’) country_set = all_set(‘all.csv’) print wiki_set
Мне просто интересно, правильно ли это вызывать функции из функции main()? Я обсуждал, возникает ли проблема с отступом внутри вызываемых функций, python, похоже, очень полагается на правильные углубления, даже если он не вызывает ошибки!
Полный код –
Лучший ответ:
Похоже, вам нужно это сделать:
def main(): wiki_scrape() all_csv() wiki_set = scraped_set(‘locations.csv’) country_set = all_set(‘all.csv’) print wiki_set main() # this calls your main function
Даже лучше:
def main(): wiki_scrape() all_csv() wiki_set = scraped_set(‘locations.csv’) country_set = all_set(‘all.csv’) print wiki_set if __name__ == ‘__main__’: main() # this calls your main function
Затем запустите его из командной строки следующим образом:
python file_name.py
Встроенная переменная __name__ является текущим контекстным пространством имен. Если вы запустите скрипт из командной строки, он будет эквивалентен ‘__main__’. Если вы запустите/импортируете файл.py в качестве модуля из другого места, в том числе изнутри интерпретатора, пространство имен (внутри контекста модуля) будет именем файла.py или именем пакета, если оно является частью пакет. Например:
## my_file.py ## print(‘__name__ is {0}’.format(__name__)) if __name__ = ‘__main__’: print(«Hello World!»)
Если вы сделаете это из командной строки:
python my_file.py
Ты получишь:
__name__ is __main__ Hello World!
Однако, если вы импортируете его из интерпретатора, вы можете видеть, что __name__ не __main__:
>>> from my_file import * >>> __name__ is my_file Ответ №1
Python не вызывает никаких функций при запуске, если явно не задано (включая main).
Вместо этого Python называет исполняемые файлы, причем основной файл запускается под именем __main__.
Если вы хотите просто вызвать основную функцию, вы можете использовать ответ Рика.
Однако в лучшей практике Python лучше сделать следующее:
if __name__ == ‘__main__’: wiki_scrape() all_csv() wiki_set = scraped_set(‘locations.csv’) country_set = all_set(‘all.csv’) print wiki_set
Это гарантирует, что если вы используете этот файл python в качестве основного файла (файл, который вы нажимаете или запускаете из cmd), тогда эти функции будут запущены.
Если это вместо этого используется как импортированный модуль, вы все равно можете использовать функции в сценарии, импортирующие модуль, но они не будут вызываться автоматически и, следовательно, не будут мешать вызывающему скрипту.