Примеры программ на языке Python: различия между версиями

м
<source> -> <syntaxhighlight> (phab:T237267)
м (Откат правок 90.151.82.3 (обс.) к версии 95.154.65.85)
Метка: откат
м (<source> -> <syntaxhighlight> (phab:T237267))
Данный пример чисто демонстрационный, так как его можно значительно улучшить.
 
<sourcesyntaxhighlight lang="python">
from urllib2 import urlopen # из модуля urllib2 импортируем функцию urlopen
 
for p in pairs[:10]: # печатаем первые 10 элементов списка
print(p[0], p[1])
</syntaxhighlight>
</source>
 
Текст для версии 3.7.1
<sourcesyntaxhighlight lang="python">
from urllib.request import urlopen # из модуля urllib импортируем функцию urlopen
 
for p in A[:10]: # печатаем первые 10 элементов списка
print(p[0], p[1])
</syntaxhighlight>
</source>
 
=== Примеры работы с последовательностями ===
Иллюстрируют особенности индексации элементов и срезов: при взятии среза нумеруются не сами элементы, а промежутки между ними.
 
<sourcesyntaxhighlight lang="python">
>>> l = ['A', 'B', 'C', 'D', 'E'] # исходный список
>>> # 0 1 2 3 4 5 # пронумерованные промежутки между элементами
>>> l[::-1] # все элементы в обратном порядке
['E', 'D', 'C', 'B', 'A']
</syntaxhighlight>
</source>
 
Функции подобные <code>range()</code> поддерживают то же правило (для версий языка 2.x):
<sourcesyntaxhighlight lang="python">
>>> range(2, 5)
[2, 3, 4]
>>> range(5)
[0, 1, 2, 3, 4]
</syntaxhighlight>
</source>
 
Генерация коллекций:
<sourcesyntaxhighlight lang="python">
>>> [0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> [ i for i in range(5) if i%2==0]
[0, 2, 4]
</syntaxhighlight>
</source>
 
=== Реализация перегрузки функций ===
базовой реализации. Поддерживается минимум возможностей (только фиксированное количество позиционных аргументов, нет именованных аргументов, нет приведения типов (например <code>int -> float</code>) и т. п.), но работает достаточно быстро.
 
<sourcesyntaxhighlight lang="python">
import sys # для получения объектов из вышележащих фрэймов стека
 
print f("1") # напечатает : 11
f(2,2) # напечатает : Default call
</syntaxhighlight>
</source>
 
=== Управление контекстом выполнения ===
Следующий пример из [http://www.python.org/dev/peps/pep-0343/ PEP343] иллюстрирует применение оператора <code>with</code> для защиты блока кода от одновременного выполнения двумя потоками:
 
<sourcesyntaxhighlight lang="python">
from __future__ import with_statement # задействует оператор with в коде
from contextlib import contextmanager
print "Охраняемый блок кода. Блокировка будет освобождена при любом выходе из этого блока."
#
</syntaxhighlight>
</source>
 
=== Генератор чисел Фибоначчи ===
 
Пример генератора [[числа Фибоначчи | чисел Фибоначчи]] и его использования:
<sourcesyntaxhighlight lang="python">
def fibonacci(max): # генератор (а не функция, т.к. оператор return заменён на yield)
a, b = 0, 1
for n in fibonacci(100): # используем генератор fibonacci() как итератор
print(n) # печатаем все числа Фибоначчи меньшие 100 через пробел
</syntaxhighlight>
</source>
 
=== Альтернативный синтаксис доступа к элементам словаря ===
Можно определить словарь, который в дополнение к обычному синтаксису доступа к значению по ключу <code>d[key]</code> может предоставлять синтаксически более наглядный доступ к атрибуту <code>d.key</code> в случае алфавитно-цифровых ключей:
 
<sourcesyntaxhighlight lang="python">
class Entity(dict): # наследуем класс от __builtin__.dict
def __getattr__(self, key): # этот метод будет вызван, если атрибут
d.b_100 = 100
assert d.a == d['a'] and d.b_100 == d['b_100']
</syntaxhighlight>
</source>
 
=== Функтор с генерацией байтокода ===
''Это только пример, он реализует всего одну операцию — сложение и имеет несколько других ограничений.''
 
<sourcesyntaxhighlight lang="python">
#-------------------------------------------------------------------------------
import byteplay # специальный модуль для удобной работы с Python-байтокодом
self.func = functools.update_wrapper(self.func,self.ofunc)
return self.func
</syntaxhighlight>
</source>
<code>
# Ниже представлено тестирование скорости объектов FastFunctor и SlowFunctor
Пример лаконичной реализации операции транспонирования матриц с использованием парадигмы [[Функциональное программирование|функционального программирования]].
 
<sourcesyntaxhighlight lang="python">
from pprint import pprint # модуль pprint используется для удобного вывода на экран
matrix = [[0.5, 0, 0, 0, 0],
pprint(matrix)
pprint(matrix_t)
</syntaxhighlight>
</source>
 
Вывод:
=== Нахождение Факториала ===
 
<sourcesyntaxhighlight lang="python">
factorial = lambda x: factorial(x - 1) * x if x > 1 else 1
</syntaxhighlight>
</source>
 
[[Категория:Python (язык программирования)]]
583

правки