पायथन में एक अभिव्यक्ति और एक बयान के बीच अंतर क्या है?


जवाबों:


242

भाव उसमें केवल पहचानकर्ता , शाब्दिक और ऑपरेटरों , जहां ऑपरेटरों गणित और बूलियन ऑपरेटरों, समारोह में शामिल कॉल ऑपरेटर सदस्यता ऑपरेटर और इसी तरह की है, और "मूल्य" किसी तरह का है, जो किसी भी अजगर वस्तु हो सकता है को कम किया जा सकता है। उदाहरण:() []

3 + 5
map(lambda x: x*x, range(10))
[a.x for a in some_iterable]
yield 7

कथन (देखें) 1 ,2 ), दूसरी ओर, वे सब कुछ हैं जो पायथन कोड की एक पंक्ति (या कई लाइनें) बना सकते हैं। ध्यान दें कि भाव कथन भी हैं। उदाहरण:

# all the above expressions
print 42
if x: do_y()
return
a = 7

17
अभिव्यक्तियाँ बयानों के भाग हैं
बिस्मीगलिस

59
@bismigalis: प्रत्येक वैध पायथन अभिव्यक्ति को एक बयान ( "अभिव्यक्ति कथन" कहा जाता है) के रूप में इस्तेमाल किया जा सकता है । इस अर्थ में, भाव हैं बयान।
स्वेन मार्नाच

2
एक्सप्रेशन में फ़ंक्शन कॉल भी शामिल हो सकते हैं (ऑब्जेक्ट इंस्टेंटेशन के लिए कॉलिंग क्लास सहित)। तकनीकी रूप से ये "पहचानकर्ता" हैं जैसे कि एक = कथन में मानों से बंधे हुए नाम ... भले ही बाध्यकारी 'डीफ़' या 'क्लास' कीवर्ड के माध्यम से हो। हालाँकि, इस उत्तर के लिए मैं अलग से फंक्शन कॉल्स को स्पष्ट कर दूंगा।
जिम डेनिस

2
@ जॉर्ज फेयर काफी :) अभिव्यक्ति बयान REPL के बाहर भी काफी उपयोगी हैं - यह अभिव्यक्ति बयान, जैसे print("Hello world!")या उदाहरण के लिए फ़ंक्शन कॉल अभिव्यक्तियों का उपयोग करने के लिए काफी आम है my_list.append(42)
स्वेन मार्नाच 28'19

3
@WillTaylor एक मूल्य देने वाली हर चीज़ एक अभिव्यक्ति है, यानी एक असाइनमेंट के राइट-साइड पर आप जो कुछ भी लिख सकते हैं। चूंकि a = yield 7वैध है, yield 7एक अभिव्यक्ति है। बहुत समय पहले, yieldएक बयान के रूप में पेश किया गया था, लेकिन इसे पीईपी 342 में एक अभिव्यक्ति के लिए सामान्यीकृत किया गया था ।
स्वेन मार्नाच

120

अभिव्यक्ति - न्यू ऑक्सफोर्ड अमेरिकन डिक्शनरी से :

अभिव्यक्ति: गणित प्रतीकों का एक संग्रह है जो संयुक्त रूप से एक मात्रा व्यक्त करता है: एक वृत्त की परिधि के लिए अभिव्यक्ति 2πr है।

सकल सामान्य शब्दों में: भाव कम से कम एक मूल्य का उत्पादन करते हैं

पायथन में, पायथन भाषा संदर्भ में अभिव्यक्तियों को बड़े पैमाने पर कवर किया गया है सामान्य तौर पर, पायथन में अभिव्यक्तियों में परमाणुओं , प्राइमरी और ऑपरेटरों के एक वाक्यविन्यास कानूनी संयोजन से बना होता है ।

विकिपीडिया से अजगर के भाव

अभिव्यक्ति के उदाहरण:

ऑपरेटरों और अंतर्निहित कार्यों या उपयोगकर्ता-लिखित कार्यों के कॉल के साथ शाब्दिक और वाक्यविन्यास सही संयोजन :

