Ваш код на Python виглядає як Java

6 хв. читання

Незалежно від того подобається вам чи ні, ви кожного дня використовуєте різні мови програмування: SQL, Javascript, Python, C++ та інші. Відомо, що вивчення різних мов програмування є ключем справжнього професіоналізму, але великий відсоток програмістів з цим не рахуються або, спробувавши, вирішують, що це пуста трата часу. Після багатьох років спілкування та праці з такими спеціалістами,я зрозумів, що вони вивчають синтакс мови, можливо - роботу з деякими основними бібліотеками та фреймворками, але так і не пізнають суть мови, її "душу".

Приклади:

    # Погано: вам потрібно читати до кінця, щоб зрозуміти мету коду
    img.find('.jpg') != -1
    img.find('.jpg') >= 0
    
    # Легше для читання
    '.jpg' in img
    '.jpg' not in img
    
    # Погано. Строге обрізання по числу
    img[-4:] == '.jpg'
    
    # Добре. Працює з рядком будь-якої довжини
    img.endswith('.jpg')
    
    
    
    # Погано
    (img.endswith('.jpg') or img.endswith('.jpeg') or img.endswith('.png') or 
        img.endswith('.gif')
    
    # Добре: використовуються вбудовані можливості python, для більш компактного коду
    img.endswith((".jpg", ".jpeg", ".png", ".gif"))
    
    
    
    # Погано
    path == 'js' or path == 'css' or path == 'img' or path == 'font' or path == 'fonts'
    
    # Добре. Компактний код
    path in ('js', 'css', 'img', 'font', 'fonts')
    
    
    
    # Погано
    (os.path.exists(os.path.join(path, "space")) or 
        os.path.exists(os.path.join(path, "bucket")) or 
        os.path.exists(os.path.join(path, "actor"))
    
    # Добре. Компактний код. Краще читається. Список може бути переміщеним в інший файл
    any(os.path.exists(os.path.join(path, item)) for item in ["space", "bucket", "actor"])
    
    
    
    # Погано
    for i in range(len(lst)):
        elt = lst[i]
        print i, elt
    
    # Добре. Використовуємо вбудовані python функції
    for i, elt in enumerate(lst):
        print i, elt
    
    
    
    # Погано
    print 'Привіт ', name, '. Тобі ', age, ' років'
    
    # Добре. Відображає структуру вашого виводу 
    print 'Привіт {name}. Тобі {age} років'.format(name=name, age=age)
    
    
    
    # Погано
    if not (key in dict):
        print 'Ключ відсутній'
    
    # Добре. Читається краще
    if key not in dict:
        print 'Ключ відсутній'
    
    
    
    # Погано
    s = names[0]
    for name in names[1:]:
        s += ', ' + name
    
    # Добре. Не виникає проблеми з одним елементом. Також швидше
    s = ', '.join(names)
    
    
    
    # Погано
    # Визначаємо, що array1 підмножина array2
    is_subset = True
    for x in array1:
        found = False
        for y in array2:
            if x == y:
                found = True
                break
    
        if not found:
            is_subset = False
            break
    
    # Добре. 2 рядки коду замість 10!
    def subset_of(array1, array2):
        return set(array1).issubset(array2)
    
    
    
    # Погано 
    if case_sensitivity.lower() == 'sensitive':
        matcher = fnmatch.fnmatchcase
    elif case_sensitivity.lower() == 'insensitive':
        def matcher(fname, pattern):
            return fnmatch.fnmatchcase(fname.lower(), pattern.lower())
    else:
        matcher = fnmatch.fnmatch
    
    # Добре. Код може бути переміщений в інший файл
    matchers = {
    'sensitive': fnmatch.fnmatchcase
    'insensitive': lambda fname, pattern: fnmatch.fnmatchcase(fname.lower(), pattern.lower())
    }.get(case_sensitivity.lower(), fnmatch.fnmatch)
Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація