Import this python что это
Перейти к содержимому

Import this python что это

  • автор:

import this

A point module may have the following function (among others):

Python is Object Oriented

What do classes look like?

Python is Object Oriented

Public, Internal or Private?

  • Python has no notion of member visibility — all class members are public
  • By convention, variables prefixed with a single underscore (_) are «internal»
  • By convention, variables prefixed with double underscore (__) are «private» (and mangled)
  • Use these conventions when writing your classes so others will understand your intentions

Python is Object Oriented

Special Methods

  • Pythonic implementation of «operator overloading»
  • Special method names start and end with double underscores (__)
  • Do not use this convention for any of your own variables/methods
  • Examples:
    • __init__ – Constructor
    • __del__ – Destructor
    • __str__ – Return a string representation (e.g. via str() )
    • __getattr__ – Called when looking up an attribute value on the object

    Python is Object Oriented

    What about modules?

    Modules are a kind of encapsulation for structural organization:

    • A module is an executable block of code — file = module
    • Modules define common classes/functions/constants as a single object
    • All objects defined or imported into a module are «global» to the module
    • Statements are executed when the module is imported (or when used as a script)

    Python is Object Oriented

    What about modules?

    Why shouldn’t you rely on modules for data encapsulation:

    • Code is executed only once: the first time the module is imported
    • Modules are singleton objects — change any module data, you change it everywhere
    • Testing, mocking and other frameworks are more difficult to implement for modules than classes

    Python is Object Oriented

    Exceptions

    There are some notable exception when writing modules is better than writing classes:

    • Writing a library of utility functions
    • Quick scripts for one-and-done jobs (e.g. system administration)
    • Using most web frameworks that rely on global state information:
      • Request and response objects (among others) are often globals
      • Routing (OOTB) doesn’t understand how to route methods

      Python is Object Oriented

      How do you know if you should be using classes? Look for the following signs:

      • Making use of global data
      • Repeated passing of data to module functions
      • Managing your own state information for common data structures
      • Using copies of modules to avoid tainting internal variables

      Running Scripts

      • Executing a Python script will execute all code in the global scope
      • Importing a script/module will also execute all code in the global (module) scope
      • Use the following idiom to make your code importable, but also executable: (at the bottom of the module)

      Putting It All Together

      Hangman Example

      Class based example
      hangman.py

      «import this» © 2013 by Nicholas Borko

      Available on GitHub:

      • This presentation: http://nborko.github.io/python-import-this/
      • Source code: https://github.com/nborko/python-import-this/

      Creative Commons Logo for BY-NC-SA «import this»
      Presented by Nick Borko

      Deciphering Python’s “import this”

      Adam Oudad

      Among well known Easter eggs, Python embeds a library for displaying its famous PEP 20, called Zen of Python, which consists in 19 aphorisms giving guidelines to Python programmers.

      Print Zen of Python

      You can print the 19 aphorisms by simply importing this .

      Deciphering Zen of Python

      There is actually more to this . Four variables are provided by the module: this.c , this.d , this.i , and this.s . this.s contains an encrypted version of Zen of Python, using a permutation of the alphabet, that can be recovered in this.d dictionary. print(this.s) gives

      Let’s decipher it

      Conclusion

      That’s it for this amusing easter egg! As parting note, to understand how Zen of Python embeds the philosophy of Python, consider “practicality beats purity”. This statement takes shape in the design of the len function, which is an exception among special methods, as it can be used as such, for practicality reasons, when implementing your own classes, but is implemented to a C++ level when used on basic data structures such lists, sets and dictionaries, for speed.

      Purpose of import this

      So what actually is the purpose of this (IMO) useless module? Has Guido Van Rossum ever said why he included it?

      caird coinheringaahing's user avatar

      1 Answer 1

      To quote from the Python Enhancement Proposal (PEP) associated with this: https://www.python.org/dev/peps/pep-0020/

      "Long time Pythoneer Tim Peters succinctly channels the BDFL’s guiding principles for Python’s design into 20 aphorisms, only 19 of which have been written down."

      Thus, the stated purpose of this module is to spell out guidelines to related to the development of Python code.

      Following these guidelines will likely improve the readability, usability and maintainability of Python code. None of which seem "useless".

      NOTE 1: the code that produces this list of guidelines purposely breaks most of them. = )

      NOTE 2: BDFL stands for Benevolent Dictator for Life and referred to Guido van Rossum, the developer of Python.

      If you are interested in learning more about the internal workings of the this module, see this stackoverflow post: Attributes of Python Module This.

      Философия Python, прятно удивила: ⁠ ⁠

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

      какой-то не Unix-way. Поэтому я выбираю Perl.

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

      Читать ещё на Пикабу

      Ответ на пост «Без рейтинга. Самообучение PHP или курсы»⁠ ⁠

      По PHP не подскажу. ЯП много и выбор в целом не однозначен. Но выбирать технологию следует с оглядкой на
      1. популярность. Чем популярнее, тем больше мануалов, помощи везде и всё такое
      2. сообщество. Мануалы нужны хорошего качества, иначе найденные решения будут учить плохому
      3. применимость. У каждого инструмента своя область

      по пункту 1 можно ориентироваться на рейтинги. Сами по себе рейтинги мало что говорят, но вот динамика подсказывает. Смотрим TIOBE. На скрине ниже выделены python, java и PHP.

      Ответ на пост «Без рейтинга. Самообучение PHP или курсы» PHP, Языки программирования, Самообразование, Python, Текст, Разработка, Обучение, Программирование, IT, SQL, Telegram, Ответ на пост, Длиннопост

      Нисходящий тренд PHP должен вызывать настороженность. Стоит ли выбирать инструмент, у которого было 10% рынка, а теперь 1.5?

      более того, по пункту 2 — сообщество у PHP большие проблемы. В плане там слишком много legacy, очень много плохих подходов, переход на PHP7 вызвал большой раскол и вообще всё не очень хорошо. Имеет смысл идти в PHP, только если у вас есть хороший ментор. Перенять крутой опыт в любой технологии полезно.

      Про курсы. Материала куча всякого разного. Рекомендую ориентироваться на крутые книги, добавлять статьи + видеоматериалы по теме. Можно посмотреть на бесплатные или недорогие платные курсы. Курсы типа за 120к в целом имеют мало смысла.

      Наверное, 80% успеха в изучении — это самостоятельная работа. Ещё 20% заложено в обратную связь, когда вам покажут на ошибки. Прикол в том, что на больших образовательных площадках обратную связь дают далеко не профессиональные разработчики. Посмотрите вакансии тех, кто проверяет домашку, например, по запросу «<площадка> наставник», речь про зп в районе 30-55к в месяц.

      Ответ на пост «Без рейтинга. Самообучение PHP или курсы» PHP, Языки программирования, Самообразование, Python, Текст, Разработка, Обучение, Программирование, IT, SQL, Telegram, Ответ на пост, Длиннопост

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

      Небольшая подборка бесплатного материала по Python для старта:

      1. Классическим хорошим курсом из бесплатных считаются Поколения Python на stepik для начинающих и для продвинутых.

      2. На ютубе есть годные лекции Тимофей Хирьянова из МФТИ.

      4. Не питоном единым, поэтому надо ещё и немного в базы. Можно посмотреть на Интерактивный тренажер по SQL

      5. Освоить git, достаточно 4 глав из книги Pro Git

      Можно пойти на codewars и leetcode для закрепления умения программировать. Когда сложилось базовое понимание происходящего, рекомендую переключаться на книги типа Лутца (двухтомник, нужно свежее 5 издание 2019-2020 годов) и идти по ней. Книга большая и достаточно сложная, но покрывает много важных деталей. Можно читать не всю, а главами или разделами по непонятным темам.

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

      А дальше нужно писать как можно больше кода, периодически осматриваясь вокруг. Разработка — это не только язык, это ещё библиотеки, фреймворки, разные инструменты, тесты, проектирование архитектуры, командная разработка, получение задач через bug tracker, работа с ветками в git и вообще flow разработки, CI/CD и ещё много всякого разного.

      Одним из источников кругозора может быть телеграмм-канал devfm, где разбираются разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командная разработка.

      Прощайте парни⁠ ⁠

      Прощайте парни IT юмор, Картинка с текстом, Python, C++, Языки программирования

      Гигиенические отношения⁠ ⁠

      Этот парень не перестаёт удивлять⁠ ⁠

      Этот парень не перестаёт удивлять

      О сравнениях⁠ ⁠

      О сравнениях IT юмор, Языки программирования, Twitter, Javascript, Python, Картинка с текстом

      Бедный Тимми⁠ ⁠

      Бедный Тимми Комиксы, Python, Программирование, Языки программирования, IT, IT юмор, Суицид, C++

      Встроенные типы данных (их назначение, методы и стандартное поведение) — Строки (часть 2)⁠ ⁠

      Теорема о бесконечных обезьянах

      Я бы уточнил: скорее поздно или очень поздно, но никак не рано.

      В самом начале я уже задавался вопросом «откуда появляется текст». И я даже ответил на него — откуда угодно. В этом ответе сконцентрирована основная боль разработчика, связанная с обработкой текста. Ожидая появления текста извне, нужно готовиться к худшему.

      Например, вы просите пользователя ввести его имя и фамилию, не уточняя, как это нужно сделать. При этом, вы ожидаете, что в результате у вас появятся два слова, написанные с заглавной буквы, разделенные одним пробелом. Пускай это будет мой любимый Вася Пупкин. Как поступит Вася, если у него нет чётких инструкций? Да как угодно. Сначала по привычке потопчется по пробелу для успокоения нервов, потом напишет «вася», снова подолбится по пробелу, вспоминая свою фамилию, опомнится, начнёт стирать пробелы, влезет в имя, начнёт исправлять. Короче, идеального результата с первого захода ждать не приходится.

      А как поступит Вася, если у него будут чёткие инструкции? Да точно так же! Может он и не глупый парень, но. В любом случае, как бы вы ни инструктировали ваших пользователей, единственное средство получить ожидаемый вами результат — расставить жёсткие ограничения на ввод, а после него ловушки.

      Например, такая задача и один из вариантов её решения «в лоб».

      »’ Введите два числа. Они могут быть:
      — как на одной строке через пробел(-ы), так и на двух;
      — как целыми, так и дробными.
      Предполагается, что на первой строке введено хотя бы одно число,
      и если введено только одно число, то оно введено без пробелов.»’
      # ожидаем первый ввод

      a = input() # input всегда результирует в строку и ни во что другое

      # если в «а» есть пробел
      if » » in a:
      a = a.split() # разбей «а» по пробелам и сделай список
      b = a[1] # b — это второй элемент списка
      a = a[0] # перезаписываем a — это первый элемент списка
      # если в a нет пробел — ожидай второго ввода
      else:
      b = input()

      # если точка есть в обоих значениях
      if «.» in a and «.» in b:
      # преобразуем обе строки в числа с точкой
      a = float(a)
      b = float(b)
      # если же точка есть только в одном из значений
      elif «.» in a:
      # преобразуем одно значение во float, другое в int
      a = float(a)
      b = int(b)
      elif «.» in b:
      b = float(b)
      a = int(a)
      else: # во всех остальных случаях — оба значения инты
      a, b = int(a), int(b) # да, так тоже можно заводить значения в переменные

      Возможно, кто-то скажет, что это не самый лучший пример, а может быть даже глупый. И я даже отчасти соглашусь. Однако, здесь на примитивном уровне показана проблема «ожидай от юзера чего угодно». Этот пример не является панацеей от слова «совсем», так как он не реализует максимальную защиту данных для последующей обработки. Во-первых, здесь предоставлен достаточно широкий выбор для порядка ввода — это уже плохо. Что, если в самом первом инпуте к нам прилетят два числа, разделённые запятой, а не пробелом, или запятой с пробелом? А что, если первый ввод был верным, а из второго к нам прилетят ещё 2 числа, пускай даже введённые через пробел? Во-вторых, нам могут ввести что угодно помимо чисел. Короче, этот код рассчитан на интеллигентного юзера, который читает инструкции и старательно их выполняет. Но даже с таким юзером этот код рано или поздно упадёт, потому что когда-то юзер обязательно ошибётся.

      Такая же история происходит с данными, приходящими из интернета. Интернет большой, люди разные, текста много. Когда-то в 2000-х была мода на «ПаДоНкАфФсКиЙ яЗыК» (до сих пор не пойму, как им не лень было так заморачиваться). Но вот представьте, что к вам прилетела такая строка. Ручками править будем? Или вы работаете со стандартной кодировкой utf-8, а к вам пришла виндовская cp1251 или, упаси бог, koi-8, о которой вы или уже забыли, или знать не знаете? Короче, вариантов уронить код на казалось бы ровном месте — страшное количество.

      Главное правило при работе с любыми данными — приводить их к установленному формату или стандарту. К какому именно — решать в каждом случае вам, как разработчику (ну или вашему боссу). Если вы работаете с текстовыми данными, которые приходят откуда угодно, то вам так или иначе придётся сделать так, чтобы до начала их прямого использования по назначению все они были как минимум в одном регистре и в одной кодировке. Даже если вы не хотите — жизнь заставит. И для этого помимо прочего вам понадобятся строковые методы.

      Методы строк

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

      Строковые методы — это набор мощных инструментов для работы с текстовыми данными. Часть из них я вам уже продемонстрировал: encode, decode, format. Но это, во-первых, не совсем то, что вам нужно в повседневной жизни, а во-вторых, лишь верхушка айсберга. Нырнём глубже.

      Конкатенация (сложение или объединение строк)

      Первым делом, нужно вспомнить, что строки умеют «складываться». Я это демонстрировал ранее на примере Hello, world.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *