Чтобы открыть «Дзен языка #Python», используйте команду import this .
Результат:
The Zen of Python, by Tim Peters (Тим Питерс «Дзен языка Python»)
Beautiful is better than ugly (Лучше красиво, чем некрасиво)
Explicit is better than implicit (Лучше явно, чем неявно)
Simple is better than complex (Простой код лучше, чем сложный)
Complex is better than complicated (Сложный код лучше, чем запутанный)
Flat is better than nested (Плоский код лучше, чем вложенный)
Sparse is better than dense (Разреженный код лучше, чем плотный)
Readability counts (Читаемостью нельзя пренебрегать)
Special cases aren't special enough to break the rules (Особые случаи не настолько особенные, чтобы нарушать правила)
Although practicality beats purity (При этом практичность важнее безупречности)
Errors should never pass silently (Ошибки никогда не должны замалчиваться)
Unless explicitly silenced (Замалчивать можно только явно)
In the face of ambiguity, refuse the temptation to guess (Встретив двусмысленность, отбрось искушение угадать)
There should be one-and preferably only one-obvious way to do it (Должен существовать один - и, желательно, только один - очевидный способ сделать что-либо)
Although that way may not be obvious at first unless you're Dutch (Он будет очевиден сразу, только если вы голландец)
Now is better than never (Сейчас лучше, чем никогда)
Although never is often better than *right* now (Хотя никогда зачастую лучше, чем прямо сейчас)
If the implementation is hard to explain, it's a bad idea (Если реализацию сложно объяснить - идея плохая)
If the implementation is easy to explain, it may be a good idea (Если реализацию легко объяснить - идея, возможно, хорошая)
Namespaces are one honking great idea-let's do more of those! (Пространства имен отличная штука! Давайте использовать их как можно больше!)
Результат:
The Zen of Python, by Tim Peters (Тим Питерс «Дзен языка Python»)
Beautiful is better than ugly (Лучше красиво, чем некрасиво)
Explicit is better than implicit (Лучше явно, чем неявно)
Simple is better than complex (Простой код лучше, чем сложный)
Complex is better than complicated (Сложный код лучше, чем запутанный)
Flat is better than nested (Плоский код лучше, чем вложенный)
Sparse is better than dense (Разреженный код лучше, чем плотный)
Readability counts (Читаемостью нельзя пренебрегать)
Special cases aren't special enough to break the rules (Особые случаи не настолько особенные, чтобы нарушать правила)
Although practicality beats purity (При этом практичность важнее безупречности)
Errors should never pass silently (Ошибки никогда не должны замалчиваться)
Unless explicitly silenced (Замалчивать можно только явно)
In the face of ambiguity, refuse the temptation to guess (Встретив двусмысленность, отбрось искушение угадать)
There should be one-and preferably only one-obvious way to do it (Должен существовать один - и, желательно, только один - очевидный способ сделать что-либо)
Although that way may not be obvious at first unless you're Dutch (Он будет очевиден сразу, только если вы голландец)
Now is better than never (Сейчас лучше, чем никогда)
Although never is often better than *right* now (Хотя никогда зачастую лучше, чем прямо сейчас)
If the implementation is hard to explain, it's a bad idea (Если реализацию сложно объяснить - идея плохая)
If the implementation is easy to explain, it may be a good idea (Если реализацию легко объяснить - идея, возможно, хорошая)
Namespaces are one honking great idea-let's do more of those! (Пространства имен отличная штука! Давайте использовать их как можно больше!)
Итак. Ты уже дружишь с питоном, тебе понравилось и пришла пора искать работу.
У меня собралось много вопросов с разных собеседований меня и моих знакомых на позицию trainee/junior python dev.
Начнем с начала
Вопросы по Python для питонистов-джуниоров
1️⃣ Базовые вопросы
Какие существуют типы данных в python 3?
Какие из них изменяемые, а какие нет?
Можно ли создать множество состоящее из других множеств?
Что нужно сделать с классом, чтобы он мог стать ключом словаря?
Как работает scope в python?
2️⃣ Вопросы о вашей мотивации в python
Почему Вы выбрали python?
В чем достоинства и недостатки python как языка общего назначения?
Для каких задач используется python?
Пробовали ли Вы python 2?
Отличие python 3 и python 2.
Что нового появилось в python 3.7?
Смотрели ли вы на python 3.8?
Дзен python помните?
3️⃣ Стандартная библиотека
Какие модули стандартной библиотеки вы использовали?
Что вы знаете про модули collections, pickle?
Как работает идея абстрактных классов в python?
4️⃣ Основные вопросы python
*args, **kwargs в python?
Можно ли в python сделать бесконечную рекурсию?
Анонимные функции в python
Итератор и генератор.
Генератор выражений
Магические методы.
Магические методы __new__ и __init__
Как работает __slots__?
Структура Exceptions в python 3.
Как под капотом реализован список и словарь в python.
Built-in functions в python.
Что значит, что объект сallable.
Что такое декоратор?
Встроенные декораторы
staticmethod, classmethod - в чем разница?
Может ли classmethod быть абстрактным в терминах python 3?
Менеджеры контекста
Как в питоне реализованы public, private и protected methods?
Как импортировать приватный метод из стороннего модуля?
Классы нового стиля в python.
5️⃣ Продвинутый python
Python сразу интерпретируется интерпретатором или есть промежуточный шаг?
Диамантовая проблема в python.
MRO в python 3.
Декораторы с параметрами
Написать менеджер контекста через класс и через функцию.
Дескрипторы
Метаклассы
Удачи! Тут еще нет, как минимум, большей части вопросов про ООП, шаблонам проектирования, web разработке, тестированию, многопоточности, devops, гиту, frontendу, python фреймворкам, базам данных и другим важным темам, но список уже получился большим.
Продолжение следует...)
У меня собралось много вопросов с разных собеседований меня и моих знакомых на позицию trainee/junior python dev.
Начнем с начала
Вопросы по Python для питонистов-джуниоров
1️⃣ Базовые вопросы
Какие существуют типы данных в python 3?
Какие из них изменяемые, а какие нет?
Можно ли создать множество состоящее из других множеств?
Что нужно сделать с классом, чтобы он мог стать ключом словаря?
Как работает scope в python?
2️⃣ Вопросы о вашей мотивации в python
Почему Вы выбрали python?
В чем достоинства и недостатки python как языка общего назначения?
Для каких задач используется python?
Пробовали ли Вы python 2?
Отличие python 3 и python 2.
Что нового появилось в python 3.7?
Смотрели ли вы на python 3.8?
Дзен python помните?
3️⃣ Стандартная библиотека
Какие модули стандартной библиотеки вы использовали?
Что вы знаете про модули collections, pickle?
Как работает идея абстрактных классов в python?
4️⃣ Основные вопросы python
*args, **kwargs в python?
Можно ли в python сделать бесконечную рекурсию?
Анонимные функции в python
Итератор и генератор.
Генератор выражений
Магические методы.
Магические методы __new__ и __init__
Как работает __slots__?
Структура Exceptions в python 3.
Как под капотом реализован список и словарь в python.
Built-in functions в python.
Что значит, что объект сallable.
Что такое декоратор?
Встроенные декораторы
staticmethod, classmethod - в чем разница?
Может ли classmethod быть абстрактным в терминах python 3?
Менеджеры контекста
Как в питоне реализованы public, private и protected methods?
Как импортировать приватный метод из стороннего модуля?
Классы нового стиля в python.
5️⃣ Продвинутый python
Python сразу интерпретируется интерпретатором или есть промежуточный шаг?
Диамантовая проблема в python.
MRO в python 3.
Декораторы с параметрами
Написать менеджер контекста через класс и через функцию.
Дескрипторы
Метаклассы
Удачи! Тут еще нет, как минимум, большей части вопросов про ООП, шаблонам проектирования, web разработке, тестированию, многопоточности, devops, гиту, frontendу, python фреймворкам, базам данных и другим важным темам, но список уже получился большим.
Продолжение следует...)
Python interning
Shared objects - ranges и специфические объекты неизменяемого типа которые CPython инстанцирует и загружает в память каждый раз при запуске интерпретатора
Более того, python умеет интернировать(кешировать ASCII символы, цифры или _ в памяти во время создания новой строки) строки меньше 20 символов
Это все помогает оптимизировать работу python.
Отсюда вывод:
Python что-то ускоряет, когда может:
Пример 1
Shared objects - ranges и специфические объекты неизменяемого типа которые CPython инстанцирует и загружает в память каждый раз при запуске интерпретатора
Более того, python умеет интернировать(кешировать ASCII символы, цифры или _ в памяти во время создания новой строки) строки меньше 20 символов
Это все помогает оптимизировать работу python.
Отсюда вывод:
Python что-то ускоряет, когда может:
Пример 1
>> a = 'ee'Пример 2
>> a[0] is a[1]
True
>> a='x'
>> b='x'
>> a is b
True
>> a = 'ΩΩ'Обычно python умеет делать много чего неявно, но его можно заставить...
>> a[0] is a[1]
False
>> a='Ω'
>> b='Ω'
>> a is b
False
>> a = 'I hate frontend'
>> b = 'I hate frontend'
>> a is b
False
>> import sys
>> c = sys.intern('I hate frontend')
>> d = sys.intern('I hate frontend')
>> c is d
True
>> c is a
False
Самый простой способ узнать про неявное интернирование - проверить id объекта.>> s='*'
>> for i in range(2):
.. s+='*'
.. print(id(s), s)
140277841241232 **
140277841241232 ***Требования к джуну оn разных компаний(Python)
https://docs.google.com/document/d/17mV7eQLGrGZB98psbPT9u4vN5b4Z_BUpO_2QrQvEonM/edit#heading=h.gjdgxs
https://docs.google.com/document/d/17mV7eQLGrGZB98psbPT9u4vN5b4Z_BUpO_2QrQvEonM/edit#heading=h.gjdgxs
Google Docs
Python_Jun_ожидания
Компетентности уровня junior для Python Компании Raccoon Gang SoftServe NIX 1. Знания основ программирования. + + + 1.1 Типы языков программирования, интерпретируемые, компилируемые; + + + 1.2 Понимание понятий - переменн...
Хочу обсудить питонячье понимание модификаторов доступа.
Модификаторы доступа помогают разделить методы и переменные на не предназначенные для внешнего использования, не рекомендуемые для использования из вне и предназначенные только для использования внутри.
Для этого используются нижние подчеркивания перед именем.
Переменная с даже одним
Чтобы получить доступ к переменной с нижнем подчеркиванием нужно явно указать ее при импорте, или внести в список
В питоне, если очень хочется, то можно сделать все. (Ну почти)
Даже достучаться к приватному методу)) Это называется name mangling - искажение имен.
На самом деле питон просто сохраняет имена начинающиеся с двух подчеркиваний немного иначе
Проверим
Модификаторы доступа помогают разделить методы и переменные на не предназначенные для внешнего использования, не рекомендуемые для использования из вне и предназначенные только для использования внутри.
Для этого используются нижние подчеркивания перед именем.
class Underscore:
def method():
return 'public method'
def _method(): # одно _ работает на уровне соглашения — означает, что лучше такую переменную не трогать из вне
return 'It is better not to use this method outside'
def __method(): # два __ - питон не даст явно вызвать такой метод из вне(AttributeError)
return 'private method'
Это была простая часть. Очень известная. Но есть более продвинутые штуки.Переменная с даже одним
_ - не импортируется звездочкойfrom module import *
Стандартно будут импортироваться только public methods.Чтобы получить доступ к переменной с нижнем подчеркиванием нужно явно указать ее при импорте, или внести в список
__all__ импортируемого модуля.from module import _var
*Кстати, питонисты используют нижнее подчеркивание в конце имени, чтобы избежать конфликтов имен. Про это читай в PEP8В питоне, если очень хочется, то можно сделать все. (Ну почти)
Даже достучаться к приватному методу)) Это называется name mangling - искажение имен.
На самом деле питон просто сохраняет имена начинающиеся с двух подчеркиваний немного иначе
class Magic:
def __private(self):
return 'I am private AF'
Попробуем вызвать методmagic = Magic()
magic.__private()
Получим ожидаемое:AttributeError: 'Magic' object has no attribute '__private'
На самом деле питон создал этот метод, но с именем _Magic__private, то есть долепил имя класса в имя, чтобы нельзя было переопределить метод точно так же в потомкеПроверим
magic.__Magic__private()
'I am private AF'
Питон искажает имена всех переменных, которые начинаются с двойного подчеркивания. Вот такой вот хак.Задачка
Почему это работает?
Почему это работает?
_MagicUnderscore__secret = 'Эта дичь сработает?'
class MagicUnderscore:
def magic(self):
return __secret
print(MagicUnderscore().magic())
ВернетЭта дичь сработает?
Подумай, почему оно так работает?Сегодня решил поговорить про lambda functions в python.
Как мы знаем, в питоне все - объекты. Даже функции. А если объект может существовать без имени, то и функция может просто можно работать с функцией как с объектом.
Простой пример
Так и часто и используют, как аргументы функций. Простой пример:
Сначала все просто, as always.
Но у питона свои особенности, как всегда и их стоит учитывать.
Lambda функции в питоне живут в nonlocal пространстве и умеют запоминать свой контекст.
Пример
Важно не использовать lambda функции просто так.
Я видел код вида
lambda функция - анонимная функция(у которой нет имени)Как мы знаем, в питоне все - объекты. Даже функции. А если объект может существовать без имени, то и функция может просто можно работать с функцией как с объектом.
Простой пример
def hello(me, name):Ничто иное как
return f'Hello from {me}, {name}!'
hello = lambda me, name: f'Hello from {me}, {name}!'
В общем, ничего сложного - просто функции одного выражения. Кратко и удобно, можно сразу отправлять такую lambda, как аргумент в функцию.Так и часто и используют, как аргументы функций. Простой пример:
sorted(range(-5, 6), key=lambda x: x * x)Но все же чаще функции побольше, их удобнее читать в стандартном формате.
Сначала все просто, as always.
Но у питона свои особенности, как всегда и их стоит учитывать.
Lambda функции в питоне живут в nonlocal пространстве и умеют запоминать свой контекст.
Пример
def hello(me):Вернет
return lambda name: f'Hello from {me}, {name}!'
greeting = hello('Jack')
greeting('Kate')
'Hello from Jack, Kate!'То есть lambda помнит переменные своего подпространства (me), связана с ними и может их использовать.
Важно не использовать lambda функции просто так.
Я видел код вида
class Hello:Это может показаться короче, но читать и поддерживать такой код сильно сложнее, к сожалению.
greet = lambda self: print('Hello')
После простой теории надо давать убийственные примеры, а то скучно.
names = ['Jack', 'Michael', 'Kate', 'Jimmy', 'Python']
def greetings():
return [lambda me: f'Hello from {me}, {name}!' for name in names]
for greeting in greetings():
print(greeting('Creator'))
ВернетHello from Creator, Python!
Hello from Creator, Python!
Hello from Creator, Python!
Hello from Creator, Python!
Hello from Creator, Python!
Подумай, почему оно так работает?Если в python3
s = 'f(φ)==f(φ)'
тоs[1] is s[7], s[2] is s[8]
Вернетisinstance((), tuple)
isinstance((1), tuple)
isinstance((1,2), tuple)
isinstance((1), tuple)
isinstance((1,2), tuple)
Anonymous Poll
38%
True True True
0%
True True False
2%
True False False
25%
True False True
8%
False True True
2%
False True False
25%
False False True
2%
False False False