पायथन में एकल उद्धरण बनाम दोहरे उद्धरण [बंद]


718

प्रलेखन के अनुसार, वे बहुत अधिक विनिमेय हैं। क्या एक स्टाइलिस्टिक कारण एक दूसरे पर उपयोग करना है?

जवाबों:


525

मुझे स्ट्रिंग के चारों ओर दोहरे उद्धरण चिह्नों का उपयोग करना पसंद है जो कि प्रक्षेप के लिए उपयोग किए जाते हैं या जो कि प्राकृतिक भाषा के संदेश हैं, और छोटे प्रतीकों जैसे तार के लिए एकल उद्धरण हैं, लेकिन अगर नियम में उद्धरण शामिल हैं, या यदि मैं भूल जाता हूं तो नियमों को तोड़ दूंगा। मैं नियमित अभिव्यक्ति के लिए docstrings और कच्चे स्ट्रिंग शाब्दिक के लिए ट्रिपल दोहरे उद्धरण का उपयोग करता हूं, भले ही वे आवश्यक न हों।

उदाहरण के लिए:

LIGHT_MESSAGES = {
    'English': "There are %(number_of_lights)s lights.",
    'Pirate':  "Arr! Thar be %(number_of_lights)s lights."
}

def lights_message(language, number_of_lights):
    """Return a language-appropriate string reporting the light count."""
    return LIGHT_MESSAGES[language] % locals()

def is_pirate(message):
    """Return True if the given message sounds piratical."""
    return re.search(r"(?i)(arr|avast|yohoho)!", message) is not None

4
दिलचस्प है, मैं उन्हें बिल्कुल उसी तरह से उपयोग करता हूं। मुझे याद नहीं है कि उस दिशा में मुझे कुरेदने के लिए कुछ भी पढ़ना चाहिए। मैं कच्चे html जैसे मनुष्यों के लिए लंबे स्ट्रिंग के लिए ट्रिपल सिंगल कोट्स का भी उपयोग नहीं करता। शायद यह अंग्रेजी उद्धरण नियमों के साथ कुछ करना है।
माइक ए

12
अधिकांश अजगर कोडर्स को इस तरह से कोड करते हैं। कोई स्पष्ट नियम नहीं है, लेकिन क्योंकि हम अक्सर उस तरह से कोड पढ़ते हैं, यह एक आदत बन जाती है।
ई-सतीस

मुझे आश्चर्य है कि प्रतीक-जैसी चीजों के लिए एकल उद्धरण वास्तव में लिस्प / योजना में उद्धरण अभिव्यक्ति शॉर्टकट से आता है। किसी भी मामले में, यह सहज है। इसके अलावा, मैं mateys, अगर हम PEP 8 शैली दिशानिर्देशों का पालन कर रहे हैं, तो फ़ंक्शन वास्तव में लाइट्स_मेज़ेज () और is_pirate () का नाम होना चाहिए।
युकुन्दुडे

8
मुझे लगता है कि पर्ल ने एकल उद्धृत स्ट्रिंग्स (कोई इंटरपोलेशन नहीं) और डबल उद्धृत स्ट्रिंग्स (इंटरपोलेशन के साथ) के बीच अंतर किया और उस अजगर कोडर्स को आदत विरासत में मिली या इसे कभी भी जाने नहीं दिया।
डैरन थॉमस

2
मैं एक ही सम्मेलन का उपयोग करता हूं, साथ ही मैं इसे दुरुपयोग करता हूं कि एसक्यूएल के रूप में ट्रिपल सिंगल कोट्स के अंदर सब कुछ उजागर करें।
राउंडटॉवर

96

Https://docs.python.org/2.0/ref/strings.html पर आधिकारिक डॉक्स का हवाला देते हुए :

