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

    −112

    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
    #реализация 1
    servrun = lambda method, list: list and method(list)
    servrun( self.server.mkdir, (map(lambda item: item[1], filter(lambda item: item[0] == storagesyncer.ACTION_DIR_CREATED, changes))) )
    servrun( self.server.deldir, (map(lambda item: item[1], filter(lambda item: item[0] == storagesyncer.ACTION_DIR_DELETED, changes))) )
    servrun( self.server.upload, 
                 (map(lambda item: [item[1], self.abs(item[1])], 
                          filter(lambda item: item[0] == storagesyncer.ACTION_FILE_CREATED or item[0] == storagesyncer.ACTION_UPDATED, 
                                 changes))) )
    
    
    #реализация 2
    mkdirs = [path for (action, path) in changes if action == storagesyncer.ACTION_DIR_CREATED]
    if mkdirs:
       self.server.mkdir(mkdirs)
    
    deldirs = [path for (action, path) in changes if action == storagesyncer.ACTION_DIR_DELETED]
    if deldirs:
        self.server.deldir(deldirs)
    
    uploads = [[path, self.abs(path)] for (action, path) in changes 
                               if action == (storagesyncer.ACTION_FILE_CREATED or action == storagesyncer.ACTION_UPDATED)
                               and os.path.isfile(self.abs(path))]
    if uploads:
       self.server.upload(uploads)

    выдавил из себя 2 куска) вот теперь думаю как реализовать нормально)

    Запостил: roku, 29 Июня 2010

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

    • суть в том что строчек вроде:
      deldirs = [path for (action, path) in changes if action == storagesyncer.ACTION_DIR_DELETED]
      if deldirs:
          self.server.deldir(deldirs)

      около 10 и получается длинющий и некрасивый метод.
      Ответить
    • Ух ты, лямбды. Лямбды - это круто.
      Ответить
    • Очень хорошо, что Вы учитесь программировать.
      Вдвойне хорошо, что в качестве первого своего языка Вы выбрали питон, а не (например) php.

      Старайтесь, и все у Вас получится. Но наверное не нужно выкладывать сюда каждую свою программу
      Ответить
      • Насрал и людям показал -- такое поведение встречается за психически больными.
        Ответить
        • Это вы так тонко намекаете на психическое здоровье аудитории этого сайта?
          Ответить
    • Второй способ проще и понятнее. В крайнем случае можно взять servrun из первого.

      Ещё замечу, что скобки в (action, path) не нужны, а (action == storagesyncer.ACTION_FILE_CREATED or action == storagesyncer.ACTION_UPDATED) лучше записать в виде action in (storagesyncer.ACTION_FILE_CREATED, storagesyncer.ACTION_UPDATED).
      Ответить
      • спасибо за дельные советы. и действительно второй способ понятнее)) вернувшись к этому коду после пары месяцев понимаешь это)
        Ответить
    • >lambda method, list: list and method(list)
      Ая-я-я-я-й!
      Ответить

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