Какой стандартный способ сделать no-op в python?

160

Я часто пишу, что / elif / else создает в python, и я хочу включить опции, которые могут возникнуть, но для которых соответствующее действие ничего не делает. Я понимаю, что могу просто исключить эти операторы if, но для удобства чтения я считаю, что это помогает включить их все, так что если вы просматриваете код, вы можете видеть, что происходит в результате каждой опции. Как я могу кодировать no-op? В настоящее время я делаю это так:

no_op = 0

if x == 0:
    y = 2 * a
elif x == 1:
    z = 3 * b
elif x == 3:
    no_op

(Код на самом деле немного длиннее и сложнее. Это просто для иллюстрации структуры).

Я не люблю использовать переменную в качестве запрета, но это самый лучший способ, о котором я мог подумать. Есть ли способ лучше?

Бен
источник
1
Этот многоточие ( ...) также заслуживает упоминания: stackoverflow.com/a/6189281/38281
Патрик

Ответы:

288

Используйте pass для no-op:

if x == 0:
  pass
else:
  print "x not equal 0"

И вот еще один пример:

def f():
  pass

Или:

class c:
  pass
Брайан Р. Бонди
источник
3
В качестве однострочника я использую doSQL = lambda *x:x.
Сис Тиммерман
2
Вы можете использовать «None» вместо «pass», но это не проясняет код.
DevPlayer
Поддерживается ли это для троичных операций, особенно под else?
Алексей Магура
2
@AlexejMagura Нет, потому что passэто не ценность. Я также не вижу, как это может быть полезно.
L3viathan
12

Если вам нужна функция, которая ведет себя как nop, попробуйте

nop = lambda *a, **k: None
nop()

Иногда я делаю такие вещи, когда делаю зависимости необязательными:

try:
    import foo
    bar=foo.bar
    baz=foo.baz
except:
    bar=nop
    baz=nop

# Doesn't break when foo is missing:
bar()
baz()
Эндрю Вагнер
источник
1
Это хороший обходной путь, когда требуется nopконтекст, в котором конкретно требуется выражение (вместо произвольного выражения; qv docs.python.org/3/reference/simple_stmts.html и docs.python.org/3/reference/compound_stmts. html ) - например, как подвыражение к существующей идиоме кода, например, понимание, или lambda, или (не дай бог) строка для передачи eval(…)(которая qv docs.python.org/3/library/functions.html# eval, если нужно).
fish2000
Использование lambdaдля присвоения функции переменной для повторного использования - плохой стиль кодирования. Есть defдля этого.
Бахсау
0

Еще один способ с многоточием:

def foo():
    ...
Рэй З.
источник
Это не лучше, чем просто назвать любой другой объект. Вы также можете написать None, 136или "NothingHere". Но правильный пробел в python есть pass.
Бахсау