प्रिंट के लिए स्टेटमेंट अगर इनलाइन कैसे लिखें?


376

मुझे केवल कुछ सामान प्रिंट करने की आवश्यकता होती है जब एक बूलियन चर सेट किया जाता है True । तो, देखने के बाद यह , मैं एक सरल उदाहरण के साथ करने की कोशिश की:

>>> a = 100
>>> b = True
>>> print a if b
  File "<stdin>", line 1
    print a if b
             ^
SyntaxError: invalid syntax  

एक ही बात करता है, तो मैं लिखने के print a if b==True

मुझे यहां क्या समझ नहीं आ रहा है?



2
अच्छा प्रश्न, जटिल उत्तर ... एक सीधा "बाकी हिस्सा अनिवार्य है" होगा।
मिनट

जवाबों:


737

पायथन में अनुगामी कथन नहीं है ।if

ifपायथन में दो प्रकार हैं :

  1. if बयान:

    if condition: statement
    if condition:
        block
  2. if अभिव्यक्ति (पायथन 2.5 में पेश की गई)

    expression_if_true if condition else expression_if_false

और ध्यान दें, कि दोनों print aऔर b = aकथन हैं। केवल aभाग एक अभिव्यक्ति है। तो अगर आप लिखेंगे

print a if b else 0

इसका मतलब

print (a if b else 0)

और इसी तरह जब आप लिखते हैं

x = a if b else 0

इसका मतलब

x = (a if b else 0)

अब अगर कोई elseक्लॉज नहीं होता तो वह क्या प्रिंट / असाइन करता ? प्रिंट / असाइनमेंट है अभी भी है

और ध्यान दें, यदि आप इसे नहीं चाहते हैं, तो आप हमेशा ifएक पंक्ति में नियमित विवरण लिख सकते हैं , हालांकि यह कम पठनीय है और दो-लाइन संस्करण से बचने के लिए वास्तव में कोई कारण नहीं है।


मुझे लगता है कि if condition: statementबहुभाषी बयानों के मामले में काम नहीं करता है।
वैल

हां, लेकिन आपको इसका उपयोग करने की आवश्यकता नहीं है, बस बूलियन तर्क का उपयोग करें जैसे कि मैं अपने उदाहरणों में नीचे दिखाता हूं।
एडुआर्डो

1
@JanHudec यदि पायथन में अनुगामी नहीं है if, तो यह काम क्यों करता है print [i for i in range(10) if i%2]:? काश वे इसे समझ से बाहर होने देते ...
mbomb007

3
@ mbomb007, यदि स्टेटमेंट या तो कोई अनुगामी नहीं है । यह बस सूची (या जनरेटर) की समझ का हिस्सा है। ध्यान दें कि इससे पहले कि अगर बात एक बयान नहीं है, यह forउनके बीच दो भाव है।
Jan Hudec

2
@AlexandervonWernherr, हाँ, यह उचित लगता है।
जन हडेक

93

इनलाइन अगर-बाकी EXPRESSION हमेशा किसी और खंड, जैसे शामिल होना चाहिए:

a = 1 if b else 0

यदि आप अपने 'ए' वैरिएबल वैल्यू को अपरिवर्तित छोड़ना चाहते हैं - पुराने को 'ए' मान देना (और अभी भी सिंटिक मांगों के लिए आवश्यक है:)

a = 1 if b else a

इस कोड में छोड़ देता है एक अपरिवर्तित जब ख बदल जाता है झूठी किया जाना है।


1
ओह। लेकिन क्या होगा अगर मुझे दूसरी शाखा में कुछ भी नहीं करना है? मुझे कुछ इस तरह की आवश्यकता है:print a if b
रिकी रॉबिन्सन

2
else aबेहतर तो होगाelse 0
निर्द्रव

13
if b: print aबस उस मामले में एक सरल की जरूरत है
jamylak

4
उत्तर को ठीक करना, क्योंकि यह लगभग अच्छा है अगर यह 'कथन' शब्द के लिए नहीं था जिसने इसे पूरी तरह से खराब कर दिया। सवाल का सार यह है कि यह एक बयान नहीं है।
जन हडेक

1
+ 1-1: अच्छी उनका कहना है कि किसी और अभिव्यक्ति अनिवार्य है, लेकिन ठीक नहीं है के लिए प्रश्न में मामले के लिए इस सवाल का जवाब नहीं दे के लिए: प्रिंट "कुछ भी नहीं" (की तर्ज पर कुछ ""या Noneअन्य उत्तर में विवरण देखें)।
sancho.s ReinstateMonicaCellio 13

18

The और ’कथन अनिवार्य है। आप इस तरह से सामान कर सकते हैं:

>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>> 

संपादित करें:

या, अपनी आवश्यकताओं के आधार पर, आप कोशिश कर सकते हैं:

>>> if b: print(a)

15

यदि आप नहीं चाहते हैं कि from __future__ import print_functionआप निम्न कार्य कर सकते हैं:

a = 100
b = True
print a if b else "",  # Note the comma!
print "see no new line"

कौन सा प्रिंट:

100 see no new line

यदि आप from __future__ import print_function3 या बाद के पायथन का उपयोग नहीं कर रहे हैं या उससे प्रभावित नहीं हैं:

from __future__ import print_function
a = False
b = 100
print(b if a else "", end = "")

अपने कोड को सिंटैक्टली रूप से सही बनाने के लिए आपको केवल एक और परिवर्तन करना होगा, आपको सशर्त अभिव्यक्ति ("यदि अन्य ब्लॉक करता है") के लिए अन्य की आवश्यकता है

कारण मैं का उपयोग नहीं किया Noneया 0की तरह धागे में अन्य लोगों का इस्तेमाल किया है, क्योंकि उपयोग कर रहा है None/0करने के लिए कार्यक्रम का कारण होता है print Noneया print 0ऐसे मामलों में जहां में bहै False