>>> 23
23
>>> 23l
23L
>>> range(4)
[0, 1, 2, 3] 
>>> 2L*bin(2)
'0b100b10'
>>> def func(a):      # Statement, just part of the example...
...    return a*a     # Statement...
... 
>>> func(3)*4
36    
>>> func(5) is func(a=5)
True

विकिपीडिया से कथन :

कंप्यूटर प्रोग्रामिंग में एक स्टेटमेंट को अनिवार्य प्रोग्रामिंग लैंग्वेज का सबसे छोटा स्टैंडअलोन तत्व माना जा सकता है। एक कार्यक्रम एक या अधिक कथनों के अनुक्रम द्वारा बनता है। एक बयान में आंतरिक घटक (जैसे, भाव) होंगे।

विकिपीडिया से अजगर बयान

सामान्य शब्दों में: कथन कुछ करें और अक्सर अभिव्यक्तियों (या अन्य कथनों) से बने होते हैं

पायथन लैंग्वेज रेफरेंस में सरल स्टेटमेंट्स और कंपाउंड स्टेटमेंट्स को बड़े पैमाने पर शामिल किया गया है।

"स्टेटमेंट्स समथिंग समथिंग" और "एक्सप्रेशंस एक वैल्यू प्रोड्यूस करते हैं" डिस्टिंक्शन तो धुंधली हो सकती है:

  • सूची की समझ को "अभिव्यक्तियाँ" माना जाता है, लेकिन उनके पास लूपिंग कंस्ट्रक्शन हैं और इसके अलावा डू समथिंग भी है।
  • ifआम तौर पर एक बयान, के रूप में इस तरह के है if x<0: x=0, लेकिन आप भी एक हो सकता है सशर्त अभिव्यक्ति की तरह x=0 if x<0 else 1है कि अभिव्यक्ति कर रहे हैं। अन्य भाषाओं में, सी की तरह, इस फॉर्म को इस तरह एक ऑपरेटर कहा जाता हैx=x<0?0:1;
  • आप एक फ़ंक्शन लिखकर अपनी अभिव्यक्तियाँ लिख सकते हैं। def func(a): return a*aएक अभिव्यक्ति है जब इस्तेमाल किया जाता है लेकिन परिभाषित किए जाने पर बयान से बना होता है।
  • एक अभिव्यक्ति जो रिटर्न Noneपायथन में एक प्रक्रिया है: def proc(): passसिंथेटिक रूप से, आप proc()एक अभिव्यक्ति के रूप में उपयोग कर सकते हैं , लेकिन यह शायद एक बग है ...
  • एक एक्सप्रेशन और स्टेटमेंट के बीच अंतर पर सी कहने की तुलना में पायथन थोड़ा अधिक सख्त है। सी में, कोई भी अभिव्यक्ति एक कानूनी बयान है। आपके पास func(x=2);एक अभिव्यक्ति या कथन हो सकता है? ( उत्तर: अभिव्यक्ति एक साइड-इफेक्ट के साथ एक बयान के रूप में उपयोग किया जाता है। ) पायथन में x=2फ़ंक्शन कॉल के अंदर का असाइनमेंट स्टेटमेंट func(x=2)नामित तर्क aको केवल कॉल में 2 पर सेट करता funcहै और सी उदाहरण से अधिक सीमित है।

"मेरे शब्दकोश से" का अर्थ आपकी व्यक्तिगत राय है या शब्दकोश जो ऑक्सफोर्ड शब्दकोश के समान है? धन्यवाद
Talespin_Kit

1
@Talespin_Kit: ... आपकी व्यक्तिगत राय या शब्दकोश आप ऑक्सफोर्ड डिक्शनरी की तरह ही हैं? अच्छा प्रश्न। मैंने मैक पर Apple डिक्शनरी ऐप का इस्तेमाल किया जो न्यू ऑक्सफोर्ड अमेरिकन डिक्शनरी पर आधारित है।
dawg

80

हालांकि यह पायथन से संबंधित नहीं है:

एक expressionमान का मूल्यांकन करता है। A statementकुछ करता है।

>>> x + 2         # an expression
>>> x = 1         # a statement 
>>> y = x + 1     # a statement
>>> print y       # a statement (in 2.x)
2

3
लेकिन ध्यान दें कि वास्तव में "शुद्ध" वाले को छोड़कर सभी भाषा में, भाव "कुछ कर सकते हैं" (अधिक औपचारिक रूप से: एक साइड इफेक्ट है) बस।

