Приведем более конкретный пример использования функции reload. В следующем примере мы изменяем и повторно загружаем файл модуля без остановки интерактивного сеанса работы с интерпретатором Python. Повторная загрузка может использоваться в различных случаях , но мы рассмотрим лишь самый простой пример. Во-первых, в текстовом редакторе создайте файл модуля с именем changer.py и добавьте в него следующее содержимое:
Бесплатные уроки для начинающих по изучению языка программирования Python. Будут рассмотрены: Django и парсинг на Python-e с помощью библиотек
Показаны сообщения с ярлыком Функции. Показать все сообщения
Показаны сообщения с ярлыком Функции. Показать все сообщения
29 ноября 2015 г.
19 апреля 2013 г.
Альтернативные реализации модуля хронометража
Сегодня пятница, пора постить новый урок по программированию на Python.
Появилась новая страница в блоге, на нее не обращайте внимание, это для сэо.
Значит так, урок начинается....
Сегодня рассмотрим альтернативную реализацию модуля хронометража (смотреть предыдущий пост).
Примитивность,минуса предыдущего модуля хронометража с предыдущего поста:
• В нем всегда используется функция time.clock. В операционной системе Windows она является лучшим выбором, однако на платформах в системе UNIX более высокую точность можно получить с помощью функции time.time.
• Для изменения количества повторений требуется изменять глобальную переменную модуля – не самое идеальное решение, если функция timer импортируется и одновременно используется в нескольких модулях.
• Функция timer выполняет тестовую функцию большое число раз. Чтобы учесть случайные флуктуации, вызванные различными уровнями нагрузки на систему, можно было бы отбирать наилучшие результаты из серии тестов вместо того, чтобы рассчитывать общее время выполнения.
Появилась новая страница в блоге, на нее не обращайте внимание, это для сэо.
Значит так, урок начинается....
Сегодня рассмотрим альтернативную реализацию модуля хронометража (смотреть предыдущий пост).
Примитивность,минуса предыдущего модуля хронометража с предыдущего поста:
• В нем всегда используется функция time.clock. В операционной системе Windows она является лучшим выбором, однако на платформах в системе UNIX более высокую точность можно получить с помощью функции time.time.
• Для изменения количества повторений требуется изменять глобальную переменную модуля – не самое идеальное решение, если функция timer импортируется и одновременно используется в нескольких модулях.
• Функция timer выполняет тестовую функцию большое число раз. Чтобы учесть случайные флуктуации, вызванные различными уровнями нагрузки на систему, можно было бы отбирать наилучшие результаты из серии тестов вместо того, чтобы рассчитывать общее время выполнения.
5 апреля 2013 г.
Полезные функции
Создание собственной версии функции map(func, ...)
Имеющиеся функции map и zip, имеют высокую производительность, но и мы можем добиться той же функциональности, написав несколько строк. В предыдущем посте и создавали функцию map для одной последовательности, сейчас же мы создадим ее для нескольких последовательностей:
#эта версия опирается на конструкцию *args передачи
#аргументов – она получает множество аргументов-#последовательностей
def mymap(func, *seqs):
for args in zip(*seqs):
res.append(func(*args))
return res
print(mymap(abs, [-2, -1, 0, 1, 2]))
print(mymap(pow, [1, 2, 3], [2, 3, 4, 5]))
-----------------------------------------------------------------
Теперь создадим версию функции, которая использует генератор списков:
def mymap(func, *seqs):
return [func(*args) for args in zip(*seqs)]
print(mymap(abs, [-2, -1, 0, 1, 2]))
print(mymap(pow, [1, 2, 3], [2, 3, 4, 5]))
Имитация функций zip и map
В данном посте будет рассказано о применении итераций для имитации функций zip и map.
Мы уже видели, как встроенные функции zip и map позволяют объединять итерируемые объекты и отображать на них функции соответственно. При вызове с несколькими аргументами функция map отображает заданную функцию на элементы, взятые из каждой последовательности, практически тем же способом, каким функция zip объединяет их:
3 декабря 2012 г.
Send и next
Расширенный протокол функций-генераторов: send и next
Метод send выполняет переход к следующему элементу и обеспечивает для вызывающей программы способ взаимодействия с генератором, влияя на его работу.
Например:
>>> def gen():
... for i in range(10):
... X = yield i
... print(X)
...
>>> G = gen()
>>> next(G) # Чтобы запустить генератор, необходимо сначала вызвать next()
0
>>> G.send(77) # Переход к следующему значению
77 # и передача значения выражению yield
1
>>> G.send(88)
88
2
>>> next(G) # next() и X.__next__() передают значение None
None
3
21 ноября 2012 г.
Функция lambda
Анонимная функция lambda
Помимо def есть lambda, c их помощью можно создавать объекты функций.
lambda - анонимны, то есть без имени. На практике они часто используются, как способ получить встроенную функцию или отложить выполнение фрагмента программного кода.
Основы lambda - выражений:
lambda argument1, argument2,... argumentN : выражение, использующее аргументы
Различия lambda от def:
• lambda – это выражение, а не инструкция. По этой причине ключевое слово lambda может появляться там, где синтаксис языка Python не позволяет использовать инструкцию def, – внутри литералов или в вызовах функций, например.
lambda-выражения сродни тому, что вы помещаете в инструкцию return внутри определения def, – вы просто вводите результат в виде выражения вместо его явного возврата.
20 ноября 2012 г.
Снова функции
Функции и другие их возможности
Применяемые операции к функциям:
Рассмотрим некую функцию foo
... b = ‘spam’
... return b * a
...
>>> foo(8) # является операцией(выражение вызова)применимой к
‘spamspamspamspamspamspamspamspam’ # функции
-----------------------------------------------------------------
Получение базового доступа к атрибутам функции:
>>> foo.__name__
‘foo’
>>> dir(foo)
[‘__annotations__’, ‘__call__’, ‘__class__’, ‘__closure__’, ‘__code__’,
...остальные имена опущены...
‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’]
19 ноября 2012 г.
Возможности функций
Расширенные возможности функций
• Взаимодействие: для передачи значений функции используйте аргументы, для возврата результатов – инструкцию return.
• Взаимодействие: используйте глобальные переменные, только если это
действительно необходимо.
• Взаимодействие: не воздействуйте на изменяемые аргументы, если вызывающая программа не предполагает этого.
• Связность: каждая функция должна иметь единственное назначение.
• Размер: каждая функция должна иметь относительно небольшой размер.
• Взаимодействие: избегайте непосредственного изменения переменных в другом модуле.
16 ноября 2012 г.
Полезные функции, 1 часть
Помощь школьникам или же математикам
Небольшое вступление, насчет данной темы:
В теме "Функции помощники", я буду выкладывать готовые решение каких либо задач в виде функций на языке Python. Можете писать свои задания в комментариях. Итак начинаем.
Сегодня просмотрим функции факториала и поиска минимума.
Нахождение Факториала:
как это выглядит в математике :-)
5! = 5*4*3*2*1
def fact(x):
if x==0:
return 1
else:
return x*fact(x-1)
c=fact(5)
print(c)
def fact(x):
return 1 if x==0 else reduce(lambda x,y:x*y,xrange(1,x+1))
c=fact(5)
print(c)
результат будет равен 120
-----------------------------------------------------------------
Функция должна находить минимальное значение из множества аргументов любого типа.
1-й способ:
def min1(*args):
res = args[0]
for arg in args[1:]:
if arg < res:
res = arg
return res
2-й способ:
def min2(first, *rest):
for arg in rest:
if arg < first:
first = arg
return first
3-й способ:
def min3(*args):
tmp = list(args) # Или, в Python 2.4+: return sorted(args)[0]
tmp.sort()
return tmp[0]
print(min1(3,4,1,2))
print(min2(“bb”, “aa”))
print(min3([2,2], [1,1], [3,3]))
результат:
1
aa
[1, 1]
Аргументы, углубляемся, продолжение
Передача аргументов, доходим до конца
До появления версии Python 3.0 того же эффекта, который дает использование синтаксиса
*args и **args в вызовах функций, можно было добиться с помощью встроенной функции apply. Данная возможность убрана в версии 3.0, но осталась в версии 2.х и 2.6. Проще говоря, следующие две инструкции являются эквивалентными в версиях Python ниже версии 3.0:
func(*pargs, **kargs) # Новейший синтаксис вызова:
#func(*sequence, **dict)
apply(func, pargs, kargs) # Устаревшая функция:
#apply(func, sequence, dict)
В качестве примера рассмотрим следующую функцию, которая принимает произвольное число позиционных и именованных аргументов:
>>> def echo(*args, **kwargs): print(args, kwargs)
...
>>> echo(1, 2, a=3, b=4)
(1, 2) {‘a’: 3, ‘b’: 4}
С использование функции apply предыдущий код выглядел бы так:
>>> pargs = (1, 2)
>>> kargs = {‘a’:3, ‘b’:4}
>>> apply(echo, pargs, kargs)
(1, 2) {‘a’: 3, ‘b’: 4}
>>> echo(*pargs, **kargs)
(1, 2) {‘a’: 3, ‘b’: 4}
12 ноября 2012 г.
Аргументы, углубляемся
Передача аргументов
Углубляемся
• В вызове функции аргументы должны указываться в следующем порядке:
любые позиционные аргументы (значения), за которыми могут следовать любые именованные аргументы (name=value) и аргументы в форме *sequence, за которыми могут следовать аргументы в форме **dict.
В обоих случаях, и в вызове, и в заголовке функции, форма **arg должна следовать последней в списке. В любых других случаях вызова получим синтаксическую ошибку.
Действия, которые выполняет интерпретатор при сопоставлении аргументов перед присваиванием, грубо можно описать так:
1. Сопоставление не именованных аргументов по позициям.
2. Сопоставление именованных аргументов по именам.
3. Сопоставление дополнительных не именованных аргументов с кортежем
*name.
4. Сопоставление дополнительных именованных аргументов со словарем
**name.
5. Сопоставление значений по умолчанию с отсутствующими именованными
аргументами.
После этого интерпретатор убеждается, что каждому аргументу соответствует только одно значение, – в противном случае возбуждается исключение. По окончании сопоставления всех аргументов интерпретатор связывает имена аргументов с полученными объектами.
11 ноября 2012 г.
Аргументы
Передача аргументов
Передача аргументов - способ передачи объектов в функции. Если вспомнить, то мы знаем, что передача аргументов происходит с помощью операции присваивания.
• Операция присваивания именам аргументов внутри функции не оказывает влияния на вызывающую программу.
• Изменение внутри функции аргумента, который является изменяемым
объектом, может оказывать влияние на вызывающую программу.
Передача аргументов очень близка к языку С:
• Неизменяемые объекты передаются «по значению». Такие объекты, как целые числа и строки, передаются в виде ссылок на объекты, а не в виде копий объектов.
• Изменяемые объекты передаются «по указателю». Такие объекты, как списки и словари, также передаются в виде ссылок на объекты, что очень похоже на то, как в языке C передаются указатели на массивы, – изменяемые объекты допускают возможность непосредственного изменения внутри функции так же, как и массивы в языке C.
28 октября 2012 г.
Что то нужное в Python
Данный пост будет содержать в себе
кое что, что возможно вам пригодится
далее...
Так как я не знаю с чего начинать, чтоб двигаться дальше, я напишу короткие фрагменты инструкций языка Python.
Полиморфизм в языке Python:
def intersect(seq1, seq2):
res = [] # Изначально пустой результат
for x in seq1: # Обход последовательности seq1
if x in seq2: # Общий элемент?
res.append(x) # Добавить в конец
return res
Вызов:
>>> s1 = “SPAM”
>>> s2 = “SCAM”
>>> intersect(s1, s2) # Строки
[‘S’, ‘A’, ‘M’]
В данном примере мы передали функции две строки и получили список общих символов. Переменная res внутри функции intersect – это то, что в языке Python называется локальной переменной, – имя, которое доступно только программному код у внутри инструкции def и существует только во время выполнения функции.
-----------------------------------------------------------------
В языке Python, наша функция intersect(которая описывается выше)также является полиморфной. То есть она может обрабатывать объекты произвольных типов, при условии, что они поддерживают ожидаемый интерфейс:
>>> x = intersect([1, 2, 3], (1, 4)) # Смешивание типов
>>> x # Объект с результатом
[1]
На этот раз функции были переданы объекты разных типов – список и кортеж, – и это не помешало ей отыскать общие элементы.
-----------------------------------------------------------------
В языке Python, наша функция intersect(которая описывается выше)также является полиморфной. То есть она может обрабатывать объекты произвольных типов, при условии, что они поддерживают ожидаемый интерфейс:
>>> x = intersect([1, 2, 3], (1, 4)) # Смешивание типов
>>> x # Объект с результатом
[1]
На этот раз функции были переданы объекты разных типов – список и кортеж, – и это не помешало ей отыскать общие элементы.
-----------------------------------------------------------------
24 октября 2012 г.
Функции
Функции, основы
Вот и наконец то мы дошли до функций. В предыдущих постах мы сталкивались с функциями, но теперь мы рассмотрим их подробно и будем знать как создавать свои функции.
Функции - инструкции языка которые обеспечивают многократное использование кода, и в будущем будут помогать в проектировании сложных систем, путем разбития их на простые части.
Инструкции и выражения, имеющие отношение к функциям:
Вызов - myfunc(‘spam’, ‘eggs’, meat=ham)
def, return - def adder(a, b=1, *c):
return a+b+c[0]
global - def changer():
global x; x = ‘new’
nonlocal - def changer():
nonlocal x; x = ‘new’
yield - def squares(x):
for i in range(x): yield i ** 2
lambda - funcs = [lambda x: x**2, lambda x: x*3]
Подписаться на:
Сообщения (Atom)