Выражения - это формулы, составленные из констант, имен переменных и функций. Выражение может быть вычислено. Результатом вычисления является некоторое значение, которое может быть использовано.
Несколько простых выражений
# Математические вычисления
2 + 2 * 2
6
# Использование встроенной функции
15 + max(100, 500)
515
# Операции со строками
'учиться, ' * 2 + 'и еще раз учиться'
'учиться, учиться, и еще раз учиться'
# Несколько выражений в одной ячейке
2 * 2
3 * 3
9
# Отключить автовывод
2**10;
Переменные позволяют сохранять результаты вычислений и использовать их в дальнейшем. Чтобы обратиться к результату, можно использовать имя переменной, которой этот результат был присвоен.
x = 2**10
x
1024
2 * x
2048
В Python не нужно объявлять тип переменной. Тип определяется тем результатом (объектом), на который переменная ссылается (динамическая типизация)
x = 'Хорошо! '
2 * x
'Хорошо! Хорошо! '
Код в блокноте записан последовательно. Однако вы можете изменить порядок выполнения, запуская отдельные ячейки в произвольном порядке. При этом значения переменных и другие результаты вычислений будут определяться порядком выполнения ячеек с кодом, а не порядком их записи в блокноте!
При перезапуске ядра все результаты в памяти стираются. Их нужно будет получать заново, запуская соответствующие ячейки.
Функции позволяют разделить код на отдельные блоки, которые можно затем многократно использовать, не заботясь о деталях реализации.
В отличие от имен переменных, после имени функции обязательно должны следовать скобки ()
Функция может иметь набор аргументов, которые нужно задавать при вызове функции.
Функция может возвращать значение. В этом случае функцию можно использовать как часть выражения, т.е. использовать возвращаемый результат в формуле.
# Пример использования функции
min(3, 1, 2)
1
В Python доступно множество встроенных функций. Увидеть список встроенных функций можно с помощью функции dir()
:
# Список встроенных функций (и не только функций)
print(dir(__builtin__))
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__IPYTHON__', '__IPYTHON__active', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'dreload', 'enumerate', 'eval', 'exec', 'filter', 'float', 'format', 'frozenset', 'get_ipython', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
Еще больше функций содержится в библиотеках, которые вы можете подключить и использовать для решения своих задач.
Справку по фукнкции можно получить так:
help(функция)
- краткая справка (docstring), вывод в ячейку результатафункция?
- краткая справка (в docstring), вывод в отдельную панельфункция??
- расширенная справка, выводится код функции (если он доступен), вывод в отдельную панельЗакрыть панель со справкой можно по клавише q
или щелчком на разделителе.
# Справка по функции min
help(min)
Help on built-in function min in module builtins: min(...) min(iterable, *[, default=obj, key=func]) -> value min(arg1, arg2, *args, *[, key=func]) -> value With a single iterable argument, return its smallest item. The default keyword-only argument specifies an object to return if the provided iterable is empty. With two or more arguments, return the smallest argument.
# Справка по функции min в отдельной панели
min?
При вводе имен переменных и функций в блокноте работает автодополнение (Tab
).
Подсказку по аргументам функции можно получить по клавише Shift-Tab
(сначала набрать имя функции и открывающую скобку)
#Какие аргументы есть у встроенной функции print?
Свою функцию можно определить, используя оператор def
# Функция, которая возвращает квадрат значения
def square(x):
return x * x
NB: По отступам Python определяет вложенность блоков кода (клавиша Tab
)
Чтобы изменить уровень вложенности, надо выделить нужные строки и воспользоваться клавишами Tab
или Shift-Tab
# Вызов пользовательской функции
square(5)
25
# Подсказка по аргументам пользовательской фуникци
#square(
Для того, чтобы подсказка выводилась и по собственным функциям, необходимо поместить после заголовка функции специальный комментарий - docstring
def distance(x0, y0, x1, y1):
'''
Вычисление расстояния между двумя точками на плоскости
Аргументы:
x0, y0 - координаты первой точки
x1, y1 - координаты второй точки
'''
return ((x0 - x1)**2 + (y0 - y1)**2)**.5
#проверка:
#distance(
#вычислите координаты между точками (5, 5) и (5, 6)
Простые однострочные функции - например, математические - удобно определять так:
f = lambda x,y : x**2 + y**2
f(1, 2)
5
Такой способ определения функций называется лямбда-выражение. Интерсно, что лямбда-выражения можно использовать даже не присваивая полученной функции никакого имени. Можно написать лямбда-выражение прямо в том месте, где ожидается имя функции.
Ограничением лямбда-выражений является то, что в них нельзя использовать никаких операторов.
Определяемые пользователем переменные и функции имеют свою область видимости (scope). Видимость имени определяется тем, в каком месте кода оно определено.
Просмотреть список имен пользовательских переменных и функций в текущей области видимости можно с помощью волшебных команд: %who
и %whos
. Также можно использовать функцию dir()
%who
distance f square x
%whos
Variable Type Data/Info -------------------------------- distance function <function distance at 0x04BDE4B0> f function <function <lambda> at 0x04BDE540> square function <function square at 0x04BDE2B8> x str Хорошо!
Глобальные переменные определяются в модуле (верхний уровень программы). Они доступны из любого места модуля.
Локальные переменные определяются в теле функции. Они доступны только внутри функции.
x = 5 #глобальная переменная
y = 10 #глобальная переменная
def proba(x):
z = 30 #локальная переменная
print('функция proba', x, y, z) # внутри функции имя x будет связано со значением первого аргумента функции
print('функция proba', dir())
proba(20)
print('модуль', x, y)
#print(x, y, z) #ошибка! Переменная z доступна только внутри функции
%who
функция proba 20 10 30 функция proba ['x', 'z'] модуль 5 10 distance f proba square x y
x = 5 #глобальная переменная
y = 10 #глобальная переменная
def proba2(x):
x = 50 #внутри функции имя x будет связано со значением первого аргумента функции
z = 30 #локальная переменная
y = 100 #локальная переменная, перекрывающая глобальную
print('функция proba2', x, y, z)
print('функция proba2', dir())
proba2(20)
print('модуль', x, y) # значения не изменились
%who
функция proba2 50 100 30 функция proba2 ['x', 'y', 'z'] модуль 5 10 distance f proba proba2 square x y
sys
содержатся объекты для работы с системными ресурсами, в модуле math
- математические функции и константы.import
или from
.import sys #импорт всех объектов из модуля sys, они будут доступны через sys.имя
from math import pi #импорт одной переменной из модуля math, она будет доступна как pi
Чтобы избежать конфликта имен, при импорте модуля оператором import
имена объектов, определенных в модуле, добавляются в отдельное пространство имен. К ним нужно обращаться так:
модуль.имя объекта
.
Список всех объектов в модуле после импорта можно просмотреть функцией dir(модуль)
print('Объекты из модуля sys:\n', dir(sys),'\n') #список имен, определенных в модуле
Объекты из модуля sys: ['__displayhook__', '__doc__', '__egginsert', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__plen', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe', '_home', '_mercurial', '_xoptions', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'ps3', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions', 'winver']
print(sys.version) #доступ к объекту из пространства имен модуля
3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)]
Также можно исследовать содержание пространства имен модуля с помощью автодополнения:
sys.<нажмите Tab>
Если функция или константа были импортированы из модуля оператором from ... import ...
, то они будут доступны просто по имени:
print("Число Пи =", pi) #доступ к объекту, импортированному в пространство имен текущего модуля
Число Пи = 3.141592653589793
При импорте с помощью from
объекты добавляются в пространство имен текущего модуля и могут переопределить уже существующие в нем имена.
При частом доступе к объектам в пространстве имен модуля удобно, когда префикс, состоящий из имени модуля, имеет небольшую длину. Поэтому часто используемые модули при импорте переименовывают с помощью оператора as
import numpy as np
np.arange(5) #функция arange из модуля numpy (переименован в np)
array([0, 1, 2, 3, 4])
Например, разработчик пакета для работы со звуковыми файлами, может создать такую структуру:
Пользователи пакета смогут импортировать модуль для создания эффекта эхо, указав составное имя: пакет.подпакет.модуль
import sound.effects.echo```
Для Python разработано множество пакетов, решающих различные задачи. Глобальный каталог пакетов - [Python Package Index](https://pypi.python.org/pypi)
Наиболее часто используемые в научных вычислениях пакеты перечислены в таблице
Модуль | Назначение |
---|---|
numpy |
Работа с массивами данных |
sympy |
Символьная математика (аналитическое вычисление/преобразование выражений) |
pandas |
Обработка данных в табличной форме |
matplotlib |
Библиотека для построения графиков |
matplotlib.pyplot |
Набор функций для построения графиков в стиле Matlab |
seaborn |
Надстройка над matplotlib, облегчающая визуализацию данных |
scipy.optimize |
Методы оптимизации |
scipy.integrate |
Численное интегрирование |
scipy.stats |
Статистические функции |
Документация по двум ключевым пакетам научных вычислений - numpy и scipy доступна на сайте: http://scipy.org