@ डायलेन: क्या आप एक उदाहरण (जिज्ञासु) दे सकते हैं? मैं नहीं जानता हूँ।
user225312

4
इसी तरह, somelist.append(123)। अधिकांश फ़ंक्शन कॉल, वास्तव में।
थॉमस के

13
y = x + 1 एक अभिव्यक्ति नहीं बल्कि एक कथन है। Eval ("y = x + 1") आज़माएं और आपको एक त्रुटि होगी।
अर्गलनियर

3
y = x +1 एक अभिव्यक्ति कथन है
इमैनुएल ओसिमोसु

13

कथन एक क्रिया या आदेश का प्रतिनिधित्व करते हैं जैसे प्रिंट स्टेटमेंट, असाइनमेंट स्टेटमेंट।

print 'hello', x = 1

अभिव्यक्ति चर, संचालन और मूल्यों का एक संयोजन है जो एक परिणाम मूल्य प्राप्त करता है।

5 * 5 # yields 25

अंत में, अभिव्यक्ति बयान

print 5*5

8

एक अभिव्यक्ति एक ऐसी चीज है जिसे एक मूल्य के लिए कम किया जा सकता है, उदाहरण के लिए "1+3"या "foo = 1+3"

यह जांचना आसान है:

print foo = 1+3

यदि यह काम नहीं करता है, यह एक बयान है, अगर यह करता है, यह एक अभिव्यक्ति है।

एक और बयान हो सकता है:

class Foo(Bar): pass

क्योंकि यह एक मूल्य के लिए कम नहीं किया जा सकता है।


1
अपना पहला उदाहरण को क्रियान्वित करने में दिखाई देगा के रूप में, काम है नहीं - (वास्तव में नहीं, यह है कि एक अभिव्यक्ति a = b = exprअजगर में, एक विशेष मामले के रूप में अनुमति दी जाती है)। C से अधिक प्रेरणा लेने वाली भाषाओं में, यह है।

class Foo(bar):एक बयान की शुरुआत है, एक पूर्ण वक्तव्य नहीं है।
स्वेन मार्नाच

1
foo = 1+3अभिव्यक्ति नहीं है। यह एक बयान (सटीक होने के लिए एक असाइनमेंट) है। भाग 1+3हालांकि एक अभिव्यक्ति है।
पिथिकोस

2
मेरा सूत्रीकरण बहुत सटीक है: "अगर यह काम नहीं करता है, तो यह एक बयान है, अगर यह करता है, तो यह एक अभिव्यक्ति है।" इसे निष्पादित करें, और आपके पास आपका जवाब होगा।
फ्लाविस

8
  1. एक अभिव्यक्ति एक बयान है जो एक मूल्य लौटाता है। इसलिए यदि यह एक असाइनमेंट के दाईं ओर, या एक विधि कॉल के पैरामीटर के रूप में प्रकट हो सकता है, तो यह एक अभिव्यक्ति है।
  2. संदर्भ के आधार पर कुछ कोड अभिव्यक्ति या कथन दोनों हो सकते हैं। भाषा अस्पष्ट होने पर दोनों के बीच अंतर करने का एक साधन हो सकता है।

5

एक अभिव्यक्ति कुछ है, जबकि एक बयान कुछ करता है।
एक अभिव्यक्ति एक बयान के रूप में अच्छी तरह से है, लेकिन यह एक वापसी होनी चाहिए।

>>> 2 * 2          #expression
>>> print(2 * 2)     #statement

पुनश्च: दुभाषिया हमेशा सभी भावों के मूल्यों को छापता है।


मेरी राय में, एक बयान एक अशक्त मूल्य के साथ एक अभिव्यक्ति है
अदलकर

3

बयान:

स्टेटमेंट एक एक्शन या एक कमांड है जो कुछ करता है। Ex: If-Else, Loops..etc

val a: Int = 5
If(a>5) print("Hey!") else print("Hi!")

अभिव्यक्ति:

एक अभिव्यक्ति मूल्यों, ऑपरेटरों और शाब्दिक का संयोजन है जो कुछ पैदावार देता है।