यदि आप इस विषय के बारे में पढ़ना चाहते हैं तो मैंने एक लिंक शामिल किया है पैच के लिए जारी किए गए नोट्स का कि यह सुविधा पायथन में जोड़ी गई थी।

उपरोक्त 'पैटर्न' PEP 308 में दिखाए गए पैटर्न के समान है:

यह वाक्यविन्यास अजीब और पीछे की ओर लग सकता है; क्यों हालत अभिव्यक्ति के बीच में नहीं जाती है, और सी के सामने की तरह नहीं है? x: y? मानक पुस्तकालय में मॉड्यूल में नए सिंटैक्स को लागू करने और परिणामी कोड को पढ़ने के तरीके को देखकर निर्णय की जाँच की गई। कई मामलों में जहां एक सशर्त अभिव्यक्ति का उपयोग किया जाता है, एक मान 'सामान्य मामला' लगता है और एक मान एक 'असाधारण मामला' है, जिसका उपयोग केवल दुर्लभ अवसरों पर किया जाता है जब शर्त पूरी नहीं होती है। सशर्त सिंटैक्स इस पैटर्न को थोड़ा और स्पष्ट करता है:

सामग्री = ((doc + '\ n') यदि doc और '')

इसलिए मुझे लगता है कि कुल मिलाकर यह अनुमोदन करने का एक उचित तरीका है, लेकिन आप सरलता के साथ बहस नहीं कर सकते:

if logging: print data

धन्यवाद। यहाँ बात यह है कि print ""अभी भी कुछ छपेगा: एक रिक्त रेखा।
रिकी रॉबिन्सन

धन्यवाद। endमें argumnt printकेवल, सही अजगर 3.x में दिखाई देता है?
रिकी रॉबिन्सन

1
ऐ, मैं एक 2.7 आदमी से अधिक हूंfrom __future__ import print_function
नोल्कड

11

२.५ के बाद से आप C के "?:" टर्नरी कंडीशनल ऑपरेटर के बराबर उपयोग कर सकते हैं और सिंटेक्स है:

[on_true] if [expression] else [on_false]

तो आपका उदाहरण ठीक है, लेकिन आपको बस जोड़ना है else, जैसे:

print a if b else ''

2
ध्यान दें कि print ''वसीयत अभी भी एक नई लाइन प्रिंट करेगी, जिसे नोएल्क द्वारा उत्तर में टाला गया है।
15:20 पर yoniLavi

8

आप उपयोग कर सकते हैं:

print (1==2 and "only if condition true" or "in case condition is false")

जैसे भी हो आप इसे जारी रख सकते हैं:

print 1==2 and "aa" or ((2==3) and "bb" or "cc")

वास्तविक दुनिया उदाहरण:

>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
1 item found.
>>> count = 2
>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
2 items found.

7

यह स्ट्रिंग प्रारूपण के साथ किया जा सकता है । यह% संकेतन के साथ-साथ .format () और f- स्ट्रिंग्स (नए से 3.6 पर) के साथ काम करता है

print '%s' % (a if b else "")

या

print '{}'.format(a if b else "")

या

print(f'{a if b else ""}')

इसका स्वरूपण से कोई लेना-देना नहीं है; आप बस कर सकते हैं print a if b else ""। जो वास्तव में नोएलकेड का जवाब है।
मेलपोमिन

@melpomene लेकिन प्रिंटिंग "" एक नई लाइन का विज्ञापन करता है, जिसे print "",Python2 के लिए (कोलन) और Python3 के लिए उपयोग करने से बचा जा सकता है print("", end="")
m3nda

5

आपके मामले के लिए यह काम करता है:

a = b or 0

संपादित करें: यह कैसे काम करता है?

प्रश्न में

b = True

इसलिए मूल्यांकन कर रहे हैं

b or 0

का परिणाम

True

जिसे सौंपा गया है a

यदि b == False?, b or 0दूसरे ऑपरेंड का मूल्यांकन 0करेगा जिसे सौंपा जाएगा a


3
इस अभिव्यक्ति की अस्पष्टता और त्रुटि का कारण यही कारण है कि हमारे पास पहले स्थान पर सशर्त अभिव्यक्ति है।
Jan Hudec

5

इसे इस्तेमाल करे । यह आपकी मदद कर सकता है

a=100
b=True

if b:
   print a

4

आप बस ओवरकोम्प्लीकेट कर रहे हैं।

if b:
   print a

1
बेशक यह सबसे आसान विकल्प है। मुझे लगता है कि उस समय (अगस्त 2012) मैं कुछ ऐसा करना चाहता था:if DEBUG: print something
रिकी रॉबिन्सन

डुप्लिकेट उत्तर? SkariaArun द्वारा देखें, और एक टिप्पणी भी।
sancho.s ReinstateMonicaCellio

2

आपको हमेशा elseइनलाइन की आवश्यकता होती है यदि:

a = 1 if b else 0

लेकिन ऐसा करने का एक आसान तरीका होगा a = int(b)


3
-1: आसान। और पूरी तरह से अपठनीय है। और वैसे भी पूछने वाला नहीं चाहता था।
Jan Hudec

ITYM a = int(bool(b))
21

1

अच्छा आप बस क्यों नहीं लिखते:

if b:
    print a
else:
    print 'b is false'

1

हम्म्, आप इसे एक सूची समझ के साथ कर सकते हैं । यह केवल तभी समझ में आएगा जब आपके पास एक वास्तविक सीमा थी .. लेकिन यह काम करता है:

print([a for i in range(0,1) if b])

या बस उन दो चर का उपयोग करना:

print([a for a in range(a,a+1) if b])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.