Ноу хау - от мастеров на заметку » Страница 4

-

Программирование на Python



_killed_


репутация: 13
на сайте с 2009 года
сообщений: 59

HTC Incredible S

Нижний Новгород, С-Петербург

Возраст - 37

#31

Цитата: JOIN_ME
range - список, xrange - кортеж


>>> 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__']
>>>
чтото кортежем тут не пахнет вовсе, это даже не генератор... хотя в нем есть что-то от кортежа, он не изменяем в теле цикла

Andre-4667


репутация:
на сайте с 1970 года
сообщений:

#32

>>> 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']


Всё мрачно belay

_killed_


репутация: 13
на сайте с 2009 года
сообщений: 59

HTC Incredible S

Нижний Новгород, С-Петербург

Возраст - 37

#33

в общем тут https://docs.python.org/library/functions.html#xrange сказано примерно следующее:
функция xrange имеет небольшое преимущество преред range и представляет непрозрачный тип (скользкий наверно)..
хотя за 4+ года пользования этой фигулькой ни разу не задумывался как оно работает и доволен)
-------------
добавлено в 18.31:

Цитата: JOIN_ME
Циклом является конструкция for/in.

не совсем верно:
оператором цикла являются 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

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#34

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_


репутация: 13
на сайте с 2009 года
сообщений: 59

HTC Incredible S

Нижний Новгород, С-Петербург

Возраст - 37

#35

да по сути пофиг что оно из себя представляет главное приучиться использовать его везде где только возможно по мере необходимости, завязанной на неизменяемой последовательности

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#36

_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 =)

_killed_


репутация: 13
на сайте с 2009 года
сообщений: 59

HTC Incredible S

Нижний Новгород, С-Петербург

Возраст - 37

#37

ну да, итераторы генераторы и функции фабрики иногда выручают когда стандартные средства питон не могут что-то решить

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#38

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)

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 53

#39

О. Вот и добрались до софтклавиш в popup_menu. А помню в теме спрашивал, говорили нельзя.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 53

#40

Виталь, а в appuifw2.query(u'...', 'query') можно правый софт заменить, а то 'Отмена' не всегда подходит?


Яндекс.Метрика