Python

Материал из Lurkmore

Перейти к: навигация, поиск
«

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

»
— бездна Баша
«

Сижу, разглядываю листинг на Питоне. Отец, глянув издалека на монитор, спрашивает: Маяковского читаешь?

»
Bashorgrufavicon.png406082
Удав же!
Я попробовал разные препараты из фармшкафа, но думаю, что это питон. (xkcd)

Содержание

class Python(PL):

Python ([ˈpaɪθən], рус. Питон) — скриптовый язык программирования, созданный неким Гвидо ван Россумом (ныне сотрудник Dropbox). Назван так, по словам самого Гвидо, в честь шоу Monty Python. Наиболее знаменитая отличительная черта языка — использование отступов для выделения блоков кода и управляющих структур.

Чтобы его изучить, достаточно ознакомиться с туториалом и полистать код пары-тройки опенсорсных программ. Язык крайне простой и скромный на выразительные средства сравнительно c Ruby или Perl (один из элементов идеологии — надо программы писать, а не самовыражаться затейливо). Но на самом деле предоставляемые возможности достаточно широки, чтобы надолго увлечься данным языком. При достаточном желании и отсутствии перманентного отрицания (в духе «всё хуйня кроме пчел») есть вероятность научиться писать годный, сопровождабельный и продаваемый код.

Основной причиной вышеупомянутого отрицания обычно бывает «магия отступов»: в отличие от многих языков, в которых можно, но не обязательно индентить код, в питоне написать код лопатой невозможно в принципе — отступы прямо влияют на вложенность выражений. Сторонники считают, что это удобнее, чем фигурные скобки, а заодно положительно влияет на читаемость кода, дисциплинирует программистов и отбрасывает кодирующих обезьян. Противники обзывают его «пиздоном» и пилят код на PHP.

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

  • анонимные функции (лямбды) могут состоять только из одного выражения;
  • «reduce()» (аналог foldl из Haskell) убран в закрома стандартной библиотеки и не рекомендуется к применению из-за «плохой читаемости кода»;
  • отсутствует Pattern Matching: всё-таки, это императивный язык;
  • Гвидо считает ненужной поддержку хвостовой рекурсии, ибо уже есть циклы;
  • невозможно потоками параллелить программу по нескольким процессорам/ядрам: вместо потоков надо использовать модуль multiprocessing или другие интерпретаторы питона (например, PyPy).

Бесит взрослое поколение, ибо невозбранно позволяет оттяпать себе пальцы, пройтись по граблям или прострелить ногу:

  • объявление переменной при первом присваивании ей значения: если опечатался и создал не то — радуйся спиду;
  • глобальное состояние: даже можно менять поля в объектах снаружи (коварный питон вначале бездействует);
  • ссылки на функции: он не мешает создать переменную «len» и подорваться при попытке вызвать «len()»;
  • отступы согласно стандарту PEP8 (см. ниже) должны быть в 4 пробела — а питон, даже третий, принимает любое число, и обязательно найдётся уебан, который смешает табы с пробелами.

Алсо, синтаксис с отступами и строчными буквами ни разу не совместим с традиционными шрифтами для программистов (такими, как Terminus), но любивен на «Маках», где используются сжатые шрифты (такие, как Lucida Grande). Отсюда мораль: сильнее сжимайте шрифты.

Питон прост. Он очень прост. Он феерически прост. Например, поиск простых чисел:

def f(x):
    for y in xrange(2, x):
        if not x % y:
            return False
    return True
 
U = filter(f, xrange(2, 40))

И версия для настоящих ЯП военов:

# Я могу найти все простые числа от 0 до х. А ты?
U = lambda x: filter(lambda y: all(map(lambda z: y % z, range(2, 1 + int(y ** 0.5)))), range(2, x))

Православная версия 3-го уровня, без всяких задрот-лямбд:

#скорость в питоне не главное ;), хотя дядя Лутц говорит, что генераторы быстрее в данном случае
def optimus_prime(val):
    return [x for x in range(2,val+1) if all((x%y for y in range(2,1+int(x**0.5))))]

И очень забавные бегущие цифры на вашем мониторе:

import time # тут библиотека времени
import math # а вот это считает корни и прочий матан
 