सादे अंग्रेजी में: स्ट्रिंग के शाब्दिक एकल उद्धरण (') या दोहरे उद्धरण (") से मेल खाते हैं।

इसलिए कोई फर्क नहीं है। इसके बजाय, लोग आपको बताएंगे कि जो भी संदर्भ से मेल खाता हो, और जो सुसंगत हो, उसे चुनें । और मैं सहमत हूँ - यह जोड़ना कि इस तरह की चीज़ के लिए "सम्मेलनों" के साथ आने की कोशिश करना व्यर्थ है क्योंकि आप केवल किसी नए चेहरे को भ्रमित करेंगे।


3
हाँ, मेरे लिए स्थिरता महत्वपूर्ण है, इसलिए मैं हर जगह एकल का उपयोग करता हूं। कम महत्वपूर्ण, अस्पष्ट और सुसंगत।
mlissner

90

मैं पसंद करता था ', खासकर के लिए '''docstrings''', जैसा कि मुझे लगता है """this creates some fluff"""। इसके अलावा, मेरे स्विस जर्मन कीबोर्ड पर कुंजी के 'बिना टाइप किया जा सकता है Shift

मैंने तब से पीईपी 257 के"""docstrings""" अनुरूप ट्रिपल उद्धरणों का उपयोग करने के लिए बदल दिया है ।


2
मैं एकल उद्धरणों को प्राथमिकता देता हूं, क्योंकि मैं हर दिन एसक्यूएल कोड लिखता हूं, और टी-एसक्यूएल में स्ट्रिंग उद्धरणों के लिए एकल उद्धरण का उपयोग किया जाता है। लेकिन मैं ट्रिपल दोहरे उद्धरण चिह्नों का उपयोग करता हूं, क्योंकि डॉकस्ट्रिंग्स कभी-कभी उनमें थोड़ा सा फुलाना का उपयोग कर सकते हैं।
eksortso

4
स्ट्रिंग्स के लिए हर जगह सरल उद्धरणों का उपयोग करने से मुझे तीन डबल उद्धरणों का उपयोग करके स्रोत कोड के कुछ हिस्सों को निष्क्रिय करने की अनुमति मिलती है - जैसे '#if 0' और '#fif'।
मंद

12
"केवल PC QWERTY कीबोर्ड पर एक शिफ्ट कुंजी की आवश्यकता है। मेरे कीबोर्ड पर, "वास्तव में टाइप करना आसान है।
ई-सतीस

6
मेरे keybord पर "और 'दोनों को शिफ्ट कुंजी की आवश्यकता है।
Lo -c Faure-Lacroix

10
यह उत्तर अजगर सम्मेलन के विपरीत है; PEP 257 देखें जो कहता है: सुसंगतता के लिए, हमेशा "" "ट्रिपल दोहरे उद्धरण चिह्नों" का उपयोग करें। python.org/dev/peps/pep-0257
Buttons840

44

मैं विल के साथ हूँ:

  • पाठ के लिए दोहरे उद्धरण
  • एक पहचानकर्ता की तरह व्यवहार करने वाली किसी भी चीज़ के लिए एकल उद्धरण
  • Regexps के लिए डबल उद्धृत कच्चे स्ट्रिंग शाब्दिक
  • Docstrings के लिए तिगुना दोहरे उद्धरण

मैं इससे बचूंगा, भले ही इसका मतलब बहुत भागने से हो।

मुझे उद्धरण के कारण बाहर खड़े एकल उद्धृत पहचानकर्ताओं में से सबसे अधिक मूल्य मिलता है। बाकी प्रथाएं सिर्फ उन एकल उद्धृत पहचानकर्ताओं को कुछ स्थायी कमरे देने के लिए हैं।


26

यदि आपके पास एक स्ट्रिंग है, तो आपको दूसरे का उपयोग करना चाहिए। उदाहरण के लिए, "You're able to do this"या 'He said "Hi!"'। इसके अलावा, आपको बस उतना ही सुसंगत होना चाहिए जितना (एक मॉड्यूल के भीतर, एक पैकेज के भीतर, एक परियोजना के भीतर, एक संगठन के भीतर)।

यदि आपका कोड उन लोगों द्वारा पढ़ा जा रहा है जो C / C ++ (या यदि आप उन भाषाओं और पायथन के बीच स्विच करते हैं) के साथ काम करते हैं, तो ''एकल-वर्ण स्ट्रिंग्स के ""लिए और लंबे समय तक तार के उपयोग से संक्रमण को कम करने में मदद मिल सकती है। (इसी तरह अन्य भाषाओं के अनुसरण के लिए जहां वे विनिमेय नहीं हैं)।

अजगर कोड मैं जंगली में देखा है के पक्ष में जाता है "से अधिक 'है, लेकिन केवल थोड़ा। एक अपवाद यह है कि मैंने जो देखा है, """these"""उससे कहीं अधिक सामान्य है '''these'''


21

ट्रिपल उद्धृत टिप्पणियां इस सवाल का एक दिलचस्प उपविषय हैं। पीईपी 257 डॉक्टर स्ट्रिंग के लिए ट्रिपल उद्धरण निर्दिष्ट करता है । मैंने Google कोड खोज का उपयोग करके एक त्वरित जाँच की और पाया कि पायथन में ट्रिपल डबल उद्धरण लगभग 10x हैं जो कि ट्रिपल सिंगल कोट्स के रूप में लोकप्रिय हैं - कोड Google इंडेक्स में 1.3M बनाम 131K घटनाएँ। इसलिए मल्टी लाइन मामले में आपका कोड शायद लोगों के लिए अधिक परिचित होने वाला है अगर वह ट्रिपल डबल कोट्स का उपयोग करता है।


13
"If you're going to use apostrophes, 
       ^

you'll definitely want to use double quotes".
   ^

उस सरल कारण के लिए, मैं हमेशा बाहर पर दोहरे उद्धरण चिह्नों का उपयोग करता हूं। हमेशा

फुलझड़ी की बात करें, तो अपने स्ट्रिंग लिटरल्स को 'अगर आप एपरेकॉपी का प्रतिनिधित्व करने के लिए भागने के पात्रों का उपयोग करने जा रहे हैं, तो क्या अच्छा है? क्या यह उपन्यास पढ़ने के लिए कोडर बंद करता है? मैं कल्पना नहीं कर सकता कि आपके लिए हाई स्कूल की अंग्रेजी कक्षा कितनी दर्दनाक थी!


11
'अगर आप कुछ उद्धरण "करने जा रहे हैं, तो आप निश्चित रूप से सिंगल कोट्स का उपयोग करना चाहेंगे'
पाओलो

इस पर लिखने के बाद से मेरी राय बहुत बदल गई है। अब यह सिर्फ एक तरह की स्थिति है जहां मैं तर्क दूंगा कि मैं दोहरे उद्धरण चिह्नों का उपयोग करूंगा। एक और उद्धरण एकल उद्धरण का उपयोग करने के संदर्भ में आपका होगा। देखें स्वीकार किए जाते हैं जवाब और अधिक विस्तार में इस मामले पर मेरे वर्तमान रुख के लिए। मुझे लगता है कि यह एक व्यापक उदाहरण है कि इसे व्यापक दर्शकों के सामने कैसे प्रस्तुत किया जाना चाहिए।
दरोगाओं का

7

अजगर कुछ इस तरह से उद्धरण का उपयोग करता है:

mystringliteral1="this is a string with 'quotes'"
mystringliteral2='this is a string with "quotes"'
mystringliteral3="""this is a string with "quotes" and more 'quotes'"""
mystringliteral4='''this is a string with 'quotes' and more "quotes"'''
mystringliteral5='this is a string with \"quotes\"'
mystringliteral6='this is a string with \042quotes\042'
mystringliteral6='this is a string with \047quotes\047'

print mystringliteral1
print mystringliteral2
print mystringliteral3
print mystringliteral4
print mystringliteral5
print mystringliteral6

जो निम्न आउटपुट देता है:

this is a string with 'quotes'
this is a string with "quotes"
this is a string with "quotes" and more 'quotes'
this is a string with 'quotes' and more "quotes"
this is a string with "quotes"
this is a string with 'quotes'

2
लेकिन """This is a string with "quotes""""एक SyntaxError उठाता है। इस स्थिति को कैसे हल किया जा सकता है? (उसी के साथ '''This is a string with 'quotes'''')
dolma33

1
"उद्धरण" और "" "
निकोलस

1
@ dolma33 निकोलस का सुझाव स्ट्रिंग की सामग्री को बदल देगा। एक बेहतर समाधान पहले से ही उत्तर में है: यदि आपकी स्ट्रिंग किसी प्रकार के उद्धरण के साथ समाप्त होती है, तो दूसरी तरह के ट्रिपल उद्धरण का उपयोग करें । जैसे '''This is a string with "quotes"''',।
jpmc26

3

मैं सामान्य रूप से दोहरे उद्धरण चिह्नों का उपयोग करता हूं, लेकिन किसी विशेष कारण से नहीं - संभवतः जावा से बस आदत से बाहर।

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


3

व्यक्तिगत रूप से मैं एक या दूसरे के साथ रहना। इससे कोई फर्क नहीं पड़ता। और अपने स्वयं के अर्थ को या तो उद्धरण प्रदान करना सिर्फ अन्य लोगों को भ्रमित करना है जब आप सहयोग करते हैं।


2

यह शायद किसी भी चीज़ से अधिक एक शैलीगत प्राथमिकता है। मैंने सिर्फ PEP 8 की जाँच की और सिंगल बनाम डबल कोट्स का कोई उल्लेख नहीं देखा।

मैं सिंगल कोट्स पसंद करता हूं क्योंकि इसकी बजाय केवल एक कीस्ट्रोके दो के बजाय। यही है, मुझे एकल उद्धरण बनाने के लिए शिफ्ट कुंजी को मैश नहीं करना है।


1
PEP 8 "डॉक्यूमेंटेशन स्ट्रिंग्स" के तहत पहले वाक्य में PEP 257 से लिंक करता है। पीईपी 257 में यह कहा गया है: निरंतरता के लिए, हमेशा "" ट्रिपल दोहरे उद्धरण चिह्नों का उपयोग "" डोकस्ट्रिंग्स के आसपास करें। यदि आप अपने docstrings में किसी भी backllashes का उपयोग करते हैं तो r "" "कच्चे ट्रिपल दोहरे उद्धरण" "" का उपयोग करें। यूनिकोड डॉकस्ट्रिंग्स के लिए, "" यूनिकोड ट्रिपल-उद्धृत स्ट्रिंग्स "" "का उपयोग करें। फिर भी, मुझे एकल उद्धरण और आपके द्वारा दिए गए एक कीस्ट्रोके कारण की साफ दिखना पसंद है।
मैक्सपूल

2

पर्ल में आप सिंगल कोट्स का उपयोग करना चाहते हैं, जब आपके पास एक स्ट्रिंग होती है जिसे चर या अन्य वर्णों जैसे \ n, \ t, \ r, आदि से बचने की आवश्यकता नहीं होती है।

PHP पर्ल के समान अंतर बनाती है: एकल उद्धरणों में सामग्री की व्याख्या नहीं की जाएगी (यहां तक ​​कि \ n परिवर्तित नहीं की जाएगी), जैसा कि दोहरे उद्धरण चिह्नों के विपरीत होता है, जिसमें चर हो सकते हैं ताकि उनका मूल्य मुद्रित हो सके।

अजगर नहीं करता, मुझे डर है। तकनीकी रूप से देखा गया है, पायथन में एक चर से एक नाम / पाठ को अलग करने के लिए $ टोकन (या जैसा) नहीं है। दोनों विशेषताएं पायथन को अधिक पठनीय बनाती हैं, कम भ्रमित करती हैं, आखिरकार। पायथन में एकल और दोहरे उद्धरणों का परस्पर प्रयोग किया जा सकता है।


आप जो कहते हैं उसे सुदृढ़ करने के लिए केवल PHP और पर्ल में दोहरे उद्धरणों में व्याख्या की जा रही है, जबकि पायथन में दोनों दोहरे और एकल उद्धरणों में काम करेंगे
stivlo

1
@stivlo: जब तक आप rस्ट्रिंग शाब्दिक के सामने जोड़कर, उससे एक कच्ची स्ट्रिंग नहीं बनाएंगे । तो print 'a\nb'आपको दो लाइन print r'a\nb'प्रिंट करेगा , लेकिन आपको एक प्रिंट करेगा।
टाडेक


1

मैं उस समय अपने फैंस के लिए जो भी प्रहार करता हूं, उसका उपयोग करता हूं; यह सुविधाजनक है कि दोनों के बीच एक बार में स्विच करने में सक्षम हो!

बेशक, जब उद्धरण चिराचर को उद्धृत करते हैं, तो दोनों के बीच स्विच करना इतना डरावना नहीं हो सकता है ...


0

आपकी टीम का स्वाद या आपकी परियोजना के कोडिंग दिशानिर्देश।

यदि आप एक बहुभाषी वातावरण में हैं, तो आप स्ट्रिंग के लिए उसी प्रकार के उद्धरणों के उपयोग को प्रोत्साहित करना चाह सकते हैं जो दूसरी भाषा का उपयोग करते हैं, उदाहरण के लिए। और, मुझे व्यक्तिगत रूप से सबसे अच्छा लुक पसंद है '


0

जहाँ तक मुझे पता है, कोई नहीं। यद्यपि यदि आप कुछ कोड को देखते हैं, तो "" आमतौर पर पाठ के तार के लिए उपयोग किया जाता है (मुझे लगता है कि "पाठ की तुलना में अधिक सामान्य है"), और '' हैशकीज़ और इस तरह की चीजों में दिखाई देता है।


0

मेरा उद्देश्य दोनों पिक्सेल को कम करना और आश्चर्यचकित करना है। मैं आमतौर पर 'पिक्सल को कम करने के लिए पसंद करता हूं , लेकिन "इसके बजाय अगर स्ट्रिंग में एपोस्ट्रोफ है, तो पिक्सल को कम करने के लिए फिर से। एक डॉकस्ट्रिंग के लिए, हालांकि, मैं """अधिक पसंद करता हूं '''क्योंकि बाद वाला गैर-मानक है, असामान्य है, और इसलिए आश्चर्यजनक है। अगर अब मेरे पास स्ट्रिंग्स का एक गुच्छा है, जहां मैंने "उपरोक्त तर्क के अनुसार उपयोग किया है, लेकिन यह भी एक है कि एक के साथ दूर 'हो सकता है, मैं अभी भी इसमें उपयोग कर सकते हैं "स्थिरता को बनाए रखने के लिए, केवल आश्चर्य को कम करने के लिए।

शायद यह निम्नलिखित तरीके से पिक्सेल न्यूनतमकरण दर्शन के बारे में सोचने में मदद करता है। क्या आप इसके बजाय अंग्रेजी पात्रों की तरह दिखते हैं A B Cया AA BB CC? बाद की पसंद गैर-खाली पिक्सेल का 50% बर्बाद करती है।


-1

मैं दोहरे उद्धरण चिह्नों का उपयोग करता हूं क्योंकि मैं बैश को छोड़कर अधिकांश भाषाओं (C ++, Java, VB…) में वर्षों से ऐसा कर रहा हूं, क्योंकि मैं सामान्य पाठ में दोहरे उद्धरण चिह्नों का उपयोग करता हूं और क्योंकि मैं एक (संशोधित) गैर-अंग्रेजी कीबोर्ड का उपयोग कर रहा हूं जहां दोनों पात्रों को शिफ्ट कुंजी की आवश्यकता है।


-4

' = "

/= \=\\

उदाहरण :

f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")

परिणाम समान हैं

= >> नहीं, वे समान नहीं हैं। एक एकल बैकस्लैश पात्रों से बच जाएगा। आप सिर्फ इतना है कि उदाहरण क्योंकि में बाहर भाग्य का क्या \kऔर \wतरह वैध पलायन नहीं कर रहे हैं \tया \nया \\या\"

यदि आप एकल बैकस्लैश का उपयोग करना चाहते हैं (और उन्हें इस तरह व्याख्या की है), तो आपको "कच्चे" स्ट्रिंग का उपयोग करने की आवश्यकता है। आप इसे rस्ट्रिंग के सामने एक ' ' डालकर कर सकते हैं

im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'

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


पवित्र बकवास यह पुराना है, लेकिन मैं किसी भी तरह टिप्पणी करना चाहता था कि आगे-स्लैश का उपयोग करना विंडोज़ के लिए काम कर सकता है लेकिन फिर भी सिस्टम-निर्भर है। यह सुनिश्चित करने के लिए कि आप ओएस निर्भरता से स्पष्ट हैं, का उपयोग करेंos.path.join()
एडम स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.