अजगर में नो-ऑप करने का एक मानक तरीका क्या है?


160

मैं अक्सर खुद को यह लिखता हूं कि अगर / elif / अन्यथा अजगर में निर्माण करता है, और मैं उन विकल्पों को शामिल करना चाहता हूं जो हो सकते हैं, लेकिन जिसके लिए संबंधित कार्रवाई कुछ भी नहीं करना है। मुझे लगता है कि मैं सिर्फ बयानों को छोड़ सकता हूं, लेकिन पठनीयता के लिए मुझे लगता है कि यह उन सभी को शामिल करने में मदद करता है, ताकि यदि आप कोड के माध्यम से देख रहे हैं तो आप देख सकते हैं कि प्रत्येक विकल्प के परिणामस्वरूप क्या होता है। मैं नो-ऑप को कैसे कोड करूं? वर्तमान में, मैं इसे इस तरह कर रहा हूं:

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

नो-ऑप के लिए पास का उपयोग करें :

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

और यहाँ एक और उदाहरण है:

def f():
  pass

या:

class c:
  pass

3
एक-लाइनर के रूप में, मैं उपयोग करता हूं doSQL = lambda *x:x
सेस टिम्मरमैन

2
आप "पास" के स्थान पर "कोई नहीं" का उपयोग कर सकते हैं लेकिन यह किसी भी कोड को स्पष्ट नहीं करता है।
DevPlayer

क्या यह टर्नरी संचालन के लिए समर्थित है, विशेष रूप से के तहत else?
अलेक्सेज मगुरा

2
@AlexejMagura नहीं, क्योंकि passकोई मान नहीं है। मैं यह भी नहीं देख सकता कि यह कैसे उपयोगी हो सकता है।
L3viathan


12

यदि आपको एक फ़ंक्शन की आवश्यकता है जो एक एनओपी के रूप में व्यवहार करता है, तो प्रयास करें

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/fieldsions.html## eval अगर आपको चाहिए)।
मछली

lambdaएक फ़ंक्शन को पुन: उपयोग के लिए एक चर में असाइन करने के लिए उपयोग करना खराब कोडिंग शैली है। उसके defलिए है।
बछसौ

0

एक और तरीका एलिप्सिस के साथ है:

def foo():
    ...

यह किसी भी अन्य वस्तु के नामकरण से बेहतर नहीं है। तुम भी लिख सकता है None, 136या "NothingHere"। लेकिन अजगर में सही भराव है pass
बछसौ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.