1. Python / Говнокод #7506

    −86

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    def MonthsListGen(*args, **kwargs):
    	from datetime import datetime
    
    	if kwargs.has_key('month') and kwargs.has_key('year'):
    		return "%s-%s"%(kwargs['year'], "0%d"%kwargs['month'] if kwargs['month']<10 else str(kwargs['month']))
    
    	if kwargs.has_key('date'): return MonthsListGen(year = kwargs['date'].year, month = kwargs['date'].month)
    
    	if kwargs.has_key('decodeName'): return MONTH_NAMES[int(kwargs['decodeName'].split('-')[1])]
    	if kwargs.has_key('decodeYear'): return int(kwargs['decodeYear'].split('-')[0])
    	if kwargs.has_key('startDate') and kwargs.has_key('endDate'):
    		startDate = kwargs['startDate']
    		endDate = kwargs['endDate']
    		monthList = []
    		if startDate.year < endDate.year:
    			startDate1 = startDate
    			endDate1 = datetime.strptime('%d.%d.%d'%(DAYS_IN_MONTH[12], 12, startDate1.year) , '%d.%m.%Y')
    			monthList = MonthsListGen(startDate = startDate1, endDate = endDate1)
    
    			startDate2 = datetime.strptime('%d.%d.%d'%(1, 1, startDate1.year+1) , '%d.%m.%Y')
    			endDate2 = endDate
    			monthList += MonthsListGen(startDate = startDate2, endDate = endDate2)
    			return monthList
    		if startDate.year == endDate.year:
    			monthRange = range(startDate.month, endDate.month+1)
    			year = startDate.year
    			for monthNo in monthRange:
    				monthList.append(MonthsListGen(year = year, month = monthNo))
    			return monthList
    	return False

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

    Запостил: hakimovis, 10 Августа 2011

    Комментарии (13) RSS

    • > kwargs
      квааа.....
      Ответить
    • Это просто праздник какой-то.

      Форматирование результата форматирования. "0%d"%kwargs['month'] if kwargs['month']<10 else str(kwargs['month']) вместо "%02d"%kwargs['month']. Конструирование даты через strptime. Ну и рекурсивный вызов с диспетчеризацией по набору опциональных аргументов — это просто вишенка.
      Ответить
      • "%02d"%kwargs['month'] вот за эту штуку спасибо, ато лень гуглить было как это делается) В рекурсии тут весь смысл, а куча возможных аргументов, это просто чтобы не плодить функции, которые будут нужны только в одном месте.
        Ответить
        • Вы автор кода? Примите глубочайшие почтение и соболезнование.
          Ответить
          • Спасибо, приятно сознавать, что не ошибся, когда запостил его на говнокод)
            Ответить
            • Жаль разрушать такой шедевр, но обратите внимание на коструктор datetime.date (или datetime.datetime), кроме рекурсии существуют циклы и условные операторы, вспомогательные функции можно делать внутренними, ну и kwargs после этого не понадобится.
              Ответить
    • фу
      Ответить

    Добавить комментарий