- #7 Python для Data Science — основы синтаксиса Python
- 3 важных правила о синтаксисе Python
- #1. Разрывы строк имеют значение
- #2. Отступы важны
- #3. Чувствительность к регистру
- Другие практики Python
- 1. Используйте комментарии
- #2. Названия переменных
- #3. Используйте пустые строки
- #4. Добавляйте пробелы вокруг операторов и оператора присваивания
- #5. Максимальная длина строки — 79 символов
- #6. Будьте последовательны
- Дзен Python — приятное пасхальное яйцо
- Выводы
- The Python Tutorial¶
#7 Python для Data Science — основы синтаксиса Python
Для новичков в программировании синтаксис оказывается одной из самых сложных вещей. Он очень строг и может казаться противоречивым. Поэтому в этом материале собраны основы синтаксиса Python, которые важны даже для профессионалов. Здесь же упомянуты лучшие практики форматирования, которые помогут делать код опрятным.
Это основы. Ссылки на более сложные вещи будут в конце материала.
3 важных правила о синтаксисе Python
#1. Разрывы строк имеют значение
В отличие от SQL, в Python разрывы имеют значение. В 99% случаев если добавить разрыв туда, где его быть не должно, появится ошибка. Странно? Зато точку с запятой в конце каждой строки добавлять не нужно.
Поэтому вот правило №1 в Python: одно выражение на строку.
Есть и исключения. Выражения могут быть разбиты на несколько строк, если они записаны:
- в скобках (например, функции или методы),
- в квадратных скобках (например, списки),
- в фигурных скобках (например, словари).
Это называется неявным объединением строк и очень помогает при работе с более крупными структурами данных.
Также можно разбивать любое выражение на несколько строк, если написать обратную черту ( \ ) в конце строки. Обратное также допустимо — ввести несколько выражений на одной строке, добавляя точку с запятой ( ; ) после каждого. Но эти способы не используются слишком часто. Применять их нужно только при сильной необходимости. (Например, с выражениями, которые состоят из более чем 80 символов).
#2. Отступы важны
Ненавидите отступы? Вы не одиноки в этом. Многие начинающие Python-программисты не любят это понятие. У людей, которые только знакомятся с азами программирования, именно из-за отступов возникает больше всего ошибок в коде. Но вы привыкнете. А если ответственно проходили примеры из прошлых частей руководства, то, возможно, уже привыкли.
Зачем нужны отступы? Простыми словами, это способ показать, какие части кода связаны между собой — например, где начало и конец инструкции if или цикла for. В других языках, где отступов нет, для этих целей используются другие методы: в Javascript блоки кода окружают дополнительные скобки, а в bash — ключевые слова. В Python используются отступы и по мнению многих — это самый элегантный способ решения проблемы.
И это правило №2 в Python: убедитесь, что используете отступы правильно и последовательно.
Примечание: об этих же правилах речь шла в руководствах, посвященных циклам for и инструкциям if.
И вот еще: если вы смотрели сериал «Кремниевая долина», то наверняка слышали о споре «отступы против пробелов»:
Так отступы или пробелы? Вот что говорится в Руководстве по стилю Python:
Табы или пробелы?
Пробелы являются предпочтительным методом отступа.
Табы должны использоваться исключительно для соответствия с кодом, который уже имеет отступы табуляцией.
#3. Чувствительность к регистру
Python чувствителен к регистру. Есть разница в том, чтоб ввести and (правильно) или AND (не сработает). Как показывает практика, большинство ключевых слов в Python пишутся с маленькой буквы. Известное исключение (из-за которого у многих новичков возникают проблемы) — булевы значения. Их нужно вводить только так: True и False . (Не TRUE или true ).
Правило №3 в Python: Python чувствителен к регистру.
Другие практики Python
Есть и другие необязательные особенности Python, которые сделают код более приятным и читаемым.
1. Используйте комментарии
В код Python можно добавлять комментарии. Для этого нужно всего лишь добавить символ # . Все, что будет написано после символа # , не исполнится.
# Это комментарий перед циклом for. for i in range(0, 100, 2): print(i)
#2. Названия переменных
Традиционно переменные нужно писать буквами в нижнем регистре, разделяя их символами нижнего подчеркивания ( _ ). Также не рекомендуется использовать переменные длиной в один символ. Понятные и легко различимые переменные помогают и другим программистам, когда те разбираются в вашем коде.
my_meaningful_variable = 100
#3. Используйте пустые строки
Если вы хотите визуально разделить блоки кода (например, есть скрипт на 100 строк, состоящий из 10-12 блоков), используйте пустые строки. Или даже несколько. Это никак не повлияет на сам код.
#4. Добавляйте пробелы вокруг операторов и оператора присваивания
Чтобы получить более чистый код, рекомендуется использовать пробелы вокруг знаков = , математических и операторов сравнения ( > , , + , — и так далее). Без этих пробелов код все равно будет работать: но чем он чище, тем проще его читать и тем проще использовать повторно.
number_x = 10 number_y = 100 number_mult = number_x * number_y
#5. Максимальная длина строки — 79 символов
Если в вашей строке больше 79 символов, рекомендуется разбить код на несколько с помощью знака \ . Python его проигнорирует и прочитает так, будто бы это одна строка.
(В некоторых же случаях можно использовать неявное объединение строк).
#6. Будьте последовательны
Одно из самых важных правил — оставайтесь последовательны. Даже если всегда следовать правилам выше, в определенных ситуациях придется придумывать собственные. Главное — неукоснительно придерживаться уже их. При идеальном сценарии спустя 6 месяцев вы откроете код и быстро поймете, для чего он нужен. Если вы будете без причины менять правила оформления или способ именования переменных, создадите ненужную головную боль для будущего себя.
Дзен Python — приятное пасхальное яйцо
Что еще могло бы быть в конце этой статьи, как не пасхальное яйцо?
Если ввести import this в Jupyter Notebook, то выведутся 19 «заповедей» Python:
>>> import this The Zen of Python, by Tim Peters 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!
Выводы
Следуйте этим советам, а если хотите узнать еще больше о синтаксисе Python и лучших практиках, обратитесь к следующим материалам:
В последней части речь пойдет о библиотеках Python.
The Python Tutorial¶
Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language for scripting and rapid application development in many areas on most platforms.
The Python interpreter and the extensive standard library are freely available in source or binary form for all major platforms from the Python web site, https://www.python.org/, and may be freely distributed. The same site also contains distributions of and pointers to many free third party Python modules, programs and tools, and additional documentation.
The Python interpreter is easily extended with new functions and data types implemented in C or C++ (or other languages callable from C). Python is also suitable as an extension language for customizable applications.
This tutorial introduces the reader informally to the basic concepts and features of the Python language and system. It helps to have a Python interpreter handy for hands-on experience, but all examples are self-contained, so the tutorial can be read off-line as well.
For a description of standard objects and modules, see The Python Standard Library . The Python Language Reference gives a more formal definition of the language. To write extensions in C or C++, read Extending and Embedding the Python Interpreter and Python/C API Reference Manual . There are also several books covering Python in depth.
This tutorial does not attempt to be comprehensive and cover every single feature, or even every commonly used feature. Instead, it introduces many of Python’s most noteworthy features, and will give you a good idea of the language’s flavor and style. After reading it, you will be able to read and write Python modules and programs, and you will be ready to learn more about the various Python library modules described in The Python Standard Library .
The Glossary is also worth going through.
- 1. Whetting Your Appetite
- 2. Using the Python Interpreter
- 2.1. Invoking the Interpreter
- 2.1.1. Argument Passing
- 2.1.2. Interactive Mode
- 2.2.1. Source Code Encoding
- 3.1. Using Python as a Calculator
- 3.1.1. Numbers
- 3.1.2. Strings
- 3.1.3. Lists
- 4.1. if Statements
- 4.2. for Statements
- 4.3. The range() Function
- 4.4. break and continue Statements, and else Clauses on Loops
- 4.5. pass Statements
- 4.6. match Statements
- 4.7. Defining Functions
- 4.8. More on Defining Functions
- 4.8.1. Default Argument Values
- 4.8.2. Keyword Arguments
- 4.8.3. Special parameters
- 4.8.3.1. Positional-or-Keyword Arguments
- 4.8.3.2. Positional-Only Parameters
- 4.8.3.3. Keyword-Only Arguments
- 4.8.3.4. Function Examples
- 4.8.3.5. Recap
- 5.1. More on Lists
- 5.1.1. Using Lists as Stacks
- 5.1.2. Using Lists as Queues
- 5.1.3. List Comprehensions
- 5.1.4. Nested List Comprehensions
- 6.1. More on Modules
- 6.1.1. Executing modules as scripts
- 6.1.2. The Module Search Path
- 6.1.3. “Compiled” Python files
- 6.4.1. Importing * From a Package
- 6.4.2. Intra-package References
- 6.4.3. Packages in Multiple Directories
- 7.1. Fancier Output Formatting
- 7.1.1. Formatted String Literals
- 7.1.2. The String format() Method
- 7.1.3. Manual String Formatting
- 7.1.4. Old string formatting
- 7.2.1. Methods of File Objects
- 7.2.2. Saving structured data with json
- 8.1. Syntax Errors
- 8.2. Exceptions
- 8.3. Handling Exceptions
- 8.4. Raising Exceptions
- 8.5. Exception Chaining
- 8.6. User-defined Exceptions
- 8.7. Defining Clean-up Actions
- 8.8. Predefined Clean-up Actions
- 8.9. Raising and Handling Multiple Unrelated Exceptions
- 8.10. Enriching Exceptions with Notes
- 9.1. A Word About Names and Objects
- 9.2. Python Scopes and Namespaces
- 9.2.1. Scopes and Namespaces Example
- 9.3.1. Class Definition Syntax
- 9.3.2. Class Objects
- 9.3.3. Instance Objects
- 9.3.4. Method Objects
- 9.3.5. Class and Instance Variables
- 9.5.1. Multiple Inheritance
- 10.1. Operating System Interface
- 10.2. File Wildcards
- 10.3. Command Line Arguments
- 10.4. Error Output Redirection and Program Termination
- 10.5. String Pattern Matching
- 10.6. Mathematics
- 10.7. Internet Access
- 10.8. Dates and Times
- 10.9. Data Compression
- 10.10. Performance Measurement
- 10.11. Quality Control
- 10.12. Batteries Included
- 11.1. Output Formatting
- 11.2. Templating
- 11.3. Working with Binary Data Record Layouts
- 11.4. Multi-threading
- 11.5. Logging
- 11.6. Weak References
- 11.7. Tools for Working with Lists
- 11.8. Decimal Floating Point Arithmetic
- 12.1. Introduction
- 12.2. Creating Virtual Environments
- 12.3. Managing Packages with pip
- 14.1. Tab Completion and History Editing
- 14.2. Alternatives to the Interactive Interpreter
- 15.1. Representation Error
- 16.1. Interactive Mode
- 16.1.1. Error Handling
- 16.1.2. Executable Python Scripts
- 16.1.3. The Interactive Startup File
- 16.1.4. The Customization Modules
- 2.1. Invoking the Interpreter