Что Вам жаль, что Вы не знали о том, когда Вы начали изучать Python? [закрытый]

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

я предлагаю пример

file = create-some-file();
_throwExceptionIf( file.exists() == false, "FILE DOES NOT EXIST");

против

file = create-some-file();
ASSERT(file.exists());

, Как приложение обработало бы утверждение? Я предпочитаю старое try catch метод контакта с фатальными ошибками.

47
задан SilentGhost 16 November 2009 в 14:12
поделиться

28 ответов

Я изучал Python еще до выпуска 1.5.2, поэтому то, что было для меня ключевым в то время, возможно, не было ключевые вещи сегодня.

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

Сам язык небольшой и простой, но пока вы не знакомы со встроенными модулями и «основными частями» стандартной библиотеки (например, в настоящее время sys , itertools , коллекции , копия , ...), вы » Я буду изобретать велосипед снова и снова. Итак, чем больше времени вы потратите на ознакомление с этими частями, тем более плавным будет ваш прогресс. Каждый раз, когда у вас есть задача, которую вы хотите выполнить, которая, похоже, напрямую не поддерживается языком, сначала спросите себя: какие встроенные модули или модули в стандартной библиотеке сделают задачу намного проще или даже сделают все это для меня? Иногда их не бывает, но чаще всего вы найдете отличные решения, если будете придерживаться этого мышления.

какие встроенные модули или модули в стандартной библиотеке значительно упростят задачу или даже сделают все за меня? Иногда их не будет, но чаще всего вы найдете отличные решения, если будете придерживаться этого образа мышления.

какие встроенные модули или модули в стандартной библиотеке значительно упростят задачу или даже сделают все за меня? Иногда их не бывает, но чаще всего вы найдете отличные решения, если будете придерживаться этого мышления.

57
ответ дан 26 November 2019 в 19:07
поделиться

За многоядерностью было будущее. Все еще люблю Python. Он пишет за меня значительную часть моего кода.

0
ответ дан 26 November 2019 в 19:07
поделиться

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

О чем мне хотелось бы узнать раньше: о том, что использование идиом Python в коде (например, понимание списков вместо циклов по спискам) было быстрее.

0
ответ дан 26 November 2019 в 19:07
поделиться

Мне очень нравится понимание списков и все другие полуфункциональные конструкции. Мне жаль, что я не знал их, когда я был в моем первом проекте Python.

0
ответ дан 26 November 2019 в 19:07
поделиться

Хотел бы я сразу знать, как идиоматически кодировать на Python. Вы можете выбрать любой язык, который вам нравится, и начать кодировать на нем, например C, Java и т. Д., Но в идеале вы научитесь кодировать в «духе» этого языка. Python особенно актуален, поскольку я думаю, что у него есть свой собственный стиль.

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

Наслаждайтесь!

1
ответ дан 26 November 2019 в 19:07
поделиться

Когда я начал с python, начал с основных методов из примеров. Это произошло потому, что я ничего не знал, после этого я нашел это о том, как создать лучший основной метод.

3
ответ дан 26 November 2019 в 19:07
поделиться

Одной из самых крутых вещей, о которых я недавно узнал, был модуль команд:

>>> import commands
>>> commands.getoutput('uptime')
'18:24  up 10:22, 7 users, load averages: 0.37 0.45 0.41'

Это похоже на os.popen или os.system, но без всех предупреждений об устаревании.

И давайте не забывать PDB (отладчик Python):

% python -m pdb poop.py
3
ответ дан 26 November 2019 в 19:07
поделиться

Хотел бы я хорошо знать функциональный язык. Немного поиграв с Clojure, я понял, что многие функциональные идеи Python заимствованы из Lisp или других функциональных языков

1
ответ дан 26 November 2019 в 19:07
поделиться
3
ответ дан 26 November 2019 в 19:07
поделиться

Переход в интерактивный режим в IPython

from IPython.Shell import IPShellEmbed
ipshell = IPShellEmbed()
ipshell()
3
ответ дан 26 November 2019 в 19:07
поделиться

Я реализовал множество рекурсивных обходов каталогов вручную, прежде чем узнал о os.walk ()

4
ответ дан 26 November 2019 в 19:07
поделиться

Если вы учитесь по хорошей книге, она не только научит вас языку, но и научит распространенным идиомам. Идиомы очень полезны.

Например, вот стандартная идиома для инициализации экземпляра класса списком:

class Foo(object):
    def __init__(self, lst=None):
        if lst is None:
            self.lst = []
        else:
            self.lst = lst

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

Некоторые идиомы защищают вас от непреднамеренных эффектов; некоторые помогут вам добиться максимальной производительности от языка; а некоторые - всего лишь мелочи стиля,

4
ответ дан 26 November 2019 в 19:07
поделиться

Закрытия. Чисто и кратко, без необходимости прибегать к использованию шаблона стратегии в отличие от таких языков, как Java

4
ответ дан 26 November 2019 в 19:07
поделиться

Составьте список , если вы переходите на Python только что (не из более ранней версии).

4
ответ дан 26 November 2019 в 19:07
поделиться

Декораторы. Написание собственного - это не то, чем вы, возможно, захотите сразу заняться, но зная, что @staticmethod и @classmethod доступны с самого начала (и разница между тем, что они делают), это реальный плюс.

13
ответ дан 26 November 2019 в 19:07
поделиться

Наиболее полезно: Dive Into Python . Как отмечает комментатор, если вы изучаете Python 3, Dive Into Python 3 более применимо.

Известно о более раннем: virtualenv .

5
ответ дан 26 November 2019 в 19:07
поделиться
  • с помощью help () в оболочке для любого объекта, класса или пути
  • вы можете запустить код импорта; code.interact (local = locals ()) в любом месте вашего кода, и он запустит оболочку python именно в этой точке
  • , вы можете запустить python -i yourscript.py , чтобы запустить оболочку в конце yourscript.py
7
ответ дан 26 November 2019 в 19:07
поделиться

Что кортеж одного элемента должен заканчиваться запятой, иначе он не будет интерпретирован как кортеж.

pprint () очень удобен (да, 2 p)

reload () полезен, когда вы повторно тестируете модуль, одновременно внося множество быстрых изменений в зависимый модуль.

И выучите как можно больше распространенных «идиом», иначе вы будете биться головой в поисках лучшего способа что-то сделать, когда идиома действительно считается лучшим способом (например, уродливые выражения вроде ' '.join () , или ответ на вопрос, почему нет функции isInt (string) .... ответ в том, что вы можете просто обернуть использование «возможного» целого числа с помощью попытки : а затем перехватить исключение, если это недействительный int. Решение работает хорошо, но когда вы впервые сталкиваетесь с этим, это звучит как ужасный ответ, поэтому вы можете потратить много времени, убеждая себя, что это действительно хороший подход.

Это некоторые вещи, на которые я потратил несколько часов моего времени, чтобы определить, что мой первый набросок некоторого кода, который казался неправильным, действительно был приемлемым.

Показания с сайта python.org:[12122ghthttp://wiki.python.org/moin/BeginnerErrorsWithPythonProgramming http://wiki.python.org/moin/PythonWarts[12124 provided

5
ответ дан 26 November 2019 в 19:07
поделиться

Узнайте, как использовать iPython У него есть завершение табуляции. Просмотрите все элементы в вашем пространстве имен с помощью «whos».

После импорта модуля легко просмотреть код:

>>> import os
>>> os?? # this display the actual source of the method
>>> help() # Python's interactive help. Fantastic!

Большинство модулей Python хорошо документированы; Теоретически вы можете изучить iPython, а все остальное, что вам нужно знать, можно изучить с помощью того же инструмента.

iPython также имеет режим отладки, pdb (). Наконец, вы даже можете использовать iPython в качестве командной строки с поддержкой Python. Базовые команды UNIX работают как% magic методы. Могут быть выполнены любые команды, которые не являются волшебными:

>>> os.system('cp file1 file2')
17
ответ дан 26 November 2019 в 19:07
поделиться

Не используйте имена переменных, которые являются типами. Например, не называйте переменную "файл" или "dict"

16
ответ дан 26 November 2019 в 19:07
поделиться

я предпочитаю

kill -9 `cat pid`

, который будет работать для любой команды в обратных кавычках.

20
ответ дан 26 November 2019 в 19:07
поделиться

Две вещи, вызывающие спазмы мозга. Один из них не относится к Python 3.

a = 095

Не работает. Почему? Начальный ноль - восьмеричный литерал. Число 9 в восьмеричном литерале недопустимо.

def foo( bar=[] ):
    bar.append( 1 )
    return bar

Не работает. Почему? Изменяемый объект по умолчанию используется повторно.

25
ответ дан 26 November 2019 в 19:07
поделиться

Понимание списка (аккуратное создание списка):

[x for x in y if x > z]

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

(x for x in y if x > z)
28
ответ дан 26 November 2019 в 19:07
поделиться
  1. Хотел бы я не знать Java.
  2. Более функциональное программирование. (см. модуль itertools, понимание списка, map (), reduce () или filter ())
33
ответ дан 26 November 2019 в 19:07
поделиться

Хорошая печать:

>>> print "%s world" %('hello')
hello world

% s для строки

% d для целого числа

% f для числа с плавающей запятой

%. Xf для ровно x количества десятичных знаков числа с плавающей запятой. Если число с плавающей точкой меньше указанного, то добавляются нули

1
ответ дан 26 November 2019 в 19:07
поделиться

Завершение табуляции и общая поддержка строки чтения, включая истории, даже в обычной оболочке python.

$ cat ~/.pythonrc.py 
#!/usr/bin/env python

try:
    import readline
except ImportError:
    print("Module readline not available.")
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

    import os
    histfile = os.path.join(os.environ["HOME"], ".pyhist")
    try:
        readline.read_history_file(histfile)
    except IOError:
        pass
    import atexit
    atexit.register(readline.write_history_file, histfile)
    del os, histfile

, а затем добавление строки в ваш .bashrc

export PYTHONSTARTUP=~/.pythonrc.py

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

Генераторы и список понимание более полезно, чем вы думаете. Не игнорируйте их.

2
ответ дан 26 November 2019 в 19:07
поделиться

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

2
ответ дан 26 November 2019 в 19:07
поделиться

Последовательный импорт перезаписывается:

Если вы импортируете два файла следующим образом:

from foo import *
from bar import *

Если и foo.py, и bar.py имеют функцию с именем fubar (), импортировав файлы, это Таким образом, когда вы вызываете fubar, будет выполнен fubar, как определено в bar.py. Лучший способ избежать этого - сделать следующее:

import foo
import bar

и затем вызвать foo.fubar или bar.fubar. Таким образом, вы ВСЕГДА знаете, какое определение файла fubar будет выполнено.

2
ответ дан 26 November 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: