- 1
- 2
if form.cleaned_data.has_key('replace_id') and type(form.cleaned_data['replace_id']) == type(32):
...
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−109
if form.cleaned_data.has_key('replace_id') and type(form.cleaned_data['replace_id']) == type(32):
...
Логично, чо
−113
def convert_get_to_post(header='HTTP_X_GET_DATA'):
def decorator(function):
@wraps(function)
def wrapper(request, *args, **kwargs):
if header in request.META:
request.method = 'GET'
request.GET = request.POST
return function(request, *args, **kwargs)
return wrapper
return decorator
Как избежать проблему с большим количеством параметров в URL при GET запросе...
−110
# количество гласных в строке
vowelsCount = lambda s: sum([1 for x in s if x in ['i','a','e','o','u']])
# Вхождение подстроки в строку
substringOccurence = lambda S,s:sum([1 for i in range(len(S) + 1 - len(s)) if S[i:i + len(s)] == s])
g = lambda S,s:'Number of times ' + substr + ' occurs is: ' + str(substringOccurence(S,s))
# первая из упорядоченных подстрок максимальной длины
alpha = lambda s: [x for x in
[s[i:i + j] for j in range(len(s),0,-1)for i in range(len(s) - j + 1)]
if x == ''.join(sorted(x))][0]
# atoi без atoi
stringToInteger = lambda s: sum([(ord(n) - ord('0')) * (10 ** i) for i,n in enumerate(s[::-1])])
Питонячьи извращения для одного курса или не все однострочники одинаково полезны.
−109
class QuerysetResponse(object):
"""
вариант респонса для фильтрации гридов или диктселекфилдов
используя механизм инструкций
"""
def __init__(self, queryset, application, root=None):
self.root = root or "data"
def __new__(cls, *args, **kwargs):
return super(cls, cls).__new__(cls)(*args, **kwargs)
def __call__(self, queryset, application):
dict_list = []
pack = get_pack_instance(application)
for item in pack.list_columns:
if isinstance(item, (list, tuple)):
dict_list.append(item[0])
elif isinstance(item, dict) and item.get('data_index'):
dict_list.append(item['data_index'])
self.dict_ = dict_list
if not queryset:
queryset = []
return PreJsonResult(dict(rows=list(queryset),
total=len(queryset)), dict_list=self.dict_).get_http_response()
self.root не используется, ну, это видно. QuerysetResponse "инстанцируется" во всем проекте один раз.
Мне бы такое даже в голову не пришло.
−124
print ("Программа вычисления номера подъезда.\nБудьте внимательны при вводе данных.\n")
n_kvartiry = input("Введите номер квартиры...\n")
n_kvartiry = int(n_kvartiry)
kol_etazhey = input("Введите количество этажей в доме...\n")
kol_etazhey = int(kol_etazhey)
kol_kvartir_etazh = input("Введите количество квартир на этаже...\n")
kol_kvartir_etazh = int(kol_kvartir_etazh)
kol_kvart_pod = kol_kvartir_etazh * kol_etazhey
result = n_kvartiry / kol_kvart_pod
if result <= 1:
print ("Номер подъезда 1")
x=1
elif result <= 2:
x=2
print ("Номер подъезда 2")
elif result <= 3:
x=3
print ("Номер подъезда 3")
elif result <= 4:
x=4
print ("Номер подъезда 4")
elif result <= 5:
x=5
print ("Номер подъезда 5")
elif result <= 6:
x=6
print ("Номер подъезда 6")
elif result <= 7:
x=7
print ("Номер подъезда 7")
elif result <= 8:
x=8
print ("Номер подъезда 8")
elif result <= 9:
x=9
print ("Номер подъезда 9")
elif result <= 10:
x=10
print ("Номер подъезда 10")
elif result <= 11:
x=11
print ("Номер подъезда 11")
elif result <= 12:
x=12
print ("Номер подъезда 12")
else:
print("Карлсон живет на крыше!!!")
print ("Все квартиры в этом подъезде:")
for n in range(1, kol_kvart_pod+1 ):
res = n + kol_kvart_pod*(x-1)
print (int(res), end=" ")
python 3
чисто поржать...
−107
****@****:~$ python
>>> import this
The Zen of Python, by Tim Peters
<....>There should be one-- and preferably only one --obvious way to do it.<...>
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
preferably only one
−111
def parse(file):
if 1==1: #вырвано из другого места, лень пробелы удалять
if file:
try:
doc = ET.parse(file)
except IOError:
return HttpResponse(u'nofile')
лол
−118
from os import walk
from time import time
from abc import ABCMeta, abstractmethod
class Reporter(object):
__metaclass__=ABCMeta
@abstractmethod
def report(self, catalogs_cntr, files_ctnr, speed):
""" output catalogs_cntr, files_ctnr, speed to somewhere """
#pass
class ConsoleIndicator(Reporter):
def __init__(self, out_splitter):
self.__out_splitter=out_splitter
def report(self, catalogs_cntr, files_ctnr, speed):
if self.__out_splitter and self.__out_splitter.pipes:
_result = "\rcataloges:" + repr(catalogs_cntr).rjust(8)
_result += "\tfiles:" + repr(files_ctnr).rjust(13)
_result += "\tspeed: %12.3f"%speed + " files/s"
self.__out_splitter.write(_result)
self.__out_splitter.flush()
class CatalogsWalker(object):
""" """
def __init__(self, catalogs, reporter=None):
""" """
self.__files_cntr, self.__catalogs_cntr, self.__start_time, self.__speed = 0, 0, 0, 0
self.__reporter = reporter
self.__catalogs = catalogs if hasattr(catalogs, "__iter__") else [catalogs]
def __iter__(self):
self.__files_cntr, self.__catalogs_cntr, self.__start_time, self.__speed = 0, 0, 0, 0
self.__start_time=time()
for catalog in self.__catalogs:
print catalog
for p,d,ns in walk(catalog):
_ = d;
self.__catalogs_cntr+=1
for n in ns:
self.__files_cntr+=1
self.__speed=self.__files_cntr/(time()-self.__start_time)
if self.__reporter:
self.__reporter.report(self.__catalogs_cntr, self.__files_cntr, self.__speed)
yield p,n
@property
def reporter(self):
return self.__reporter
@property
def catalog_counter(self):
return self.__catalogs_cntr
@property
def file_counter(self):
return self.__files_cntr
@property
def start_time(self):
return self.__start_time
@property
def speed(self):
return self.__speed
По мотивам http://govnokod.ru/17181 Учтены замечания некого Анонимус http://govnokod.ru/17181#comment256577. Надеюсь что будут еще замечания, такие же конструктивные и полезные.
−121
#!/usr/bin/env python
# encoding: utf-8
import os
import sys
from sets import Set
class OutputSplitter(object):
""" splitter """
def __init__(self, out_splitter):
self.__pipes=None
if isinstance(out_splitter, OutputSplitter):
self.__pipes = Set(out_splitter.pipes)
elif out_splitter:
print out_splitter
if type(out_splitter) == list : #
for pn in out_splitter:
self.add_pipe(pn)
else:
self.add_pipe(out_splitter)
@property
def pipes(self):
return self.__pipes
def add_pipe(self, pn):
if isinstance(pn, basestring):
if pn == 'stderr': x = sys.stderr
elif pn == 'stdout': x = sys.stdout
else:
p = os.path.dirname(pn)
if p and not os.path.exists(p):
os.makedirs(p)
try:
x = open(pn,'w+')
except IOError:
raise
else: x = pn
if hasattr(x, 'write') and hasattr(x, 'flush'):
if self.__pipes is None:
self.__pipes=Set()
self.__pipes.add(x)
def write(self,s):
if self.__pipes:
for p in self.__pipes:
p.write(s)
def flush(self):
if self.__pipes:
for p in self.__pipes:
p.flush()
#def __enter__(self):
# pass
#def __exit__(self, exc_type, exc_value, traceback):
# pass
if __name__ == '__main__':
cout=sys.stdout if True else sys.stderr
o=OutputSplitter(cout)
pass
Испаравленная версия по монивам http://govnokod.ru/17181. Учтены замечания некого Анонимус http://govnokod.ru/17181#comment256577. Надеюсь что будут еще замечания, такие же конструктивные и полезные.
−117
class DictOfLists(defaultdict): # it's possible to use dict instead
def __init__(self, *args, **kwds):
__args=self.__check_args(*args)
self.__check_kwds(**kwds)
defaultdict.__init__(self,(lambda:[]), *__args, **kwds)
# dict.__init__(self, *__args, **kwds)
def __is_valid_item(self,item):
if len(item)==2 and not hasattr(item[0],"__iter__") and hasattr(item[1],"__iter__"):
return True
return False
def __check_args(self,*args):
if len(args)>1:
if type(args) == tuple and self.__is_valid_item(args):
return [args,] # tuple of key and list of values
else:
raise TypeError("Item of %s must be a tuple of (key,IterableValue) but %s=%s is not"%\
(self.__class__.__name__,
args.__class__.__name__,
repr(args)))
if len(args) != 1: return args
if isinstance(args[0], DictOfLists): return args
if hasattr(args[0],"__iter__"):
if len(args[0]) == 0: return args # empty iterator
items = args[0].items() if type(args[0]) == dict else args[0]
if self.__is_valid_item(items):
return [args,] # tuple of key and list of values
for v in items:
if not (type(v) == tuple and len(v)==2):
raise TypeError("Item of %s must be a tuple of (key, IterableValue) but %s=%s is not"%\
(self.__class__.__name__,
v.__class__.__name__,
v))
if not hasattr(v[1],"__iter__"):
raise TypeError("Value of %s must be iterable but %s(%s) is not"%\
(self.__class__.__name__,
v[1].__class__.__name__,
repr(v[1])))
else: raise TypeError(" %s must be initialized by {},[],() or %s but %s is not"%\
(self.__class__.__name__,
self.__class__.__name__,
args[0].__class__.__name__))
return args
def __check_kwds(self, **kwds):
for v in kwds.itervalues():
if not hasattr(v,"__iter__"):
raise TypeError("Value of %s must be iterable but %s(%s) is not"%\
(self.__class__.__name__,
v.__class__.__name__,
repr(v)))
def walk(self):
for k, v in self.iteritems():
for x in v:
yield k, v, x
raise StopIteration
def __setitem__(self, *args, **kwargs):
self.__check_args(*args)
self.__check_kwds(**kwargs)
return dict.__setitem__(self, *args, **kwargs)
def update(self, *args, **kwds):
_args=self.__check_args(*args)
self.__check_kwds(**kwds)
dict.update(self,*_args, **kwds)
correct = [ {}, [], (), # empty iterable
{'k2':[], 'k22':[]}, # multipe items dict
[('k3',[]),('k32',[])], # array tuples key list val
(('k4',[]),('k42',[])), # tuple of tuples key list val
('k5',[]) # tuple of key list val
]
strange = [('e0','12'), ('e1','123')]
import inspect
def init_tester(dict_class,t_array,cs):
print "\n%s %s %s"%( inspect.currentframe().f_code.co_name, dict_class().__class__.__name__, cs )
for i in t_array:
try:
print repr(i).ljust(26), repr(dict_class(i)).ljust(74),
print ' work '.ljust(8)
except Exception,e:
print "dosn't work ",
print e
continue
print "------------------------------"
if __name__ == '__main__':
init_tester( DictOfLists, correct, "correct")
init_tester( dict, correct, "correct")
init_tester( DictOfLists, strange, "strange")
init_tester( dict, strange, "strange")
Вот такой вот словарь, значениями элементов которого могут быть только списки. В принципе легко его доделать, чтобы знаечениями были все iterable, но не строки. Кроме этого, он внимательнее проверяет агрументы. Например если ему послать ('k5',[]), он воспримет это как: k5 - key, [] - value. Build-in dict например воспринимает ('12','34') как 1 - key, 2 - value, 3 - key, 4 - value. Соответственно если ему послать ('12','345'), он ругнется. Мне показалось, что это немного странное поведение, трактовать 2-х символьные строки, как key-value. Покритикуйте please. В том числе "стиль" и "красоту".