val a: Int = 5 + 5 #yields 10

यह इस मौजूदा उत्तर का एक डुप्लिकेट है: stackoverflow.com/questions/4728073/…
कर्ल

1
शायद यह डुप्लिकेट है, लेकिन यह ऊपर दिए गए प्रश्न के लिए मेरे विचार साझा करता है। कोई अपराध नहीं
राजा शेखर

1

एक स्टेटमेंट में एक कीवर्ड होता है।

एक अभिव्यक्ति में एक कीवर्ड नहीं है।

print "hello"एक वक्तव्य है, क्योंकि printएक खोजशब्द है।

"hello" एक अभिव्यक्ति है, लेकिन सूची संपीड़न इसके खिलाफ है।

निम्नलिखित एक अभिव्यक्ति बयान है, और यह सूची समझ के बिना सच है:

(x*2 for x in range(10))

4
वह दृढ़ता से 'कीवर्ड' की आपकी परिभाषा पर निर्भर करता है। x = 1पूरी तरह से ठीक बयान है, लेकिन इसमें कीवर्ड नहीं हैं।
जोस्ट

नहीं, उदाहरण के isलिए एक कीवर्ड है, लेकिन x is yजरूरी नहीं कि एक बयान हो (सामान्य तौर पर यह सिर्फ एक अभिव्यक्ति है)।
बेंजामिन

1

भाव:

  • अभिव्यक्तिएं संयोजन objectsऔर द्वारा बनाई जाती हैं operators
  • एक अभिव्यक्ति का एक मूल्य है, जिसका एक प्रकार है।
  • एक सरल अभिव्यक्ति के लिए सिंटैक्स:<object><operator><object>

2.0 + 3एक अभिव्यक्ति है जो इसका मूल्यांकन करती है 5.0और इसके साथ एक प्रकार floatजुड़ा हुआ है।

बयान

कथन अभिव्यक्ति (ओं) से बना है। यह कई लाइनों को फैला सकता है।


1

कुछ कथन हैं जो हमारे पायथन कार्यक्रम की स्थिति को बदल सकते हैं: चर बनाएं या अपडेट करें, फ़ंक्शन को परिभाषित करें, आदि।

और भाव बस कुछ मान लौटाते हैं जो एक फ़ंक्शन में वैश्विक स्थिति या स्थानीय स्थिति को बदल नहीं सकते हैं।

लेकिन अब हम मिल गए :=, यह एक विदेशी है!


-1

पायथन अभिव्यक्तियों को "अभिव्यक्ति कथन" कहता है, इसलिए सवाल शायद पूरी तरह से नहीं बना है।

एक बयान में बहुत कुछ शामिल है जो आप पायथन में कर सकते हैं: एक मूल्य की गणना करना, एक मूल्य निर्दिष्ट करना, एक चर को हटाना, एक मूल्य को प्रिंट करना, एक फ़ंक्शन से वापस आना, एक अपवाद उठाना, आदि। पूरी सूची यहां है: http: // docs.python.org/reference/simple_stmts.html#

एक मूल्य कथन कॉलिंग फ़ंक्शंस (जैसे, math.cos (थीटा)), ऑपरेटरों (जैसे, "2 + 3"), आदि के लिए एक मूल्य का उत्पादन करने तक सीमित है।


10
नहीं, पायथन अभिव्यक्तियों को "अभिव्यक्ति कथन" नहीं कहता है। पायथन केवल एक ही अभिव्यक्ति "अभिव्यक्ति बयान" से मिलकर बयानों को बुलाता है।
स्वेन मार्नाच

... और ऐसा करने वाला वह अकेला नहीं है।

-1

मुझे लगता है कि एक अभिव्यक्ति में ऑपरेटर + ऑपरेंड और ऑब्जेक्ट होता है जो ऑपरेशन के परिणाम को रखता है ... उदा

var sum = a + b;

लेकिन एक कथन केवल एक कोड की एक पंक्ति है (यह एक अभिव्यक्ति हो सकती है) या कोड का ब्लॉक ... उदा

fun printHello(name: String?): Unit {
if (name != null)
    println("Hello ${name}")
else
    println("Hi there!")
// `return Unit` or `return` is optional

}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.