Подкачка Pythonic?

При использовании jQuery UI, у Вас есть переводы для общих кодов клавиши. В ui/ui/ui.core.js:

$.ui.keyCode = { 
    ...
    ENTER: 13, 
    ...
};

существуют также некоторые переводы в tests/simulate/jquery.simulate.js, но я не мог найти никого в базовой библиотеке JS. Следите за Вами, я просто grep'ed источники. Возможно, существует некоторый другой способ избавиться от этих магических чисел.

можно также использовать String.charCodeAt и .fromCharCode:

>>> String.charCodeAt('\r') == 13
true
>>> String.fromCharCode(13) == '\r'
true

15
задан jagttt 19 July 2009 в 12:43
поделиться

5 ответов

Единственное, что я мог бы изменить в вашем примере кода: если вы собираетесь использовать какое-то длинное имя, такое как self.memberlist снова и снова, часто бывает больше читаемый псевдоним ("назначить") его сначала более короткому имени. Так, например, вместо длинного, трудно читаемого:

self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]

вы можете кодировать:

L = self.memberlist
L[someindexA], L[someindexB] = L[someindexB], L[someindexA]

Помните, что Python работает по ссылке, поэтому L ссылается на тот же объект, что и self.memberlist , НЕ копия (по тому же признаку назначение выполняется очень быстро, независимо от того, насколько длинным может быть список, потому что он все равно не копируется - это просто еще одна ссылка).

Я не думаю, что какие-либо дальнейшие осложнения оправданы , хотя, конечно, можно легко придумать некоторые причудливые, например (для a, b "нормальных" индексов > = 0 ):

def slicer(a, b):
  return slice(a, b+cmp(b,a), b-a), slice(b, a+cmp(a,b), a-b)

back, forth = slicer(someindexA, someindexB)
self.memberlist[back] = self.memberlist[forth]

Я думаю, что выяснение таких «продвинутых» применений - это хорошее самомнение, полезное умственное упражнение и хорошее развлечение - я рекомендую заинтересованным читателям, когда общая идея станет ясной, сосредоточиться на роли тех, кто + cmp и то, как они заставляют все работать для трех возможностей (a> b, a

Помните, простой лучше, чем сложный !

сосредоточьтесь на роли этих + cmp и на том, как они заставляют все работать для трех вариантов (a> b, a

Помните, простой лучше, чем сложный !

сосредоточьтесь на роли этих + cmp и на том, как они заставляют все работать для трех вариантов (a> b, a

Помните, простой лучше, чем сложный !

14
ответ дан 1 December 2019 в 02:02
поделиться
a, b = b, a

Совершенно питонская идиома. Он короткий и читаемый, если имена ваших переменных достаточно короткие.

16
ответ дан 1 December 2019 в 02:02
поделиться

Трудно представить, как его можно было бы сделать более элегантным: с помощью гипотетической встроенной функции ... swap_sequence_elements (arr, first, second) элегантно? возможно, но это на территории YAGGI - вы не получите этого ;-) - и накладные расходы на вызов функции будут / должны оттолкнуть вас от реализации этого самостоятельно.

То, что у вас есть, намного элегантнее, чем альтернативный встроенный способ:

temp = arr[first]
arr[first] = arr[second]
arr[second] = temp

и (бонус!) тоже быстрее (при небезосновательном предположении, что байт-код ROT_TWO быстрее, чем LOAD_FAST плюс STORE_FAST) ).

1
ответ дан 1 December 2019 в 02:02
поделиться

Я полагаю, вы могли бы воспользоваться аргументом step в нотации среза, чтобы сделать что-то вроде этого:

myarr [: 2] = myarr [: 2] [:: - 1]

Я не уверен, что это яснее или питоннее ...

-1
ответ дан 1 December 2019 в 02:02
поделиться

a, b = b, a примерно такой короткий, как вы получите, это всего три символа (не считая имен переменных) ..Он примерно такой же, как Python'y, который вы получите

. Одна альтернатива - обычная use-a-temp-variable:

self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]

.. становится ..

temp = self.memberlist[someindexB]
self.memberlist[someindexB] = self.memberlist[someindexA]
self.memberlist[someindexA] = temp

.. что я считаю более беспорядочным и менее "очевидным"

Другой способ, который может быть немного более читабельным с длинными именами переменных:

a, b = self.memberlist[someindexA], self.memberlist[someindexB]
self.memberlist[someindexA], self.memberlist[someindexB] = b, a
1
ответ дан 1 December 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: