С помощью отдельной функции для проекта Эйлера 1


Я начал программировать с Java и C++, так что я привык к "основному" функция, которая вызывает другие функции, которые выполняют фактическую работу. В университете мне всегда говорили, что делать фактический расчет в Основная функция-это плохая практика. В настоящее время я играл вокруг с Python, и у меня есть проблемы, выясняя, как написать хороший функции 'main', особенно когда я делаю небольшие вещи, которые не нужны отдельные классы.

Что вы думаете о следующем коде? Основная функция это необходимо, или просто написать все без функций? Есть общее согласие на это в Python в мире?

# Finds sum of all multiples of 3 and 5 from 0 to 999 

def find_multiples():
    global numbers

    for i in range(0,1000):
       if i%3==0 or i%5==0:
           numbers.append(i);

numbers = []

if __name__ == '__main__':
    find_multiples()
    print sum(numbers)


3563
57
задан 19 января 2011 в 09:01 Источник Поделиться
Комментарии
2 ответа

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

33
ответ дан 19 января 2011 в 09:01 Источник Поделиться

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

# Finds...
###-^ Put this in a docstring

def find_multiples():
"""Finds sum of all multiples of 3 and 5 from 0 to 999 """
###-^ This allows you to "from x import find_multiples, help(find_multiples)"
numbers = []
###-^ Avoid globals
for i in xrange(1000):
###-^ Use xrange if Python 2.x, no need to start at 0 (it's the default)
if not (i % 3) or not (i % 5):
###-^ Add spaces around operators, simplify
###-^ the boolean/numeric checks
numbers.append(i)
###-^ Remove trailing ;
return numbers

###-^ Removed global

def main():
###-^ Allows calling main many times, e.g. for benchmarking
numbers = find_multiples()
print sum(numbers)

if __name__ == '__main__':
main()

51
ответ дан 19 января 2011 в 10:01 Источник Поделиться