Ответ 1
Во-первых, проверьте tgray и советы Лундстрема.
Затем, некоторые вещи, которые вы, возможно, захотите узнать:
-
Python динамически типизируется, поэтому, в отличие от С#, вы не будете тип проверки, но поведение. Вы можете захотеть google о утке типирование. Это означает, что вам не нужно иметь дело с боксом и распаковка.
-
Python полностью объектно ориентирован, но синтаксис не применять эту парадигму. Вы можете писать Python без использования слово "класс".
-
Библиотека GUI с Python не может сравниться с С#. Проверьте PyQt, GTK или wxPython библиотеки.
-
У Python есть много понятий, с которыми вы, возможно, не знакомы: список, генераторы ( "yield" существует в С#, но он не используется много), декораторы, метаклассы и т.д. Не Быть испуганным; вы можете программировать на Python без них. Oни это просто умные инструменты, а не обязательные.
-
Как и в С#, стандартная библиотека Python огромна. Всегда посмотрите на это, когда вы столкнетесь с какой-либо проблемой. Это больше всего вероятно, что кто-то решил его уже.
-
Python использует привязки LATE и метки переменных. Это слишком рано для кого-то, начиная с языка, чтобы волноваться об этом, но помните, что однажды вы столкнетесь с поведение с переменными, которые SEEMS нелогичны, и вы будете должны проверить это. На данный момент:
Просто не забудьте сделать следующее:
def myfunc(my_list=[]) :
# bla
Вместо
def myfunc(my_list=()) :
my_list = list(my_list)
И ты будешь хорош. Для этого есть веская причина, но это не точка: -)
-
Python - это кросс-платформа, нравится писать на Mac и работайте на Linux, если хотите.
-
Python не снабжен сложной IDE (вы получили IDLE:-)). Если вы являетесь зависимым от Visual Studio, проверьте Glade. Это не такой продвинутый, как Visual Studio, но он по-прежнему является хорошим RAD.
-
Если вы хотите создать некоторое веб-приложение на Python, помните, что Python не является .NET. Вы должны добавить веб-сайт рамки, если вы хотите сравнить. Мне нравится Django.
-
Для работы с Python не требуется огромная среда IDE. SciTE, Notepad ++, IDLE, Kate, gedit... Легких редакторов действительно достаточно.
-
Python применяет отступы, используя пробелы и разрывы строк, вы не можете это изменить. Вам следует избегать использования вкладок для отступы и выбор пространства вместо этого. Эквивалент пустые браслеты {} - это ключевое слово "pass".
-
Python не применяет частные переменные. Вы можете определить private var с использованием "__" (два символа подчеркивания) в начале имя переменной, но оно все еще недоступно в некоторых сложных пути. Python обычно предполагает, что программисты взрослые взрослые которые знают, что они делают и общаются.
-
Python использует итерацию. Много. Многое. И так Модуль itertools - лучший друг.
-
У Python нет встроенных делегатов. Модуль делегата не то, что вы думаете. Для программирования, управляемого событиями, используйте GUI lib (или код шаблона самостоятельно, это не так трудно).
-
У Python есть интерпретатор: вы можете тестировать почти все, жить. Он всегда должен быть рядом с вашим текстом редактор. Базовый интерпретатор Python не много, попробуйте IPython для чего-то вкусного.
-
Питон автодокументирован: используйте docstrings в своем собственном коде и проконсультируйтесь с другими, используя "help()" в интерпретаторе python
Основы модуля:
- sys: управлять функциями системы
- os: установка учетных данных, управление файловыми путями, переименование, рекурсивное перемещение файлов и т.д.
- shutil: обработка пакетного файла (например, рекурсивное удаление)
- re: regexp
- urllib и urllib2: HTTP¨scripting как загрузка, сообщение/получение resquests и т.д.
- datetime: манипулировать датой, временем и продолжительностью
- поток: вы догадываетесь об этом
- zlib: сжатие
- рассол: сериализация
- xml: разбор/запись XML с помощью SAX или DOM
Существуют сотни модулей. Наслаждайтесь.
Некоторые типичные способы делать вещи в Python:
Контуры:
Кодеры Python используют массово эквивалент foreach
С#
и предпочитаем его другим:
Основные итерации:
for item in collection:
print str(item)
"collection" может быть строкой, списком, кортежем... Любой iterable: любой объект, определяющий метод .next(). Есть много итераций в Python. Например: типичная идиома Python для чтения файлов:
for line in open("/path/to/file") :
print line
Ярлык для цикла for называется "понимание списка". Это способ создания новой итерации в одной строке:
Создание отфильтрованного списка со списком:
my_list = [item for item in collection if condition]
Создание нового списка со списком:
my_list = [int(item) * 3 for item in collection]
Создание нового генератора со списком:
my_list = (int(item) * 3 for item in collection)
То же, что и выше, но значения будут генерироваться на лету на первой итерации затем теряется. Подробнее об этом здесь.
Обычный для цикла
Если вы хотите выразить обычный цикл, вы можете использовать
xrange(). for (int i = 0; i < 5; i++)
становится:
for i in xrange(0,5) :
сделать в то время как эквивалентный
В Python нет "Do While". Я никогда не пропустил его, но если вы должны использовать эту логику, выполните следующие действия:
while True : # Yes, this is an infinite loop. Crazy, hu?
# Do your stuff
if condition :
break
Распаковка
Переменные переменных:
a, b = b, a
Несколько присваиваний:
Вышеизложенное является результатом того, что мы называем "распаковкой" (здесь применяется к кортежу). Простой способ объяснить это то, что вы может присваивать каждое значение любой последовательности непосредственно равному число переменных в одной строке:
animal1, animal2, animal3, animal4 = ["cow", "dog", "bird", "fish"]
Это имеет большое значение. Итерируя на многомерный массив, вы обычно получаете каждую подпоследовательность один за другим, затем используйте его, например:
agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")]
for person in agenda:
print person[0], person[1]
Но при распаковке вы можете напрямую присвоить значения переменные:
agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")]
for name, lastname in agenda:
print name, lastname
И поэтому, если вы хотите получить индекс во время итерации, Кодировщики Python используют следующие идиомы (enumerate() - это стандартная функция):
for index, value in enumerate(sequence) :
print index, value
Распаковка вызовов функций
Это расширенное использование, и вы можете пропустить его, если это вас беспокоит.
Вы можете распаковать значения, используя знак "*", чтобы использовать последовательность непосредственно в вызове функции. Например:
>>> foo(var1, var1, var3) :
print var1, var2
print var3
>>> seq = (3.14, 42, "yeah")
>>> foo(*seq)
3.14 42
yeah
Есть даже больше. Вы можете распаковать словарь как
именованные переменные и прототипы функций записи с помощью *
,
**
, чтобы принять произвольное количество аргументов. Но это не
используется достаточно, чтобы заслужить эту запись еще дольше: -).
Форматирование строки:
print "This is a %s on %s about %s" % ("post", "stackoverflow", "python")
print "This is a %(subject)s on %(place)s about %(about)s" % {"subject" : "post", "place" : "stackoverflow", "about" : "python"}
Нарезка итерации:
Вы можете получить любую часть итерации, используя очень сжатый синтаксис:
print "blebla"[2:4] # Print "eb"
last = string[:-1] # Getting last element
even = (0,1,2,3,4,5,6,7,8,9)[::2] # Getting evens only (third argument is a step)
reversed = string[::-1] # Reversing a string
Логические проверки:
Вы можете проверить, как вы работаете на С#, но есть "Pythonic" пути (короче, яснее: -)):
if 1 in (1, 2, 3, 4) : # Check en element is in a sequence
if var : # check is var is true. Var == false if it False, 0, (), [], {} or None
if not var : # Contrary of above
if thing is var: # Check if "thing" and "var" label the same content.
if thing is None : # We use that one because None means nothing in Python (almost null)
Комбо (напечатайте на одной строке все слова, содержащие "o" в верхнем регистре):
sentence = "It a good day to write some code"
print " ".join([word.upper() for word in sentence.split() if "o" in word])
Выход: "ХОРОШИЙ К НЕКОТОРОМУ КОДУ"
Легче просить прощения, чем разрешение
Питонные кодеры обычно не проверяют, возможно ли что-то. Они немного похожи на Чака Норриса. Они делают это. Затем поймайте исключение. Как правило, вы не проверяете, существует ли файл, вы пытаетесь его открыть и откат, если он не работает:
try :
f = open(file)
except IOerror :
print "no file here !"
Конечно, Чак Норрис никогда не использует исключений, так как он никогда не терпит неудачу.
Предложение else
"Else" - это мир многих применений в Python. Ты найдешь "else" после "if", но после "except" и "for".
for stuff in bunch :
# Do things
else :
# This always happens unless you hit "break" in the loop
Это работает для цикла while, даже если мы не используем этот петля.
try :
# A crazy stuff
except ToCrazyError :
# This happens if the crazy stuff raises a ToCrazyError Exception
else :
# This will happen if there is no error so you can put only one line after the "try" clause
finally :
# The same as in C#
Если вам интересно, вот куча передовых быстрых и грязный (но красивый) фрагменты Python.