Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Web Analytics
Cookie Policy Terms and Conditions Python примеры программ — Википедия

Python примеры программ

Материал из Википедии — свободной энциклопедии

Содержание

[править] Примеры программ на языке программирования Python.

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

[править] Нахождение 10 наиболее частых слов на web странице

Данный пример чисто демонстрационный, так как его можно значительно улучшить.

import string                           # импортируем модуль для работы со строками
from urllib2 import urlopen             # из модуля urllib2 импортируем функцию urlopen
    
u = urlopen("http://python.org")      # открываем URL на чтение
words = {}                              # связываем имя words с пустым словарём
                                        # (словарь — неупорядоченный ассоциативный массив)
for line in u.readlines():              # читаем u по строкам
    line = string.strip(line, " \n")    # отбрасываем начальные и конечные пробелы
    for word in line.split(" "):        # режем каждую строку на слова, ограниченные пробелами
        try:                            # блок обработки исключений
            words[word] += 1            # пытаемся увеличить words[word] на единицу
        except KeyError:                # если не получилось (раньше words[word] не было)
            words[word] = 1             # присваиваем единицу
     
# теперь словарь words содержит частоту встречаемости каждого слова.
# Например, words может содержать {"яблоко":5, "апельсин": 12, "груша": 8}
     
pairs = words.items()                   # делаем из словаря список пар
                                        # pairs == [("яблоко",5), ("апельсин",12), ("груша",8)]
pairs.sort(lambda a, b: b[1]-a[1])      # сортируем по убыванию второго элемента пары
   
for p in pairs[:10]:                    # печатаем первые 10 элементов списка
    print p[0], p[1]

[править] Примеры работы с последовательностями

Иллюстрируют особенности индексации элементов и срезов: при взятии среза нумеруются не сами элементы, а промежутки между ними.

>>> l = ['A', 'B', 'C', 'D', 'E']    # исходный список
>>> #   0    1    2    3    4    5   # пронумерованные промежутки между элементами
>>> #   -5   -4   -3   -2   -1       # нумерация с конца
>>> l[0:2]          # срез от нулевого до второго промежутка
['A', 'B']
>>> l[1:-2]         # срез от второго до второго с конца элемента
['B','C']
>>> l[1::2]         # каждый второй элемент начиная с первого
['B', 'D']
>>> l[::-1]         # все элементы в обратном порядке
['E', 'D', 'C', 'B', 'A']

Функции вроде range() поддерживают то же правило:

>>> range(2, 5)
[2, 3, 4]
>>> range(5)
[0, 1, 2, 3, 4]

[править] Реализация перегрузки функций

Это пример простой реализации поддержки перегрузки функций на Python. Она демонстрирует как используя уже имеющиеся в Python средства можно обойти одно из ограничений базовой реализации. Поддерживается минимум возможностей (только фиксированное количество позиционных аргументов, нет именованных аргументов, нет приведения типов (например int -> float) и т. п.), но работает достаточно быстро.

import sys                                   # для получения объектов из вышележащих фрэймов стека                      
class CannotResolve(Exception):pass          # класс исключения для случая не нахождения функции
class Resolver(object):                      # класс реализующий разрешение на этапе исполнения
    emess = "Can't found appropriate signature of func %s() for call with" + \
            " params %r"                     # сообщение о ошибке
    def __init__(self,name):                 # конструктор
        self.function_map = {}               # словарь, отображающий типы параметров на функции
        self.default = None                  # функция по умолчанию
        self.name = name                     # имя функции для вывода сообщений о ошибках
    def __call__(self,*dt):                  # имитируем функцию, принимающую любое количество 
                                             # позиционных параметров
        cls = tuple(map(type,dt))            # создаем tuple из типов переданных аргументов
                                             # функция type возвращает тип своего параметра
                                             # map вызовет type для каждого элемента из dt
        try:                                 
            x = self.function_map[cls]       # пытаемся получить функцию из словаря
        except KeyError:                     # если подходящей нет
            if self.default is not None:     # используем функцию по умолчанию
                x = self.default             
            else:                            # если ее нет - возбуждаем искючение
                raise CannotResolve(self.emess % (self.name,cls))
        return x(*dt)                        # вызываем функцию и возвращаем результат
def overload(*dt):                           # декоратор для перегрузки в качестве параметров
                                             # принимает типы параметров
    def closure(func):                       
        name = func.__name__                 # получаем имя функции
        fr = sys._getframe(1).f_locals.get(name,Resolver(name)) 
                                             # опускаемся на один шаг вниз по стеку и находим
                                             # локальную переменную с именем функции
                                             # если же ее нет то используем новый 
                                             # Resolver объект
        fr.function_map[dt] = func           # добавляем новую функцию к словарю 
                                             # разрешения вызовов
        return fr                             
    return closure
def overdef(func):                           # для создания функции по умолчанию
    name = func.__name__                     # аналогично как и в функции overload
    fr = sys._getframe(1).f_locals.get(name,Resolver(name))
    fr.default = func
    return fr
# теперь воспользуемся полученными декораторами
@overdef                                     # это будет функция по умолчанию
def f(*dt,**mp):                             
    print "Default call"                     # если нет явного return то вернется None
@overload(int)                               # единственный параметр - целое
def f(x):
    return x + 1                             
@overload(str)                               # единственный параметр - строка
def f(x):
    return x + "1"
@overload(str,int)                           # строка и целое                 
def f(x,y):
    return x + str(y)
print f(1)           # напечатает : 2
print f("1")         # напечатает : 11
f(2,2)               # напечатает : Default call

[править] Управление контекстом выполнения

Следующий пример из PEP343 иллюстрирует применение оператора with для защиты блока кода от одновременного выполнения двуми потоками:

 from __future__ import with_statement     # задействует оператор with в коде
 from contextlib import contextmanager
 from threading import Lock
  
 # Описание менеджера контекста
 @contextmanager
 def locked(lock):
     lock.acquire()
     try:
         yield
     finally:
         lock.release()
  
 # Определение замка
 myLock = Lock()
  
 # Применение оператора
 with locked(myLock):
     #
     print "Охраняемый блок кода. Замок будет освобожден при любом выходе из этого блока."
     #

[править] Генератор чисел Фибоначчи

Пример генератора чисел Фибоначчи и его использования:

def gen_fibonacci(n=100):
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, a+b
# напечатать все числа Фибоначчи < 1000
for i in gen_fibonacci(1000): 
    print i
 
Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu