Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
class mydict(dict):
self.__getattr__(self, key):
if key=='smile':
return "Улыбнитесь, вас снимают! =)"
else:
return super(mydict, self).__getattr__(key)class Test:
def __getattr__(self,attrname):
if attrname == «blahblahblah»:
return «blahblahblah»
else:
raise AttributeError, attrname
t = Test()
print( t.blahblahblah ) #prints «blahblahblah»
</sorce>api.call('wall.GetPost', **kwargs)api.wall.GetPost(**kwargs)с сохранением «стека»for i in range(100): a += 1; b += a;def getUserData(user):
if user.authorized:
user.doAnything()
# еще куча кода
else:
raise UserError('Not authorized')На просторах интернета обнаружил «полезнейший» совет: чтобы обращаться к элементам словаря, как к атрибутам класса, то есть, в стиле JS (myobject.myelement), можно воспользоваться таким приемом
b = [x for x in a if x >=5]
fact = lambda x: reduce(int.__mul__, xrange(2, x + 1), 1)from itertools import reducenot " "in name, а
" " not in nameИ скобки вокруг не нужны.
class mydict(dict):
def __getattr__(self, key):
return self[key]
def __setattr__(self, key, value)
self[key] = value
__getattr__ вызывается только тогда, когда атрибут не найден. Для перехвата всех обращений к атрибутам существует метод __getattribute__.self.key является синтаксическим сахаром для self.__getattr__(key).
getattr(self, key) вызовет self.__getattribute__(key).def isSomeoneThere():
return len(activeUsers) and "Yes" or "No"
def isSomeoneThere():
return any(activeUsers) and "Yes" or "No"for item in a[:]:
if item<5:
a.remove(item)
func(arg1, arg2)
func(arg2=var2, arg1=var1)
func(*args_tuple)
func(**args_dict)def func(arg1, arg2)
def func(*args)
def func(**kwargs)import time
def test(f, a):
t=time.clock()
for i in xrange(1000000):
f(a)
return time.clock()-t
a=range(1000000)
print test(len, a)
print test(bool, a)
len(a) отрабатывает быстрее всех, за ней any, за ней bool. Не ожидал.
print test(any, a)<source>
import time
def measure(func):
def inner():
arr = range(100000)
start=time.clock()
func(arr)
return time.clock()-start
return inner
@measure
def test_len(arr):
for i in xrange(1000000):
if len(arr):
pass
@measure
def test_any(arr):
for i in xrange(1000000):
if any(arr):
pass
@measure
def test_bool(arr):
for i in xrange(1000000):
if bool(arr):
pass
@measure
def test_simple(arr):
for i in xrange(1000000):
if arr:
pass
print test_len()
print test_any()
print test_bool()
print test_simple()
0.138603 0.213345 0.255277 0.064151
чтобы обращаться к элементам словаря, как к атрибутам класса, то есть, в стиле JS (myobject.myelement), можно воспользоваться таким приемом...
a.1
#Ошибка! Атрибут не может начинаться с цифры
if 'val' in arr:
del arr['val']
spam['egg'] = None
spam.pop('egg')
class safedict(dict):
remove = lambda self, key:key in self and (self.__delitem__(key) or True)key = func()
if key in arr:
del arr[key]
unset(arr[func()]);
key in arr and arr.pop(key)def formatName(name):
if len(name)>=40:
return False
if " " not in name:
return False
if name[0]=="?"
return False
def formatName(name):
if len(name) >= 40:
return False
if " " not in name:
return False
if name[0] == "?":
return False
Python-way. Работа над ошибками