पायथन बयान समाप्त करने के लिए अर्धविराम के उपयोग का वारंट नहीं करता है। तो यह (नीचे) अनुमति क्यों है?
import pdb; pdb.set_trace()
पायथन बयान समाप्त करने के लिए अर्धविराम के उपयोग का वारंट नहीं करता है। तो यह (नीचे) अनुमति क्यों है?
import pdb; pdb.set_trace()
जवाबों:
पायथन को बयानों को समाप्त करने के लिए अर्ध-कॉलनों की आवश्यकता नहीं है । यदि आप एक ही लाइन पर कई स्टेटमेंट्स डालना चाहते हैं, तो सेमी कॉलोन्स का उपयोग स्टेटमेंट्स को डिलीट करने के लिए किया जा सकता है।
अब, इसकी अनुमति क्यों है? यह एक सरल डिजाइन निर्णय है। मुझे नहीं लगता कि पायथन को इस अर्ध-औपनिवेशिक चीज़ की ज़रूरत है, लेकिन किसी ने सोचा कि यह अच्छा होगा और इसे भाषा में जोड़ा जाएगा।
timeit a = 5; a*a
timeitमतलब है? अभी भी 2 के a = 2; a*aबाद से बेकार aहै; यह होना ही होगाa = 2; a *= a
http://docs.python.org/reference/compound_stmts.html
यौगिक कथनों में एक या अधिक 'खंड होते हैं।' एक खंड में एक शीर्षक और एक 'सूट' होता है। किसी विशेष यौगिक कथन के खंड शीर्ष सभी समान इंडेंटेशन स्तर पर हैं। प्रत्येक क्लॉज हेडर एक विशिष्ट पहचान वाले कीवर्ड से शुरू होता है और एक कोलन के साथ समाप्त होता है। एक सूट एक खंड द्वारा नियंत्रित बयानों का एक समूह है। एक शीर्षक हेडर के कोलन के बाद हेडर के रूप में एक ही लाइन पर एक या अधिक अर्धविराम से अलग किए गए सरल कथन हो सकते हैं, या यह बाद की लाइनों पर एक या अधिक इंडेंट किए गए कथन हो सकते हैं । केवल सूट के बाद के रूप में नेस्टेड यौगिक बयान शामिल हो सकते हैं; निम्नलिखित गैरकानूनी है, क्योंकि यह स्पष्ट नहीं होगा कि यदि खंड निम्नलिखित निम्नलिखित खंड का है:
if test1: if test2: print xयह भी ध्यान दें कि अर्धविराम इस संदर्भ में बृहदान्त्र की तुलना में अधिक सख्त है, ताकि निम्नलिखित उदाहरण में, या तो सभी या प्रिंट विवरणों में से कोई भी निष्पादित न हो:
if x < y < z: print x; print y; print z
सारांश:
compound_stmt ::= if_stmt
| while_stmt
| for_stmt
| try_stmt
| with_stmt
| funcdef
| classdef
| decorated
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement ::= stmt_list NEWLINE | compound_stmt
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
if cond: stmt1; stmt2; stmt3
अजगर ;एक विभाजक के रूप में उपयोग करता है , न कि एक टर्मिनेटर के रूप में। आप उन्हें एक पंक्ति के अंत में भी उपयोग कर सकते हैं, जो उन्हें स्टेटमेंट टर्मिनेटर की तरह दिखता है , लेकिन यह केवल कानूनी है क्योंकि पायथन में रिक्त बयान कानूनी हैं - एक पंक्ति जिसमें अंत में अर्धविराम शामिल है, दो कथन हैं, दूसरा एक खाली।
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
उत्तर पढ़ने के बाद, मुझे अभी भी अर्धविराम के उपयोग के एक महत्वपूर्ण पहलू की याद आती है, संभवतः केवल एक ही जहां यह वास्तव में एक अंतर बनाता है ...
जब आप एक दुभाषिया REPL (पायथन इंटरेक्टिव शेल, IDLE, ipython) में काम कर रहे होते हैं, तो अंतिम अभिव्यक्ति का मान स्क्रीन पर प्रिंट हो जाता है और आमतौर पर यह इच्छित व्यवहार होता है।
लेकिन कुछ मामलों में आप केवल इसके दुष्प्रभावों के लिए एक अभिव्यक्ति का मूल्यांकन करना चाहते हैं, उदाहरण के लिए, आपके द्वारा दिए गए सिमुलेशन के परिणामों को देखने के लिए matplotlib।
इस मामलों में आप (शायद) के screenful को देखने के लिए नहीं करना चाहती reprकी रों matplotlibवस्तुओं है कि कभी कभी एक के लिए एक कॉल द्वारा दिया जाता है matplotlibकम से कम IPython में समारोह और,, संभावनाओं आप से एक के लिए एक अर्धविराम संलग्न करने के लिए है ज्यादा वर्बोज़ स्टेटमेंट, अब IPython इनपुट लाइन को दो अभिव्यक्तियों, matplotlibआह्वान और एक अशक्त कथन के रूप में देखता है , ताकि यौगिक अभिव्यक्ति का मूल्य हो Noneऔर इंटरप्रेटर द्वारा स्क्रीन पर कुछ भी नहीं छपा हो (अन्य संभावना असाइनमेंट के रूप में, _ = plot(...)लेकिन मुझे लगता है कि थोड़ा और घुसपैठ)।
IMHO, इंटरप्रेटर में वांछित आउटपुट को दबाने के लिए अर्धविराम का उपयोग IPyton नोटबुक की शुरुआत के बाद अधिक प्रासंगिक हो गया है, जो इनपुट और आउटपुट को सहेजने की अनुमति देता है, जिसमें दस्तावेज़ीकरण और अंततः पुन: उपयोग के लिए एक इंटरप्रिटेशन सत्र का आलेखीय आउटपुट भी शामिल है। ।
ipython... मैंने आपकी टिप्पणी को प्रतिबिंबित करने के लिए अपना उत्तर संपादित किया है।
जैसा कि बाकी सभी ने नोट किया है, आप अलग-अलग बयानों के लिए अर्धविराम का उपयोग कर सकते हैं। आपके पास नहीं है , और यह सामान्य शैली नहीं है।
जैसे कि यह क्यों उपयोगी है, कुछ लोग एक ही लाइन पर दो या दो से अधिक वास्तव में तुच्छ छोटे बयान रखना पसंद करते हैं (व्यक्तिगत रूप से मुझे लगता है कि यह कई तुच्छ आसानी से एक जटिल-दिखने वाली रेखा में स्किम्ड लाइनों को बदल देता है और यह देखना कठिन है कि यह तुच्छ है ।
लेकिन यह लगभग एक आवश्यकता है जब आप पायथन का उपयोग करके शेल से एक लाइनर को आमंत्रित कर रहे हैं python -c '<some python code>'। यहां आप अलग-अलग बयानों के लिए इंडेंटेशन का उपयोग नहीं कर सकते हैं , इसलिए यदि आपका वन-लाइनर वास्तव में एक दो-लाइनर है, तो आपको अर्धविराम का उपयोग करने की आवश्यकता होगी। और यदि आप अपने वन-लाइनर में अन्य तर्कों का उपयोग करना चाहते हैं, तो आपको प्राप्त करने के लिए आयात sysकरना होगा sys.argv, जिसके लिए एक अलग importकथन की आवश्यकता होती है । जैसे
python -c "import sys; print ' '.join(sorted(sys.argv[1:]))" 5 2 3 1 4
1 2 3 4 5
python: बस अपने उद्धृत कोड को कई लाइनों पर फैलाएं या एक हेरेडोक का उपयोग करें। फिर भी, अगर आप चाहते हैं कि यह "वन-लाइनर" हो जाए। ;)
-c
मुझे लगता है कि मैं एक पुराने सी प्रोग्रामर के रूप में पक्षपाती हूं, लेकिन ऐसे समय होते हैं जब विभिन्न पायथन सम्मेलनों में चीजों का पालन करना मुश्किल हो जाता है। मुझे इंडेंट कन्वेंशन में कई बार गुस्सा आता है।
कभी-कभी, जब एक बयान या ब्लॉक समाप्त होने की स्पष्टता बहुत उपयोगी होती है। मानक सी कोड अक्सर कुछ इस तरह से पढ़ा जाएगा:
for(i=0; i<100; i++) {
do something here;
do another thing here;
}
continue doing things;
जहाँ आप बहुत स्पष्टता के लिए व्हाट्सएप का उपयोग करते हैं - और यह देखना आसान है कि लूप कहाँ समाप्त होता है।
पायथन आपको एक (वैकल्पिक) अर्धविराम के साथ समाप्त करने देता है। जैसा कि ऊपर उल्लेख किया गया है, इसका मतलब यह नहीं है कि 'शून्य' कथन के बाद निष्पादित करने के लिए एक बयान है। एसओ, उदाहरण के लिए,
print(x);
print(y);
के समान है
print(x)
print(y)
यदि आप मानते हैं कि पहले वाले के पास प्रत्येक पंक्ति के अंत में एक अशक्त कथन है, तो कोशिश करें - जैसा कि सुझाव दिया गया है - यह कर:
print(x);;
यह एक सिंटैक्स त्रुटि फेंक देगा।
निजी तौर पर, मैं कोड को अधिक पठनीय बनाने के लिए अर्धविराम ढूंढता हूं जब आपके पास कई तर्क और / या लंबे नाम वाले आर्ग के साथ बहुत सारे नेस्टिंग और फ़ंक्शन होते हैं। इसलिए, मेरी नज़र में, यह अन्य विकल्पों की तुलना में बहुत अधिक स्पष्ट है:
if some_boolean_is_true:
call_function(
long_named_arg_1,
long_named_arg_2,
long_named_arg_3,
long_named_arg_4
);
मेरे बाद से, यह आपको बताता है कि अंतिम ')' कुछ 'ब्लॉक' को समाप्त करता है जो कई लाइनों पर चलता है।
मुझे व्यक्तिगत रूप से लगता है कि पीईपी शैली के दिशानिर्देशों से बहुत कुछ बना है, आईडीई जो उन्हें लागू करते हैं, और विश्वास है कि 'चीजों को करने के लिए केवल एक पायथनिक तरीका है'। यदि आप बाद वाले को मानते हैं, तो संख्याओं को प्रारूपित करने का तरीका देखें: अब तक, पायथन इसे करने के चार अलग-अलग तरीकों का समर्थन करता है।
मुझे यकीन है कि मुझे कुछ डेडहार्ड्स से मिलाया जाएगा, लेकिन कंपाइलर / दुभाषिया को परवाह नहीं है कि तर्कों के लंबे या छोटे नाम हैं, और - लेकिन पायथन में इंडेंटेशन कन्वेंशन के लिए - व्हाट्सएप के बारे में परवाह नहीं है। कोड के साथ सबसे बड़ी समस्या दूसरे मानव (और यहां तक कि काम के महीनों के बाद भी) को समझने के लिए स्पष्टता दे रही है कि क्या चल रहा है, जहां चीजें शुरू होती हैं और समाप्त होती हैं, आदि।
अर्धविराम मान्य वाक्यविन्यास का हिस्सा हैं: 8. मिश्रित कथन (पायथन भाषा संदर्भ)
" व्हेन पाइथन्स अटैक " का एक उद्धरण
अर्धविराम के साथ अपने सभी कथनों को समाप्त न करें। यह पायथन में ऐसा करने के लिए तकनीकी रूप से कानूनी है, लेकिन पूरी तरह से बेकार है जब तक कि आप एक लाइन पर एक से अधिक स्टेटमेंट नहीं डाल रहे हैं (जैसे, x = 1; y = 2; z = 3)।
x,y,z = 1,2,3?
x, y, z = 1, 2, 3है कि यह धीमा है क्योंकि यह एक ट्यूल के निर्माण की अनावश्यक दौर यात्रा को उकसाता है और फिर तुरंत इसे जैसा दिखता है। (वैसे, मुझे वास्तव में नहीं लगता कि @communistpancake x=1; y=2; z=3पैटर्न का सुझाव दे रहा है। मुझे लगता है कि वह / वह केवल एक उदाहरण दे रहे हैं कि अर्धविराम एक टर्मिनेटर के बजाय एक विभाजक कैसे है।)
एक पंक्ति में कई बयानों में अर्धविराम को विभाजक के रूप में शामिल किया जा सकता है। उदाहरण के लिए: http://docs.python.org/reference/compound_stmts.html आपके मामले में, यह डिबगर में टूटने के लिए एक बिंदु की आसान प्रविष्टि के लिए बनाता है।
साथ ही, लर्निंग पाइथन बुक में मार्क लुट्ज़ द्वारा उल्लेख किया गया है , यह अर्धविराम के साथ आपके सभी बयानों को समाप्त करने के लिए तकनीकी रूप से कानूनी (हालांकि अनावश्यक और कष्टप्रद) है ।
अर्धविराम का उपयोग एक पंक्ति दो या अधिक कमांड के लिए किया जा सकता है। उनका उपयोग करने की आवश्यकता नहीं है, लेकिन वे प्रतिबंधित नहीं हैं।
अर्धविराम (;) दिए गए सिंगल लाइन पर कई स्टेटमेंट देता है कि न तो स्टेटमेंट एक नया कोड ब्लॉक शुरू करता है।
http://www.tutorialspoint.com/python/python_basic_syntax.htm
अर्धविराम (जैसे डॉट्स, कॉमा और कोष्ठक) धार्मिक युद्धों का कारण बनते हैं। फिर भी, वे (या कुछ समान प्रतीक) विभिन्न कारणों से किसी भी प्रोग्रामिंग भाषा में उपयोगी हैं।
व्यावहारिक: कई छोटे आदेशों को रखने की क्षमता जो एक ही रेखा पर एक साथ वैचारिक रूप से संबंधित हैं। एक प्रोग्राम टेक्स्ट जो एक संकीर्ण साँप की तरह दिखता है, जो कि नई कहानियों और इंडेंटेशन के उद्देश्य से विपरीत प्रभाव पड़ता है, जो कि हाइलाइटिंग संरचना है।
अवधारणात्मक: शुद्ध वाक्य रचना (इस मामले में, आदेशों के अनुक्रम के लिए) के बीच की चिंताओं को अलग करना प्रस्तुति से (उदाहरण के लिए नईलाइन), पुराने दिनों में "सुंदर-छपाई" कहा जाता है।
अवलोकन: हाइलाइटिंग संरचना के लिए, इंडेंटेशन को स्पष्ट तरीके से ऊर्ध्वाधर लाइनों द्वारा बढ़ाया / बदला जा सकता है, एक "विज़ुअल शासक" के रूप में सेवा करने के लिए जहां इंडेंटेशन शुरू होता है और समाप्त होता है। विभिन्न रंगों (जैसे प्रतिरोधों के लिए रंग कोड का पालन करना) भीड़ के लिए क्षतिपूर्ति कर सकते हैं।
इसकी अनुमति है क्योंकि लेखकों ने इसे अनुमति देने का निर्णय लिया है: https://docs.python.org/2/reference/simple_stmts.html
अगर यह सवाल उठता है कि लेखकों ने ऐसा क्यों किया, तो मुझे लगता है कि ऐसा इसलिए है क्योंकि अर्ध-स्तंभ को सरल कथन के रूप में कम से कम निम्नलिखित भाषाओं में अनुमति दी जाती है: C ++, C, C #, R, Matlab, Perl, ...
तो यह अन्य भाषा में पृष्ठभूमि वाले लोगों के लिए पायथन के उपयोग में तेजी से होता है। और इस तरह के विचलन में सामान्यता का कोई नुकसान नहीं है।
अर्धविराम (";") केवल एक ही ब्लॉक के भीतर बयानों को अलग करने के लिए आवश्यक है, जैसे कि हमारे पास निम्नलिखित सी कोड है:
if(a>b)
{
largest=a; //here largest and count are integer variables
count+=1;
}
इसे पायथन में दो रूपों में लिखा जा सकता है:
if a>b:
largest=a
count=count+1
या
if a>b: largest=a;count=count+1
उपरोक्त उदाहरण में आप किसी ifब्लॉक के भीतर कितने भी बयान दे सकते हैं और ";" द्वारा अलग किया जा सकता है। बजाय।
आशा है कि उपरोक्त स्पष्टीकरण के रूप में कुछ भी सरल नहीं है।
यहां मौजूद विशाल ज्ञान को जोड़ते हुए ,
यह मैटलपोटलिब लाइब्रेरी से संबंधित एक उत्तर है
import numpy as np
import matplotlib as plt
%matplotlib notebook
linear_data = np.array([1, 2, 3, 4, 5, 6, 7, 8])
quadratic_data = linear_data**2
plt.figure()
xvals = range(len(linear_data))
plt.barh(xvals, linear_data, height = 0.3, color='b')
plt.barh(xvals, quadratic_data, height = 0.3, left=linear_data, color='r')
यदि आप बारह (क्षैतिज पट्टी) के अंत में अर्धविराम नहीं देते हैं, तो आउटपुट एक प्लॉट + एक फ़ंक्शन एड्रेस है। लेकिन यदि आप दोनों बारहवें लाइनों के अंत में अर्धविराम का उपयोग करते हैं, तो यह केवल प्लॉट दिखाता है और फ़ंक्शन एड्रेस के लिए आउटपुट को दबा देता है।
कुछ इस तरह से: तुलना