Во время моего класса CS101 у меня была возможность познакомиться с Python. Это не совсем верно, так как я играл с ним немного раньше, но у меня был шанс увидеть Python в действии на этом курсе. Одним словом, это была действительно приятная встреча, и я надеюсь, что она перерастет в длительные и взаимовыгодные отношения. Я поделюсь некоторыми «нравится» и «не нравится» в следующем.
Что мне понравилось в Python …
Python — очень известный язык с отличной репутацией и сообществом вокруг него. Крупные компании, включая Google, используют Python для создания приложений уровня предприятия. Хакеры любят Python, потому что он сочетает в себе простоту и мощь. Вы можете заниматься разработкой приложений любого типа, включая настольные и веб-приложения. Все время сравнивается с Ruby, который является для меня в конце концов к чему — то , как это только.
Нет разработки IDE
Вам не нужна какая-либо модная среда для запуска с Python. Несомненно, IDE — это то, что делает разработку более эффективной, поэтому, если вы собираетесь много программировать на Python, включая отладку, вам, вероятно, следует выбрать один. Но сейчас я полностью доволен Sublime Text 2 в качестве IDE.
Легко учить
Если вы знаете некоторый ОО-язык, такой как C ++ или Java, это будет быстрый переход к Python. Python является объектно-ориентированным языком, но с поддержкой различных парадигм как процедурного, так и даже функционального программирования. Основные понятия переменных, условий и потока управления такие же, как вы привыкли. Конечно, вы проводите некоторое время, чтобы узнать основы — например, как сравнивать вещи, как вычислять длину строки или списка, как поместить элемент в словарь. Иногда я все еще ссылаюсь на документацию, но в целом все это легко запомнить на практике.
Интерпретация и динамическая типизация
Python является интерпретатором. Вы никогда не упоминаете тип объекта, как вы его объявляете или используете. Вы можете применить к объекту различные операции, это будет оценено во время выполнения. Существуют разные мнения (священные войны) относительно Static vs. Dynamic, но для меня с динамическими языками общая скорость разработки выше. Прежде всего, вы не тратите время на компиляцию, которая в случае больших решений может быть очень высокой. Во-вторых, поскольку вы можете проверять результаты только как выполненный код (даже если вы просто ошиблись при вводе имени переменной, вы узнаете об этом только при оценке этого раздела кода), вы больше сосредоточены на модульных тестах и TDD для выявления очевидных проблем. , что в целом делает разработку быстрее.
Встроенные типы
Python имеет полную встроенную систему типов. Для чисел вы можете использовать разные типы, как int, float, long, complex. Тип оценивается во время выполнения,
i = 0 # integer j = 1.0 # float x = complex(1, -1) # complex
Строки — это все внутри кавычек,
str = "I'm string"
Кстати, в ходе курса я пришел к выводу, что список является наиболее гибкой структурой данных. Все, что вам нужно, вы можете строить на списках. Списки хорошо обрабатываются с помощью Python,
l = [ 1, 2, 'three', [4, 5], [[6, 7], 8]
Списки неоптимальны для поиска, поэтому, если вы делаете много поисков, вы можете рассмотреть возможность использования словаря,
d = { 'one': 1, 'two': 2, 'three': [3] }
Каждый тип имеет свой собственный набор методов. Строки, включая общие операции, такие как конкатенация, обрезка, найденная подстрока и т. Д. Для списка и словарей есть множество полезных вещей, таких как получение итераторов, нажатие и извлечение элементов.
Синтаксис и стили кода
Синтаксис и стили кода обычно являются еще одной темой священной войны. К счастью, Python оставляет для этого очень мало места. Прежде всего — без точек с запятой. Во-вторых, Python использует отступы как часть синтаксиса языка. Таким образом, плохо с отступом код просто не будет работать.
1 2 3 4 5 6 7 8 9 10 11 12 |
def my_method_name (arg1, arg2): вернуть arg1 <arg2 # right def my_method_name (arg1, arg2): return arg1 <arg # не сработает! def my_method (arg1, arg2): если arg1 <arg2: вернуть arg1 + arg2 # right если arg1 == arg2: print arg2 # не будет работать! |
По сути, все, что после «:» должно быть с отступом. Это для тех случаев, когда, while, for и т. Д. Использование табуляции вместо фигурных скобок (или любого другого символа или термина) действительно хорошая идея, позволяющая сохранить код в том же формате и «навязать» единые и твердые рекомендации по коду вдоль проектов и команды.
Что мне не понравилось в Python …
Нет идеальных вещей, более того, идеальных языков. У разработчиков есть свои привычки и мнения на разные вещи. В Python я вижу несколько вещей, которые меня немного смущают.
Согласованность имен
Похоже, что Python принимает стили кода C для именования методов и переменных, таких как longes_cycle или def make_it_work (). Но на самом деле многие методы нарушают эти правила. Например, некоторые методы типа словаря: fromkeys (), iteritems (), setdefault (). В то же время dict содержит метод: has_key ().
Это очень раздражает. Особенно, если у вас нет IDE с именами, это очень сложно запомнить.
Booleans и None
Почти так же, как в теме выше. Имея язык C-стиля (с более низким первым символом), дизайнеры языка решили иметь особые случаи.
a = True # why not true ? b = False # why not false ? x = None # none ?
Таким образом, в коде, который является в общем случае строчными буквами, эти True / False / None выглядят действительно странно.
def proc3(input_list): if len(input_list) == 0: return None for i in range(0, len(input_list)): for j in range(0, len(input_list)): if input_list[i] == input_list[j] and i != j: return False return True
ОО, но не ОО
Будучи ОО-языком, Python по-прежнему опирается на некоторые процедурные понятия. Хорошим примером является вычисление длины строки. Я ожидаю, что эта строка соответствует методу len () или чему-то еще, но вместо этого у нас есть глобальная функция, которая делает это.
s = "I'm string" print len(s) # why not s.len() ?
len () перегружен для других типов, он также будет работать для списка и словарей,
l = [1, 2, 3] d = { 1: 1, 2: 2, 3: 3 } print len(l) print len(d)
Таким же образом, если вам нужно получить обратный итератор для коллекции, я бы предположил, что существует соответствующий метод, который возвращает этот итератор. Плохое предположение,
l = [1, 2, 3] for e in reverse(l): # why l.reverse() print e
__init__() method
Trying out classes in Python first you need to understand is how to construct an object. Python has constructor, that look like that,
class MyClass: def __init__(self, a, b): self.a = a self.b = b
I could understand it would be init or _init or constructor, but I will probably never understand __init__ with 2 underscores before and after. It’s ugly.
Conclusion
I’m about to enroll to next Udactity courses, so my Python journey continues. I hope to get more in language and standard library.