- Главная
- Форум
- Программирование
- Программирование на Python
- Ноу хау - от мастеров на заметку » Страница 4
Ноу хау - от мастеров на заметку » Страница 4
-Программирование на Python
>>> xrange(3)
xrange(3)
>>> x=xrange(3)
>>> type(x)
>>> dir(x)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>>
чтото кортежем тут не пахнет вовсе, это даже не генератор... хотя в нем есть что-то от кортежа, он не изменяем в теле цикла
>>> a=range(3)
>>> b=xrange(3)
>>> type(a)
<type 'list'>
>>> type(b)
<type 'xrange'>
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> dir(b)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> type((1, 2, 3))
<type 'tuple'>
>>> dir((1, 2, 3))
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
Всё мрачно
в общем тут https://docs.python.org/library/functions.html#xrange сказано примерно следующее:
функция xrange имеет небольшое преимущество преред range и представляет непрозрачный тип (скользкий наверно)..
хотя за 4+ года пользования этой фигулькой ни разу не задумывался как оно работает и доволен)
-------------
добавлено в 18.31:
не совсем верно:
оператором цикла являются for, while в python
в то время как IN - это ключевое слово и имеет разное определение в разных условия
в цикле for value in list: означает как ИЗ т.е в прямом смысле выборка из списка/кортежа и присвоение выбранного значения переменной value
в то время как в операторах условия if elif и цикле while означает ПОИСК вхождения без присвоений if a in b: тоже самое можно записать if b.find(a): возвращающее bool значение (true / false)
так же в операторах условия переменные поддающиеся счетчику len(x) и имеющие счет >0 можно не проверять на количство записей а просто передать эту переменную в оператор условия:
if None:
if "":
if {}:
if []:
if ():
# то же самое что и
if 0:
if False:
# а запись вида
if not value:
# подставляет противоположный знак следующей за ним переменной.
# не явному значению оператора вхождения или сравнения, результату выполнения ф-и
# и проверяет условие.. выворачивает на изнанку все что после него
подобные записи зачастую делают код более читаемым и красивым нежели нагромождения типа
if len(classname.list_value)!=0 and len(classname_1.tuple_value)>0 и бог его знает что еще даже с переносами строк: print 1
Python 2.5.4 (r254:67916, Nov 6 2009, 04:18:57) [C] on symbian_s60
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> help(xrange)
Help on class xrange in module __builtin__:
class xrange(object)
| xrange([start,] stop[, step]) -> xrange object
|
| Like range(), but instead of returning a list, returns an object that
| generates the numbers in the range on demand. For looping, this is
| slightly faster than range() and more memory efficient.
|
...
_killed_,
for без in не бывает, я отталкиваюсь от этого.
Самодельный XRange
class XRange:
def __init__(self, start, stop, step):
self.start, self.stop, self.step, self.current = start, stop, step, start - step
def __iter__(self):
return self
def next(self):
self.current += self.step
if self.current >= self.stop:
raise StopIteration
else:
return self.current
for i in XRange(12.7, 15.1, 0.7):
print i
заметьте, работает с float =)
import e32
import appuifw
from appuifw import popup_menu
if (e32.s60_version_info >= (3, 0)):
import imp
_appuifw2 = imp.load_dynamic('_appuifw2', '%s:\\sys\\bin\\_appuifw2.pyd' % appuifw.__file__[0])
del imp
else:
import _appuifw2
EAknSoftkeyOk = -2
EAknSoftkeyBack = 3001
_popup_menu= popup_menu
def popup_menu(data, title=None, menu_key_text=None, exit_key_text=None):
try:
f = lambda: (_appuifw2.command_text(EAknSoftkeyOk, menu_key_text) and _appuifw2.command_text(EAknSoftkeyBack, exit_key_text))
e32.ao_sleep(0, f)
except: pass
if title is not None:
return _popup_menu(data, title)
else:
return _popup_menu(data)
popup_menu(map(unicode, xrange(5)), u'A list', u'aga', u'nea')
Прикрепленный файл #1: aac_popup_menu.zip | скачать с зеркала | (491 b)
- «
- 1
- 2
- --
- 3
- 4
- 5
- --
- 8
- 9
- »

