viem77: (9May)
[personal profile] viem77
...сознаниестандартные функции.

Иногда бывает надо, чтоб функция, обрабатывающая серию значений, была универсальна, и понимала одновременно и список на входе одним аргументом и список аргументов и даже одиночный аргумент, списком не являющийся. Делается это достаточно просто:

def _convertargs(iter*args):
  if len(args):
    list = (iter,)+args
  else:
    if hasattr(iter,'__getitem__'):
      list = iter
    else:
      list = (iter,)
    return list










Соответственно если аргументов несколько - соединяем первый с остальными в список и работаем. Если аргумент один и является списком - все хорошо, работаем дальше. Если же аргумент один и он ни разу не список - не вопрос, мы его таковым сделаем и таки да, работаем дальше.

Но может случиться такая ситуация, при которой нам надо дополнить обработку списка аргументов стандартными функциями. Например, встроенные max() и min() выдадут нам ошибку, если мы им скормим max(0), например.

>>> max(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable





Хотя чисто логически никакой крамолы в этом нет. В таком случае мы переопределим функцию max(), чтоб преобразовать неперечислимый аргумент в список из одного элемента, а потом вызвать уже родной встроенный max().

import __builtin__

def max(iter*args):
  return __builtin__.max(_convertargs(iter*args))





Проверяем:

>>> max(0)
0



Может быть для кого-то это все боянъ и "спасибо, кэп", но мало ли :)

П.С. Под списком тут вполне себе понимаются все перечислимые (iterable) типы.
From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.

February 2013

S M T W T F S
     12
3456789
1011121314 1516
17181920212223
2425262728  

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 22nd, 2017 06:26 am
Powered by Dreamwidth Studios