out = open('outfile.txt', 'w') # ясно же, что с файлом работать будем
out.write('Первый нах посчитал от 1 and 10 000\n-----\n А чего добился ты ?\n')
start = time.clock()
print("2\n3\n5\n7\n11\n13\n17\n19\n23\n")
out.write( "2\n3\n5\n7\n11\n13\n17\n19\n23\n") ## Это выкидывает перечисленные числа сразу, это круто, экономит нам 0.04 секунды при расчёте до 1000000
for i in range(29, 1000000, 2):
	if ( 
	i % 2 ==  0 or # |(                                                         )
	i % 3 ==  0 or # |(                                                         )
	i % 5 ==  0 or # |(                                                         )
	i % 7 ==  0 or # |(   быстренько проверим на первые простые,                )
	i % 11 == 0 or # |(   массив можно продолжать до усрачки                    )
	i % 13 == 0 or # |(                                                         )
	i % 17 == 0 or # |(                                                         )
	i % 19 == 0 or # |(                                                         )
	i % 23 == 0    # |(                                                         )
	):
		continue
	# если реально похоже на простое, подозрительно щуримся и проверяем его решетом ->	
	else:
		for j in range(29, int(math.sqrt(i) + 1), 2): # нафиг все чётные, да и считать можно с 29
			if i % j == 0:
				break
		else:
			print(i)
			out.write(str(i) + "\n")
 
finish = time.clock()
print(finish - start)
out.write('Program work at ' + str(finish - start) + ' second') # тут запишем время выполнения
out.close() #файлы после окончания всех манипуляций, вроде как, надо закрывать

Шах и мат.

class Python3(LessFail, Python):

Python 3 = новая версия того же языка от того же автора. Исправляет некоторые недочёты предыдущей версии, например:

  • любые попытки сконвертировать байты в юникод и обратно без указания кодировки будут вызывать исключение;
  • появилась возможность указывать хинты для типов аргументов функций;
  • улучшена библиотека коллекций. Теперь питон настолько гибкий — что из рук выскальзывает!
  • строковые шаблоны используют модный синтаксис в стиле C# вместо старого C-подобного синтаксиса;
  • добавлен новый слой I/O, позволяющий работать с файлами так же, как в Java и C#;
  • и просто все патчи делаются для тройки, и только треть бэкпортится на двойку (можно спокойно наткнуться на баг 2007 года, который на 3 запатчен, а на 2 — не нужно).

Однако лулз в том, что хотя Python3 отрелизили в 2008 году, многие продолжают лабать на ветке 2.*. А суть тут в нарушении обратной совместимости между 2.* и 3.0, особенно из-за строк. Под 3.0 надо писать кучу новых либ, или переделывать старые и танцевать с бубном. А под 2.* всё уже и так есть, и по сравнению с этим геморроем по переносу всех наработок сообщества профит от фикса нескольких костылей старой версии — неочевиден.

[править] другие_фичи = [

  • Любовь питонистов к подчеркиваниям вылилась в использование последних в названиях многих переменных: _protected, __private, __магических__ и просто_плохо_названных_очень_длинных_потому_что_так_получилось_.
  • PEP-0008 (рус): документ, описывающий стилистические особенности кода на питоне, которые должен соблюдать любой программист, чтобы не быть анально покаранным. Для проверки кода на соответствие есть специальная утилита.
  • Dive into Python: универсальная книга, позволяющая любому выучить питон и получать такую зарплату, шо все бабы будут теч.
  • Будучи скриптовым языком, Питон медлителен. Для борьбы с этим используются: специальный транслятор для написания шустрых модулей к питону Cython, экспериментальный JIT-компилятор PyPy и прочее, тысячи их.
  • На самом деле, CPython является виртуальной машиной со встроенным компилятором ЯП Python. Никто не мешает делать компиляторы других языков в байткод питона, хоть это и не нужно.
  • Питон-фаги любят описывать свой стиль написания программ как Pythonic и говорить, что они следуют Python Way. Некоторые кодеры реагируют на это мемом «Python way? No way!».
  • Python, наряду с C++, Java и Go — один из языков, принятых к использованию в Google.

]

def __cult__(self, self, self, self, self, self, self, cls):

Табы лучше, чем пробелы

Существует культ Питона, называемый «Дзеном Питона» (The Zen of Python). Автором этих постулатов считается Тим Пейтерс. Основные постулаты:

Красивое лучше, чем уродливое. Явное лучше, чем неявное. Простое лучше, чем сложное. Сложное лучше, чем запутанное. Плоское лучше, чем вложенное. Разреженное лучше, чем плотное. Читаемость имеет значение. Особые случаи не настолько особые, чтобы нарушать правила. При этом практичность важнее безупречности. Ошибки никогда не должны замалчиваться. Если не замалчиваются явно. Встретив двусмысленность, отбрось искушение угадать. Должен существовать один — и, желательно, только один — очевидный способ сделать это. Хотя он поначалу может быть и не очевиден, если вы не голландец.[1] Сейчас лучше, чем никогда. Хотя никогда зачастую лучше, чем прямо сейчас. Если реализацию сложно объяснить — идея плоха. Если реализацию легко объяснить — идея, возможно, хороша. Пространства имён — отличная штука! Будем делать их побольше.

BTW, эти строки можно увидеть введя в интерпретаторе "import this"

def __см__также__(self):


Примечания

  1. Намёк на национальность создателя языка, а не на то, что вы подумали.


Источник — «https://lurkmore.net/Python»