Подтвердить что ты не робот

Python: Я что-то упустил?

Я занимаюсь изучением Python при реализации скриптов сборки и т.д. И на данный момент все работает нормально, так как скрипты делают то, что им нужно делать. Но у меня такое чувство, что у меня что-то не хватает, например "Путь Питона". Я знаю, что скрипты для сборки и скрипты для склеивания - не самая захватывающая разработка, и вряд ли она может быть кандидатом на раскрытие истинной силы Python, но мне все же нравится возможность раздуть мой мозг. Я разрабатываю в основном в С#, и я нахожу, что мой код Python очень похож по структуре и стилю на мой код С#. Другими словами, я чувствую, что я думаю в С#, но пишу в Python.

Я действительно что-то пропустил?

(Примечание: я понимаю, что это не столько вопрос программирования, но и довольно широкий, и, возможно, не будет окончательного ответа, так что измените меня в небытие, если вам нужно.)

4b9b3361

Ответ 1

Я бы рекомендовал вам прочитать Генераторы, Итераторы, itertools и, прежде всего, List Comprehensions.

Это столпы чего-то питонического. И для всего остального, PEP-8.

Прочитайте эти понятия и попробуйте использовать их там, где это необходимо. Все самое лучшее!

PS: Не забудьте import this;)

Добавление. Я также мог бы объединить некоторые отличные предложения, представленные другими в этой теме:

Ответ 2

Нет - это обычное явление для людей, которые переходят на Python с других языков C-типа. Я считаю, что вы ищете способы сделать свой код более "Pythonic" . Хорошей новостью является то, что чем больше Python вы напишете, тем больше станет Pythonic. Это естественное переполнение "как я могу сделать это более просто".

Еще одно хорошее место для поиска - Zen of Python. Такое отношение к развитию Python также поможет вам в этом отношении.

Ответ 4

Вы должны обязательно взглянуть на этот разговор, когда начнете выполнять системное программирование с помощью python: http://www.dabeaz.com/generators/

Ответ 5

Недавно я изучал/улучшал свой питон, решая проблемы Project Euler в python. Это сработало для меня очень хорошо, потому что:

  • Это весело и конкурентоспособно, поэтому я заинтересован в продолжении
  • Это заставляет меня использовать структуры данных python по-настоящему естественным образом для получения требуемой производительности, поэтому я многому научил меня спискам, наборам, строкам, итерациям и т.д.
  • Большинство проблем требуют меньше, чем страница кода для решения, поэтому у вас есть больше времени, чтобы подумать о полировке или переписывании более элегантным способом.
  • Python очень легко справляется с большими целыми числами, и поэтому он просто чувствует, как правильный язык использовать

Я бы рекомендовал это.

Ответ 6

Вы читаете Python, который вы не написали?

Здесь script из дистрибутива Python 2.6.1, который удаляет файлы .pyc и .pyo.

#!/usr/local/bin/python
"""Recursively zap all .pyc and .pyo files"""
import os
import sys

# set doit true to actually delete files
# set doit false to just print what would be deleted
doit = 1

def main():
    if not sys.argv[1:]:
        if os.name == 'mac':
            import EasyDialogs
            dir = EasyDialogs.AskFolder(message='Directory to zap pyc files in')
            if not dir:
                sys.exit(0)
            zappyc(dir)
        else:
            print 'Usage: zappyc dir ...'
            sys.exit(1)
    for dir in sys.argv[1:]:
        zappyc(dir)

def zappyc(dir):
    os.path.walk(dir, walker, None)

def walker(dummy, top, names):
    for name in names:
        if name[-4:] in ('.pyc', '.pyo'):
            path = os.path.join(top, name)
            print 'Zapping', path
            if doit:
                os.unlink(path)

if __name__ == '__main__':
    main()

Сколько идиом Python вы можете найти в этом?

Ответ 7

Подумайте вот так:

  • Если вы пишете слишком много для небольшой работы, что-то не так, это не питонов.

Самый код Python, который вы напишете, очень простой и прямой. Обычно вам не нужно много работать ни для чего простого. Если вы пишете слишком много, остановитесь и подумайте, есть ли лучший способ. (и так я многому научился в Python!)

Ответ 8

Чтобы добавить ответы Эндрю Харе и Байшампаяна Гоша...

Чтобы узнать, что идиома любого языка должна включать код чтения, написанный в этой идиоме. Я все еще изучаю идиому Python, но я прошел через это с другими языками. Я могу прочитать о списках, но лампочка только наступает, когда вы видите такие вещи в использовании и говорите: "Ух ты! Это потрясающе! Две строки кода, и это кристально ясно!" Так что найдите какой-нибудь пифонический код, который вам интересен, и начните его читать и понимаете. Знание останется в вашей голове лучше, если вы увидите все в контексте рабочей программы.

Ответ 10

Запишите некоторый код Python и опубликуйте его на SO для просмотра и обратной связи, является ли это pythonic.

Ответ 11

Изучите хорошо разработанные pythonic API/фреймворки. Некоторые из лучших живут за пределами стандартной библиотеки. Обратите внимание, что они позволяют вам не делать. Мои избранные:

  • py.test более pythonic, чем unittest (основанный на JUnit). Просто напишите test_foo() функцию вместо класса, наследующего от unittest.TestCase. Просто assert x == y вместо self.assertEqual(x, y). Еще много полезных...

    • Doctest также более pythonic, чем unittest. Многие отказываются от этого из-за некоторых практических неприятностей, но идея блестящая.

    • Если вы глубоко в тестировании, mock модуль action → assertion-подход более Pythonic, чем запись конкурирующих библиотек → парадигма воспроизведения.

  • requests - один из самых чистых API, которые я когда-либо видел, лучше, чем httplib + urllib + urllib2.

  • JSON и YAML более pythonic чем XML.

    • JSON-RPC более pythonic, чем XMLRPC или содрогните SOAP.

    • ElementTree - гораздо больше pythonic API, чем DOM. Оптимизируя теги, имеющие либо .text, либо дети, он уменьшает несоответствие импеданса структуры данных XML ↔ (но все равно может перемешивать смешанный контент с помощью взлома .tail).

  • Scapy - это удивительно тонкая структура для отправки и рассечения сетевых пакетов.

  • Я полагаю, что Storm - это самое пифоническое объектно-реляционное сопоставление. Отказ от ответственности: у меня почти нет опыта работы с ORM.

  • heapq - это прекрасно реализованный модуль. Просто прочитайте код.

  • itertools очень мощный. Прочтите все примеры в документации.
    Мнения варьируются в зависимости от того, широко ли он используется: pythonic или странный диалект: -)

Прочитайте "что нового в Python", по крайней мере, для последней версии, которую вы используете. Прочтите некоторые PEP. Поймите, почему изменения являются улучшением.

Наконец, убедитесь, что вы максимально используете интерактивный Python. Лучший способ изучить API - попробовать их и посмотреть, что произойдет! Многострочное редактирование, завершение и простой доступ к помощи() - обязательные функции - проверьте ipython (включая ноутбук!), Dreampie, bpython.

Ответ 12

В то время как скрипты сборки и сценарии подсказок [sic] на самом деле не являются самой захватывающей разработкой, они полностью являются кандидатом на раскрытие истинной силы Python.

Сначала рассмотрим различные make-подобные инструменты, уже написанные на Python.

Большая рыба в этом пруду - это Scons: http://www.scons.org/. Узнайте об этом.

В этом сообщении в блоге рассказывается об альтернативах http://farmdev.com/thoughts/46/the-python-make-tool/

"Мне все еще нужна возможность раздуть мой мозг" Начните с Google: найдите инструменты Python, которые уже выполняют некоторые или все то, что вы пытаетесь сделать. Код меньше, загрузите и прочитайте больше.

Ответ 13

Помимо таких вещей, как генераторы, итераторы, рекомендации по спискам и т.д., упомянутые другими людьми здесь, я хотел бы предложить пару более концепций, которые, как я чувствую, определенно добавляют ценность тому, кто пытается делать вещи "путинским" способом. Это декораторы и метаклассы.

Для Decorators этот ответ stackoverflow настоятельно рекомендуется, и для Meta Classes вы можете пройти .

Ответ 14

Я бы предложил найти персонального гуру-питона. Покажите им некоторые из вашего кода и попросите их пересмотреть/переписать его на идиоматический питон. Таким образом, вы будете просветлены.

Ответ 15

Чтобы эхо TLHOLADAY, прочитайте стандартную библиотеку. Это то, где "питонический" материал. Если вы не чувствуете себя хорошо, прочитайте источник для sqlachemy или django или вашего проекта по выбору.

Ответ 16

import this

Если вы можете поместить свой код рядом с Zen of Python и чувствовать себя хорошо, вы на полпути. Также проверьте этот модуль.: немного ирония.

Другая половина - это изучение таких вещей, как: регулярные выражения, списки, генераторы, метаклассы > , декораторы, список степпинга, с инструкцией, условное назначение сильные > , мощные встроенные элементы, такие как перечисление(), map(), zip(), reduce(), any() и pow() и многие другие (проверьте Скрытые функции Python)

По пути вы можете прочитать код других людей и изменить его.

Finnaly: узнайте о finally и import antigravity