मान लीजिए आप किसी व्यक्ति का नाम और पेशा आउटपुट करना चाहते हैं। आप निम्नानुसार एक साधारण प्रोग्राम लिख सकते हैं।
# Define variables
name ='Mark'
profession ='Astronaut'
age =7# Output info
output_string =('My name is '+ name +', I am '+str(age)+' years old '+'and my profession is '+ profession +'.')print(output_string)संचालित द्वारा
My name is Mark, I am 7 years old and my profession is Astronaut.संचालित द्वारा
यह तरीका संक्षिप्तता और पठनीयता से वंचित है। सौभाग्य से, स्ट्रिंग इंटरपोलेशन बेहतर समाधान देती है। यह वेरिएबल्स, एक्सप्रेशंस, या फ़ंक्शन के आउटपुट को सीधे स्ट्रिंग में डालने की सुविधा देती है, जिससे स्ट्रिंग हैंडलिंग गतिशील हो जाती है और मैनुअल कंकेटनेशन की जरूरत नहीं रहती।
स्ट्रिंग इंटरपोलेशन का उपयोग करते हुए, हम कोड को इस प्रकार लिख सकते हैं।
# Define variables
name ='Mark'
profession ='Astronaut'
age =7# Output info
output_string =f'My name is {name}, I am {age} years old and my profession is {profession}.'print(output_string)संचालित द्वारा
My name is Mark, I am 7 years old and my profession is Astronaut.संचालित द्वारा
स्ट्रिंग इंटरपोलेशन वाले संस्करण में बेतरतीब कंकेटनेशन के बिना, एक्सप्रेशंस को सीधे स्ट्रिंग के अंदर शामिल किया जा सकता है। जैसा कि आप देख सकते हैं, यह तरीका कहीं अधिक साफ-सुथरा है।
Python में बेसिक स्ट्रिंग इंटरपोलेशन
Python में स्ट्रिंग इंटरपोलेशन के कई तरीके उपलब्ध हैं। सबसे सामान्यतः सुझाया गया तरीका formatted string literals है, जिसे f-strings भी कहा जाता है, और ये Python 3.6 से उपलब्ध हैं।
एक और तरीका, जो Python 3.6 से पुराने कोड में अक्सर दिखता है, .format() मेथड है। यद्यपि यह तरीका f-strings की तुलना में अधिक verbose है, कभी-कभी इसके कुछ फायदे भी होते हैं (विवरण नीचे)।
अंततः, आप लेगेसी कोड में %-स्टाइल फॉर्मैटिंग भी देख सकते हैं।
f-strings का उपयोग (Python 3.6+)
f-strings (formatted string literals) Python में स्ट्रिंग को फॉर्मैट करने का शक्तिशाली और संक्षिप्त तरीका हैं। इन्हें Python 3.6 में पेश किया गया था और ये वेरिएबल्स, एक्सप्रेशंस और फ़ंक्शन कॉल्स को सीधे स्ट्रिंग्स में जोड़ने का पठनीय और प्रभावी तरीका देती हैं।
f-string के बेसिक सिंटैक्स का एक साधारण उदाहरण निम्न है।
name ='Mark'
output_string =f'My name is {name}.'print(output_string)संचालित द्वारा
इस कोड में, output_string वेरिएबल को एक f-string असाइन की गई है। शुरुआती उद्धरण-चिह्न से पहले लगा f प्रीफिक्स इंगित करता है कि स्ट्रिंग एम्बेडेड एक्सप्रेशंस को सपोर्ट करती है। name वेरिएबल का मूल्य इवाल्यूएट होकर स्ट्रिंग में सम्मिलित हो जाता है, और आउटपुट बनता है: "My name is Mark."
सिर्फ वेरिएबल वैल्यू ही नहीं, बल्कि गणनाएँ या एक्सप्रेशंस भी f-strings में डाले जा सकते हैं। यह उदाहरण देखें।
import math
a =3.0
b =4.0# Use string interpolation for the formulaprint(f'The hypotenuse of a triangle with base {a} and side {b} is {math.sqrt(a **2+ b **2)}.')संचालित द्वारा
The hypotenuse of a triangle with base 3.0 and side 4.0 is 5.0.संचालित द्वारा
एक्सप्रेशन math.sqrt(a ** 2 + b ** 2) का इवाल्यूएशन सीधे स्ट्रिंग के भीतर होता है, जिससे पहले अलग से मान निकालकर स्ट्रिंग में डालने की आवश्यकता नहीं रहती।
.format() मेथड का उपयोग
f-strings की तरह, .format() मेथड भी स्ट्रिंग में वेरिएबल्स और एक्सप्रेशंस डालने देता है। .format() मेथड का बेसिक सिंटैक्स इस प्रकार है।
name ='Mark'
output_string ='My name is {}.'.format(name)print(output_string)संचालित द्वारा
कर्ली ब्रैकेट्स {} प्लेसहोल्डर का काम करती हैं, जो संकेत देती हैं कि उस स्थान पर किसी वेरिएबल का मान डाला जाएगा। .format() मेथड में दिए गए आर्ग्युमेंट के आधार पर निर्धारित होता है कि प्लेसहोल्डर में कौन-सा मान डाला जाएगा।
Positional arguments
यदि आपको कई वेरिएबल्स के लिए कई प्लेसहोल्डर चाहिएँ तो क्या होगा? यह कोड देखें।
name ='Mark'
age =7# The placeholders are filled in order of the arguments
output_string ='My name is {} and I am {} years old.'.format(name, age)print(output_string)संचालित द्वारा
इस उदाहरण में दो वेरिएबल्स name और age उपयोग हुए हैं। परिणामस्वरूप, स्ट्रिंग में दो प्लेसहोल्डर हैं, और वेरिएबल्स को उसी क्रम में डाला जाता है जिसमें वे .format() मेथड में दिए गए हैं। इन आर्ग्युमेंट्स को *positional* आर्ग्युमेंट्स कहा जाता है क्योंकि स्ट्रिंग में उनकी जगह मेथड की आर्ग्युमेंट लिस्ट में उनकी पोज़िशन से तय होती है।
इंडेक्स्ड और नेम्ड प्लेसहोल्डर
प्लेसहोल्डर विचार के एक वैरिएशन के रूप में, यह उदाहरण देखें।
name ='Mark'
age =7# Print age twice
output_string ='My name is {} and I am {} years old. My twin brother is also {} years old.'.format(name, age, age)print(output_string)संचालित द्वारा
My name is Mark and I am 7 years old. My twin brother is also 7 years old.संचालित द्वारा
यहाँ, हमने age वेरिएबल के मान का दो बार पुन: उपयोग किया। इस तरह एक ही वेरिएबल को कई बार शामिल करना भद्दा लगता है और पठनीयता घटाता है। क्या .format() से फॉर्मैट की गई स्ट्रिंग में किसी वेरिएबल का पुन: उपयोग बिना दोहराए किया जा सकता है? हाँ, *indexed placeholders* का उपयोग करके।
name ='Mark'
age =7# Use indexed placeholders
output_string ='My name is {0} and I am {1} years old. My twin brother is also {1} years old.'.format(name, age)print(output_string)संचालित द्वारा
My name is Mark and I am 7 years old. My twin brother is also 7 years old.संचालित द्वारा
इस उदाहरण में, हमने कर्ली ब्रैकेट्स के भीतर वेरिएबल्स के क्रम को स्पष्ट रूप से परिभाषित किया है, जो Python के ज़ीरो-बेस्ड इंडेक्सिंग का पालन करता है। साथ ही, हमने इंडेक्स 1 वाले वेरिएबल का पुन: उपयोग किया, उसे दोहराया नहीं।
पोज़िशनल इंडेक्सिंग के विकल्प के रूप में आप नेम्ड आर्ग्युमेंट्स का उपयोग भी कर सकते हैं, जहाँ हर आर्ग्युमेंट को एक नाम दिया जाता है।
print('My name is {name} and I am {age} years old.'.format(name='Mark', age=7))संचालित द्वारा
नेम्ड आर्ग्युमेंट का इवाल्यूएशन उसी कर्ली ब्रैकेट्स में होता है जिसमें उसका नाम दिया गया है। नतीजतन, {name} प्लेसहोल्डर को "Mark" मान से बदला जाता है, और {age} प्लेसहोल्डर 30 से बदला जाता है।
% ऑपरेटर का उपयोग
स्ट्रिंग इंटरपोलेशन का अंतिम तरीका % ऑपरेटर है। यह C की printf() कमांड के समान कार्य करता है। इसका उपयोग अब अप्रचलित है और f-strings या .format() के पक्ष में दृढ़ता से हतोत्साहित किया जाता है। यहाँ इसका उल्लेख इसलिए है क्योंकि आप इसे लेगेसी कोडबेस में देख सकते हैं।
% ऑपरेटर का बेसिक फॉर्मैट है: "format string" % values। फॉर्मैट स्ट्रिंग में प्लेसहोल्डर होते हैं, जैसे %s स्ट्रिंग के लिए, जिन्हें मानों से बदला जाता है। उदाहरण के लिए, निम्न उदाहरण "Hello, Mark." प्रिंट करता है
अन्य सामान्य फॉर्मैट स्पेसिफ़ायर्स निम्न तालिका में दिखाए गए हैं।
Specifier
Meaning
Example
%s
स्ट्रिंग
"Hello %s" % "Alice" → "Hello Alice"
%d
इंटीजर (दशमलव)
"Age: %d" % 25 → "Age: 25"
%f
फ़्लोट (डिफ़ॉल्ट 6 डेसिमल)
"Pi: %f" % 3.14159 → "Pi: 3.141590"
%.nf
फ़्लोट (n दशमलव स्थान)
"%.2f" % 3.14159 → "3.14"
%x
हेक्साडेसिमल (लोअरकेस)
"%x" % 255 → "ff"
%X
हेक्साडेसिमल (अपरकेस)
"%X" % 255 → "FF"
%o
ऑक्टल
"%o" % 255 → "377"
% ऑपरेटर की कई सीमाएँ हैं। एक तो यह f-strings की तुलना में कम पठनीय है। यह कोड देखें।
name ="Alice"
age =30
height =5.6# The % operator is hard to scan
message ="My name is %s, I am %d years old, and my height is %.1f feet."%(name, age, height)print(message)संचालित द्वारा
My name is Alice, I am 30 years old, and my height is 5.6 feet.संचालित द्वारा
क्या यह कोड एक नज़र में स्पष्ट है? शायद नहीं। प्लेसहोल्डर और उन्हें भरने वाले वेरिएबल्स के बीच बहुत-सा विज़ुअल पार्सिंग करना पड़ता है। इतना आगे-पीछे स्कैन करना भ्रमित करने वाला हो सकता है।
अब, f-strings का उपयोग करते हुए समकक्ष कोड देखें।
# This is much cleaner
message =f"My name is {name}, I am {age} years old, and my height is {height:.1f} feet."print(message)संचालित द्वारा
My name is Alice, I am 30 years old, and my height is 5.6 feet.संचालित द्वारा
न तो स्कैनिंग की जरूरत है, न ही अपारदर्शी फॉर्मैटिंग स्ट्रिंग्स की। कोड साफ़, समझने में आसान और लिखने में सरल है। आप DataCamp के Python Programming skill track के साथ स्पष्ट, अनुकूलित कोड लिखने के अन्य टिप्स सीख सकते हैं।
एडवांस्ड Python स्ट्रिंग इंटरपोलेशन तकनीकें
अब जब हमने Python स्ट्रिंग इंटरपोलेशन की मूल बातें समझ ली हैं, तो कुछ उन्नत उपयोगों पर नज़र डालें।
Python मल्टीलाइन स्ट्रिंग इंटरपोलेशन
f-strings का उपयोग मल्टीलाइन कॉन्टेंट के लिए भी किया जा सकता है, जब आप ट्रिपल कोट्स (सिंगल या डबल) के साथ f सिग्निफ़ायर लगाते हैं। टेक्स्ट को कई पंक्तियों में लिखा जा सकता है, और आउटपुट में वही फॉर्मैट ज्यों का त्यों दिखाई देता है।
name ='Mark'
profession ='Astronaut'
age =7# This is an example of a multiline string
bio =f"""
Name: {name}
Profession: {profession}
Age: {age}
"""print(bio)संचालित द्वारा
मल्टीलाइन स्ट्रिंग्स .format() मेथड से भी बनाई जा सकती हैं।
name ='Mark'
profession ='Astronaut'
age =7# This is a multiline string with .format()
bio ="""
Name: {}
Profession: {}
Age: {}
""".format(name, profession, age)print(bio)संचालित द्वारा
आप मल्टीलाइन स्ट्रिंग इंटरपोलेशन का उपयोग क्यों करना चाहेंगे? इसके कई उपयोग हैं। कुछ उदाहरण:
मल्टीलाइन ईमेल या संदेश जनरेट करना
लॉगिंग और डीबगिंग
डायनामिक रूप से SQL क्वेरी बनाना
मल्टीलाइन ईमेल या संदेश जनरेट करना
मान लें कि आप किसी टेक कॉन्फ़्रेंस के कई आमंत्रितों को एक फॉर्म लेटर भेज रहे हैं।
name ="Alice"
event ="Annual Tech Conference"
date ="March 15, 2025"
email ="""Dear {name},
We are pleased to invite you to the {event} taking place on {date}.
We hope you can join us for an exciting experience.
Best regards,
The Event Team""".format(name=name, event=event, date=date)print(email)संचालित द्वारा
Dear Alice,
We are pleased to invite you to the Annual Tech Conference taking place on March 15, 2025.
We hope you can join us for an exciting experience.
Best regards,
The Event Teamसंचालित द्वारा
f-strings के साथ, फॉर्म लेटर बनाना सरल और प्रभावी है। नाम, इवेंट या तारीख बदलने के लिए, बस वेरिएबल्स में बदलाव करें और स्ट्रिंग अपने-आप अपडेट हो जाती है।
लॉगिंग और डीबगिंग
मल्टीलाइन स्ट्रिंग्स, लॉग्स के लिए एरर मैसेज प्रिंट करने में उपयोगी हैं।
error_code =404
url ='/missing-page'
timestamp ='2025-02-05 12:30:00'
error_message ='The requested page could not be found.'
log_message =f"""[ERROR {error_code}]
Time: {timestamp}
URL: {url}{error_message}"""print(log_message)संचालित द्वारा
[ERROR 404]
Time: 2025-02-05 12:30:00
URL: /missing-page
The requested page could not be found.संचालित द्वारा
यह तरीका लॉग संदेशों को संरचित रखता है और ठीक से फॉर्मैटेड लॉग्स के साथ डीबगिंग को आसान बनाता है।
डायनामिक रूप से SQL क्वेरी जनरेट करना
SQL क्वेरीज़ को मल्टीलाइन स्ट्रिंग्स का उपयोग करके डायनामिक रूप से बनाया जा सकता है।
table ='users'
column ='email'
value ='[email protected]'
query =f"""SELECT *
FROM {table}
WHERE {column} = '{value}';"""print(query)संचालित द्वारा
यह तरीका SQL क्वेरीज़ को पठनीय बनाता है और इंडेंटेशन बनाए रखता है। साथ ही, स्ट्रिंग कंकेटनेशन के लिए + का उपयोग करने की आवश्यकता समाप्त हो जाती है।
अन्य उपयोग मामलों में शामिल हैं:
फॉर्मैटेड कॉन्ट्रैक्ट लिखना
Markdown या $\LaTeX$ दस्तावेज़ बनाना
मल्टीलाइन HTML/XML टेम्पलेट्स
API प्रतिक्रियाएँ या JSON-जैसा टेक्स्ट जनरेट करना
मल्टीलाइन स्ट्रिंग इंटरपोलेशन के फायदे
जैसा कि हमने देखा, मल्टीलाइन स्ट्रिंग इंटरपोलेशन के कई फायदे हैं।
स्ट्रिंग इंटरपोलेशन में \n एस्केप कैरेक्टर की जरूरत बिना फॉर्मैटिंग संरक्षित रहती है।
सिंगल-लाइन फॉर्मैटिंग की तुलना में स्ट्रिंग इंटरपोलेशन पठनीयता बढ़ाती है।
लॉग्स, क्वेरीज़, रिपोर्ट्स जैसे स्ट्रक्चर्ड टेक्स्ट के साथ काम करते समय अव्यवस्था कम होती है।
इंडेंटेशन बिगाड़े बिना डायनामिक टेक्स्ट जनरेट करने देती है।
संख्याओं और विशेष मानों का फॉर्मैटिंग
f-string में दशमलव स्थानों की संख्या नियंत्रित करने के लिए यह सिंटैक्स उपयोग करें: f'{value:.nf}', जहाँ value फ्लोटिंग-पॉइंट संख्या है, n दशमलव स्थानों की संख्या है, और f (. के बाद वाला) फ्लोट फॉर्मैटिंग को दर्शाता है।
उदाहरण के लिए, निम्न कोड $\pi$ को विभिन्न दशमलव स्थानों तक आउटपुट करता है।
pi =3.1415926535print(f'Pi rounded to 2 decimal places: {pi:.2f}')print(f'Pi rounded to 4 decimal places: {pi:.4f}')print(f'Pi rounded to 0 decimal places: {pi:.0f}')संचालित द्वारा
Pi rounded to 2 decimal places: 3.14
Pi rounded to 4 decimal places: 3.1416
Pi rounded to 0 decimal places: 3संचालित द्वारा
फॉर्मैटिंग .format() मेथड के साथ भी इसी तरह होती है।
print('Pi rounded to 2 decimal places: {:.2f}'.format(pi))print('Pi rounded to 4 decimal places: {:.4f}'.format(pi))print('Pi rounded to 0 decimal places: {:.0f}'.format(pi))संचालित द्वारा
Pi rounded to 2 decimal places:3.14
Pi rounded to 4 decimal places:3.1416
Pi rounded to 0 decimal places:3संचालित द्वारा
आप f-string में प्रतिशत फॉर्मैट करने के लिए :.nf सिंटैक्स को % के साथ जोड़कर उपयोग कर सकते हैं, जहाँ n दशमलव स्थानों की संख्या है।
score =0.875print(f"Success rate: {score:.2%}")संचालित द्वारा
आप f-string में मुद्रा फॉर्मैट करने के लिए :, का उपयोग हजारों के सेपरेटर हेतु और .nf का उपयोग दशमलव स्थानों के लिए कर सकते हैं। आप $, €, या £ जैसे मुद्रा प्रतीकों को सीधे स्ट्रिंग में शामिल कर सकते हैं।
amount =98765.4321print(f"USD: ${amount:,.2f}")print(f"EUR: €{amount:,.2f}")print(f"GBP: £{amount:,.2f}")संचालित द्वारा
USD: $98,765.43
EUR: €98,765.43
GBP: £98,765.43संचालित द्वारा
डिक्शनरी और लिस्ट्स के साथ f-strings का उपयोग
Python में डिक्शनरी के साथ f-strings उपयोग करने के लिए, कर्ली ब्रैकेट्स के अंदर स्क्वेयर-ब्रैकेट नोटेशन (dict['key']) से वैल्यू एक्सेस करें या ** के साथ डिक्शनरी को अनपैक करें।
person ={'name':'Alice','age':30,'city':'New York'}print(f"My name is {person['name']}, I am {person['age']} years old, and I live in {person['city']}.")संचालित द्वारा
My name is Alice, I am 30 years old, and I live in New York.संचालित द्वारा
हर कुंजी को मैन्युअली एक्सेस करने के बजाय, आप डिक्शनरी को f-string में इस प्रकार अनपैक कर सकते हैं।
person ={'name':'Alice','age':30,}print(f'My name is {name} and I am {age} years old.'.format(**person))संचालित द्वारा
Cell In[96], line 1print('Hello, my name is {name!'}^
SyntaxError: closing parenthesis '}' does notmatch opening parenthesis '('संचालित द्वारा
सौभाग्य से, यह त्रुटि सीधी है, और समाधान आसान।
लिटरल {} दिखाने के लिए {{ और }} का उपयोग करें
यदि आप इंटरपोलेटेड स्ट्रिंग में कर्ली ब्रेसेस प्रिंट करना चाहते हैं तो क्या होगा? कर्ली ब्रैकेट्स के अंदर की किसी भी चीज़ का इवाल्यूएशन (करने का प्रयास) होगा।
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[101], line 1---->1print(f'Set notation: {a, b, c}')
NameError: name 'c'isnot definedसंचालित द्वारा
Python कर्ली ब्रैकेट्स के अंदर a, b, c को एक टपल के रूप में समझता है और a से जुड़े मान को ढूँढने का प्रयास करता है। चूँकि ऐसा कोई वेरिएबल मौजूद नहीं है, यह KeyError उठाता है। समाधान है डबल कर्ली ब्रेसेस {{}} का उपयोग।
आइए f-strings और .format() के प्रदर्शन की तुलना करें।
import timeit
name ="Alice"
age =30
pi =3.1415926535# Measure f-string performance
f_string_time = timeit.timeit('f"My name is {name} and I am {age} years old."',globals=globals(), number=1000000)# Measure .format() performance
format_time = timeit.timeit('"My name is {} and I am {} years old.".format(name, age)',globals=globals(), number=1000000)# Measure f-string performance with expressions
f_string_expr_time = timeit.timeit('f"Pi rounded to 2 decimal places: {pi:.2f}"',globals=globals(), number=1000000)# Measure .format() performance with expressions
format_expr_time = timeit.timeit('"Pi rounded to 2 decimal places: {:.2f}".format(pi)',globals=globals(), number=1000000)# Print resultsprint(f"f-string (simple): {f_string_time:.6f} seconds")print(f".format() (simple): {format_time:.6f} seconds")print(f"f-string (with expression): {f_string_expr_time:.6f} seconds")print(f".format() (with expression): {format_expr_time:.6f} seconds")संचालित द्वारा
जैसा कि आप देख सकते हैं, दक्षता के दृष्टिकोण से, .format() की तुलना में f-strings को प्राथमिकता देनी चाहिए।
साफ़ और पठनीय स्ट्रिंग इंटरपोलेशन के लिए सर्वोत्तम प्रथाएँ
यह सुनिश्चित करने के लिए कि आपकी स्ट्रिंग फॉर्मैटिंग स्पष्ट, प्रभावी और रखरखाव योग्य हो, इंटरपोलेटेड स्ट्रिंग्स का उपयोग करते समय इन सर्वोत्तम प्रथाओं का पालन करें।
पठनीयता के लिए f-strings को प्राथमिकता दें (Python 3.6+)
# Recommended
name ="Alice"
age =30print(f"My name is {name} and I am {age} years old.")# Not Recommended (Less readable)print("My name is {} and I am {} years old.".format(name, age))# Avoid using % formatting (Outdated)print("My name is %s and I am %d years old."%(name, age))संचालित द्वारा
My name is Alice and I am 30 years old.
My name is Alice and I am 30 years old.
My name is Alice and I am 30 years old.संचालित द्वारा
स्पष्टता के लिए नेम्ड प्लेसहोल्डर का उपयोग करें
# Named placeholders (readable)
user ={"name":"Alice","age":30}print(f"My name is {user['name']} and I am {user['age']} years old.")# Using indexes in .format() (not as readable)print("My name is {0} and I am {1} years old.".format("Alice",30))संचालित द्वारा
My name is Alice and I am 30 years old.
My name is Alice and I am 30 years old.संचालित द्वारा
मल्टीलाइन स्ट्रिंग्स को पठनीय रखें।
name ="Alice"
age =30
message =f"""Hello, {name}!
We are happy to invite you to our event.
At {age} years old, you are eligible for the VIP pass.
Best regards,
Event Team
"""print(message)संचालित द्वारा
Hello, Alice!
We are happy to invite you to our event.
At 30 years old, you are eligible for the VIP pass.
Best regards,
Event Team संचालित द्वारा
बेहतर डीबगिंग के लिए लॉगिंग में f-strings का उपयोग करें
Python 3.8 और बाद के संस्करण f-strings में डीबगिंग हेतु = का समर्थन करते हैं।
value = 42
# Output: value = 42
print(f"{value = }") संचालित द्वारा
स्ट्रिंग इंटरपोलेशन Python में एक शक्तिशाली फ़ीचर है जो स्ट्रिंग फॉर्मैटिंग को अधिक साफ़, पठनीय और कुशल बनाता है। उपलब्ध तरीकों में, f-strings सबसे आधुनिक और अनुशंसित तरीका है, जो .format() और % फॉर्मैटिंग जैसे पुराने तरीकों की तुलना में बेहतर प्रदर्शन, स्पष्टता और लचीलापन प्रदान करता है।
सर्वोत्तम प्रथाओं का पालन करके—जैसे नेम्ड प्लेसहोल्डर का उपयोग, दशमलव सटीकता नियंत्रित करना, पठनीयता के लिए टेक्स्ट को एलाइन करना, और मिसिंग डिक्शनरी कीज़ को शालीनता से हैंडल करना—आप Python में साफ़, पेशेवर और रखरखाव योग्य स्ट्रिंग फॉर्मैटिंग लिख सकते हैं।
चाहे आप फ़ॉर्मैटेड रिपोर्ट, मल्टीलाइन संदेश, या स्ट्रक्चर्ड डेटा आउटपुट बना रहे हों, f-strings वेरिएबल्स और एक्सप्रेशंस को सहज रूप से एकीकृत करने का सरल लेकिन शक्तिशाली तरीका प्रदान करती हैं। f-strings अपनाने से न केवल आपके कोड की गुणवत्ता सुधरेगी बल्कि दक्षता भी बढ़ेगी।
Python स्ट्रिंग इंटरपोलेशन पर अधिक जानकारी के लिए, DataCamp के संसाधन देखें:
स्ट्रिंग इंटरपोलेशन वह प्रक्रिया है जिसमें वेरिएबल्स, एक्सप्रेशंस या फ़ंक्शन आउटपुट को सीधे स्ट्रिंग में डाला जाता है। Python इसे f-strings, .format(), और % फॉर्मैटिंग के माध्यम से सपोर्ट करता है।
क्या f-strings सभी Python संस्करणों में उपलब्ध हैं?⌄
नहीं, f-strings को Python 3.6 में पेश किया गया था। यदि आप पुराना संस्करण उपयोग कर रहे हैं, तो आपको .format() या % फॉर्मैटिंग का उपयोग करना होगा।
f-strings को .format() और % फॉर्मैटिंग पर क्यों प्राथमिकता दी जाती है?⌄
f-strings, .format() और % फॉर्मैटिंग की तुलना में तेज़, अधिक पठनीय और अधिक संक्षिप्त हैं। ये डायरेक्ट वेरिएबल एम्बेडिंग और इनलाइन एक्सप्रेशंस की अनुमति देती हैं, जिससे ये अधिक कुशल बनती हैं।
क्या मैं डिक्शनरी के साथ f-strings उपयोग कर सकता/सकती हूँ?⌄
हाँ, आप f-strings के अंदर डिक्शनरी वैल्यू एक्सेस कर सकते हैं:
user ={"name":"Alice","age":30}print(f"My name is {user['name']} and I am {user['age']} years old.")संचालित द्वारा
वैकल्पिक रूप से, डिक्शनरी अनपैक करें:
print(f"My name is {name} and I am {age}.".format(**user))संचालित द्वारा
मैं f-strings का उपयोग करके संख्याओं को कैसे फॉर्मैट करूँ?⌄
आप फॉर्मैट स्पेसिफ़ायर्स का उपयोग करके दशमलव स्थान नियंत्रित कर सकते हैं और हजारों सेपरेटर जोड़ सकते हैं:
मार्क पेडिगो, PhD, स्वास्थ्यसेवा डेटा विज्ञान, प्रोग्रामिंग और शिक्षा में विशेषज्ञता वाले एक प्रतिष्ठित डेटा वैज्ञानिक हैं। गणित में PhD, कंप्यूटर साइंस में B.S., और AI में प्रोफेशनल सर्टिफिकेट रखने वाले मार्क तकनीकी ज्ञान को व्यावहारिक समस्या-समाधान से प्रभावी रूप से जोड़ते हैं। उनके करियर में धोखाधड़ी का पता लगाने, शिशु मृत्यु दर की भविष्यवाणी, और वित्तीय पूर्वानुमान से जुड़ी भूमिकाएँ शामिल रही हैं, साथ ही NASA के लागत आकलन सॉफ़्टवेयर में उनके योगदान भी हैं। एक शिक्षक के रूप में, उन्होंने DataCamp और वॉशिंगटन यूनिवर्सिटी इन सेंट लुईस में पढ़ाया है और कनिष्ठ प्रोग्रामरों का मार्गदर्शन किया है। खाली समय में, मार्क अपनी पत्नी मैंडी और कुत्ते हार्ले के साथ मिनेसोटा की प्राकृतिक सुंदरता का आनंद लेते हैं और जैज़ पियानो बजाते हैं।
Python के साथ डेटा विश्लेषण की बुनियादी बातें सिर्फ चार घंटे में सीखें। यह ऑनलाइन पाठ्यक्रम Python इंटरफ़ेस का परिचय देगा और लोकप्रिय पैकेजों का अन्वेषण करेगा।
मान लीजिए आप किसी व्यक्ति का नाम और पेशा आउटपुट करना चाहते हैं। आप निम्नानुसार एक साधारण प्रोग्राम लिख सकते हैं।
यह तरीका संक्षिप्तता और पठनीयता से वंचित है। सौभाग्य से, स्ट्रिंग इंटरपोलेशन बेहतर समाधान देती है। यह वेरिएबल्स, एक्सप्रेशंस, या फ़ंक्शन के आउटपुट को सीधे स्ट्रिंग में डालने की सुविधा देती है, जिससे स्ट्रिंग हैंडलिंग गतिशील हो जाती है और मैनुअल कंकेटनेशन की जरूरत नहीं रहती।
स्ट्रिंग इंटरपोलेशन का उपयोग करते हुए, हम कोड को इस प्रकार लिख सकते हैं।
स्ट्रिंग इंटरपोलेशन वाले संस्करण में बेतरतीब कंकेटनेशन के बिना, एक्सप्रेशंस को सीधे स्ट्रिंग के अंदर शामिल किया जा सकता है। जैसा कि आप देख सकते हैं, यह तरीका कहीं अधिक साफ-सुथरा है।
Python में बेसिक स्ट्रिंग इंटरपोलेशन
Python में स्ट्रिंग इंटरपोलेशन के कई तरीके उपलब्ध हैं। सबसे सामान्यतः सुझाया गया तरीका formatted string literals है, जिसे f-strings भी कहा जाता है, और ये Python 3.6 से उपलब्ध हैं।
एक और तरीका, जो Python 3.6 से पुराने कोड में अक्सर दिखता है,
.format()मेथड है। यद्यपि यह तरीका f-strings की तुलना में अधिक verbose है, कभी-कभी इसके कुछ फायदे भी होते हैं (विवरण नीचे)।अंततः, आप लेगेसी कोड में
%-स्टाइल फॉर्मैटिंग भी देख सकते हैं।f-strings का उपयोग (Python 3.6+)
f-strings (formatted string literals) Python में स्ट्रिंग को फॉर्मैट करने का शक्तिशाली और संक्षिप्त तरीका हैं। इन्हें Python 3.6 में पेश किया गया था और ये वेरिएबल्स, एक्सप्रेशंस और फ़ंक्शन कॉल्स को सीधे स्ट्रिंग्स में जोड़ने का पठनीय और प्रभावी तरीका देती हैं।
f-string के बेसिक सिंटैक्स का एक साधारण उदाहरण निम्न है।
इस कोड में,
output_stringवेरिएबल को एक f-string असाइन की गई है। शुरुआती उद्धरण-चिह्न से पहले लगाfप्रीफिक्स इंगित करता है कि स्ट्रिंग एम्बेडेड एक्सप्रेशंस को सपोर्ट करती है।nameवेरिएबल का मूल्य इवाल्यूएट होकर स्ट्रिंग में सम्मिलित हो जाता है, और आउटपुट बनता है:"My name is Mark."सिर्फ वेरिएबल वैल्यू ही नहीं, बल्कि गणनाएँ या एक्सप्रेशंस भी f-strings में डाले जा सकते हैं। यह उदाहरण देखें।
एक्सप्रेशन
math.sqrt(a ** 2 + b ** 2)का इवाल्यूएशन सीधे स्ट्रिंग के भीतर होता है, जिससे पहले अलग से मान निकालकर स्ट्रिंग में डालने की आवश्यकता नहीं रहती।.format() मेथड का उपयोग
f-strings की तरह,
.format()मेथड भी स्ट्रिंग में वेरिएबल्स और एक्सप्रेशंस डालने देता है।.format()मेथड का बेसिक सिंटैक्स इस प्रकार है।कर्ली ब्रैकेट्स
{}प्लेसहोल्डर का काम करती हैं, जो संकेत देती हैं कि उस स्थान पर किसी वेरिएबल का मान डाला जाएगा।.format()मेथड में दिए गए आर्ग्युमेंट के आधार पर निर्धारित होता है कि प्लेसहोल्डर में कौन-सा मान डाला जाएगा।Positional arguments
यदि आपको कई वेरिएबल्स के लिए कई प्लेसहोल्डर चाहिएँ तो क्या होगा? यह कोड देखें।
इस उदाहरण में दो वेरिएबल्स
nameऔरageउपयोग हुए हैं। परिणामस्वरूप, स्ट्रिंग में दो प्लेसहोल्डर हैं, और वेरिएबल्स को उसी क्रम में डाला जाता है जिसमें वे.format()मेथड में दिए गए हैं। इन आर्ग्युमेंट्स को *positional* आर्ग्युमेंट्स कहा जाता है क्योंकि स्ट्रिंग में उनकी जगह मेथड की आर्ग्युमेंट लिस्ट में उनकी पोज़िशन से तय होती है।इंडेक्स्ड और नेम्ड प्लेसहोल्डर
प्लेसहोल्डर विचार के एक वैरिएशन के रूप में, यह उदाहरण देखें।
यहाँ, हमने
ageवेरिएबल के मान का दो बार पुन: उपयोग किया। इस तरह एक ही वेरिएबल को कई बार शामिल करना भद्दा लगता है और पठनीयता घटाता है। क्या.format()से फॉर्मैट की गई स्ट्रिंग में किसी वेरिएबल का पुन: उपयोग बिना दोहराए किया जा सकता है? हाँ, *indexed placeholders* का उपयोग करके।इस उदाहरण में, हमने कर्ली ब्रैकेट्स के भीतर वेरिएबल्स के क्रम को स्पष्ट रूप से परिभाषित किया है, जो Python के ज़ीरो-बेस्ड इंडेक्सिंग का पालन करता है। साथ ही, हमने इंडेक्स 1 वाले वेरिएबल का पुन: उपयोग किया, उसे दोहराया नहीं।
पोज़िशनल इंडेक्सिंग के विकल्प के रूप में आप नेम्ड आर्ग्युमेंट्स का उपयोग भी कर सकते हैं, जहाँ हर आर्ग्युमेंट को एक नाम दिया जाता है।
नेम्ड आर्ग्युमेंट का इवाल्यूएशन उसी कर्ली ब्रैकेट्स में होता है जिसमें उसका नाम दिया गया है। नतीजतन,
{name}प्लेसहोल्डर को"Mark"मान से बदला जाता है, और{age}प्लेसहोल्डर30से बदला जाता है।% ऑपरेटर का उपयोग
स्ट्रिंग इंटरपोलेशन का अंतिम तरीका
%ऑपरेटर है। यह C कीprintf()कमांड के समान कार्य करता है। इसका उपयोग अब अप्रचलित है और f-strings या.format()के पक्ष में दृढ़ता से हतोत्साहित किया जाता है। यहाँ इसका उल्लेख इसलिए है क्योंकि आप इसे लेगेसी कोडबेस में देख सकते हैं।%ऑपरेटर का बेसिक फॉर्मैट है:"format string" % values। फॉर्मैट स्ट्रिंग में प्लेसहोल्डर होते हैं, जैसे%sस्ट्रिंग के लिए, जिन्हें मानों से बदला जाता है। उदाहरण के लिए, निम्न उदाहरण "Hello, Mark." प्रिंट करता हैअन्य सामान्य फॉर्मैट स्पेसिफ़ायर्स निम्न तालिका में दिखाए गए हैं।
Specifier
Meaning
Example
%s
स्ट्रिंग
"Hello %s" % "Alice" → "Hello Alice"
%d
इंटीजर (दशमलव)
"Age: %d" % 25 → "Age: 25"
%f
फ़्लोट (डिफ़ॉल्ट 6 डेसिमल)
"Pi: %f" % 3.14159 → "Pi: 3.141590"
%.nf
फ़्लोट (n दशमलव स्थान)
"%.2f" % 3.14159 → "3.14"
%x
हेक्साडेसिमल (लोअरकेस)
"%x" % 255 → "ff"
%X
हेक्साडेसिमल (अपरकेस)
"%X" % 255 → "FF"
%o
ऑक्टल
"%o" % 255 → "377"
% ऑपरेटर की कई सीमाएँ हैं। एक तो यह f-strings की तुलना में कम पठनीय है। यह कोड देखें।
क्या यह कोड एक नज़र में स्पष्ट है? शायद नहीं। प्लेसहोल्डर और उन्हें भरने वाले वेरिएबल्स के बीच बहुत-सा विज़ुअल पार्सिंग करना पड़ता है। इतना आगे-पीछे स्कैन करना भ्रमित करने वाला हो सकता है।
अब, f-strings का उपयोग करते हुए समकक्ष कोड देखें।
न तो स्कैनिंग की जरूरत है, न ही अपारदर्शी फॉर्मैटिंग स्ट्रिंग्स की। कोड साफ़, समझने में आसान और लिखने में सरल है। आप DataCamp के Python Programming skill track के साथ स्पष्ट, अनुकूलित कोड लिखने के अन्य टिप्स सीख सकते हैं।
एडवांस्ड Python स्ट्रिंग इंटरपोलेशन तकनीकें
अब जब हमने Python स्ट्रिंग इंटरपोलेशन की मूल बातें समझ ली हैं, तो कुछ उन्नत उपयोगों पर नज़र डालें।
Python मल्टीलाइन स्ट्रिंग इंटरपोलेशन
f-strings का उपयोग मल्टीलाइन कॉन्टेंट के लिए भी किया जा सकता है, जब आप ट्रिपल कोट्स (सिंगल या डबल) के साथ f सिग्निफ़ायर लगाते हैं। टेक्स्ट को कई पंक्तियों में लिखा जा सकता है, और आउटपुट में वही फॉर्मैट ज्यों का त्यों दिखाई देता है।
मल्टीलाइन स्ट्रिंग्स
.format()मेथड से भी बनाई जा सकती हैं।मल्टीलाइन स्ट्रिंग इंटरपोलेशन के उपयोग मामले
आप मल्टीलाइन स्ट्रिंग इंटरपोलेशन का उपयोग क्यों करना चाहेंगे? इसके कई उपयोग हैं। कुछ उदाहरण:
मल्टीलाइन ईमेल या संदेश जनरेट करना
मान लें कि आप किसी टेक कॉन्फ़्रेंस के कई आमंत्रितों को एक फॉर्म लेटर भेज रहे हैं।
f-strings के साथ, फॉर्म लेटर बनाना सरल और प्रभावी है। नाम, इवेंट या तारीख बदलने के लिए, बस वेरिएबल्स में बदलाव करें और स्ट्रिंग अपने-आप अपडेट हो जाती है।
लॉगिंग और डीबगिंग
मल्टीलाइन स्ट्रिंग्स, लॉग्स के लिए एरर मैसेज प्रिंट करने में उपयोगी हैं।
यह तरीका लॉग संदेशों को संरचित रखता है और ठीक से फॉर्मैटेड लॉग्स के साथ डीबगिंग को आसान बनाता है।
डायनामिक रूप से SQL क्वेरी जनरेट करना
SQL क्वेरीज़ को मल्टीलाइन स्ट्रिंग्स का उपयोग करके डायनामिक रूप से बनाया जा सकता है।
यह तरीका SQL क्वेरीज़ को पठनीय बनाता है और इंडेंटेशन बनाए रखता है। साथ ही, स्ट्रिंग कंकेटनेशन के लिए
+का उपयोग करने की आवश्यकता समाप्त हो जाती है।अन्य उपयोग मामलों में शामिल हैं:
मल्टीलाइन स्ट्रिंग इंटरपोलेशन के फायदे
जैसा कि हमने देखा, मल्टीलाइन स्ट्रिंग इंटरपोलेशन के कई फायदे हैं।
\nएस्केप कैरेक्टर की जरूरत बिना फॉर्मैटिंग संरक्षित रहती है।संख्याओं और विशेष मानों का फॉर्मैटिंग
f-string में दशमलव स्थानों की संख्या नियंत्रित करने के लिए यह सिंटैक्स उपयोग करें:
f'{value:.nf}', जहाँvalueफ्लोटिंग-पॉइंट संख्या है,nदशमलव स्थानों की संख्या है, औरf(.के बाद वाला) फ्लोट फॉर्मैटिंग को दर्शाता है।उदाहरण के लिए, निम्न कोड $\pi$ को विभिन्न दशमलव स्थानों तक आउटपुट करता है।
फॉर्मैटिंग
.format()मेथड के साथ भी इसी तरह होती है।आप f-string में प्रतिशत फॉर्मैट करने के लिए
:.nfसिंटैक्स को%के साथ जोड़कर उपयोग कर सकते हैं, जहाँnदशमलव स्थानों की संख्या है।आप f-string में मुद्रा फॉर्मैट करने के लिए
:,का उपयोग हजारों के सेपरेटर हेतु और.nfका उपयोग दशमलव स्थानों के लिए कर सकते हैं। आप $, €, या £ जैसे मुद्रा प्रतीकों को सीधे स्ट्रिंग में शामिल कर सकते हैं।डिक्शनरी और लिस्ट्स के साथ f-strings का उपयोग
Python में डिक्शनरी के साथ f-strings उपयोग करने के लिए, कर्ली ब्रैकेट्स के अंदर स्क्वेयर-ब्रैकेट नोटेशन (dict['key']) से वैल्यू एक्सेस करें या ** के साथ डिक्शनरी को अनपैक करें।
हर कुंजी को मैन्युअली एक्सेस करने के बजाय, आप डिक्शनरी को f-string में इस प्रकार अनपैक कर सकते हैं।
मिसिंग कीज़ के लिए एरर से बचने हेतु, डिक्शनरी एक्सेस के लिए
get()का उपयोग करें।स्ट्रिंग इंटरपोलेशन तरीकों के फायदे और नुकसान
जैसा कि हमने देखा, f-strings और
.format()दोनों ही स्ट्रिंग इंटरपोलेशन के लिए उपयोगी तरीके हैं। आइए प्रत्येक तरीके के फायदे और नुकसान की तुलना देखें।Feature
f-strings
.format()
% formatting
Readability
🟢 सर्वश्रेष्ठ
🟡 ठीक-ठाक
🔴 कठिन
Performance
🟢 सबसे तेज़
🟡 धीमा
🔴 सबसे धीमा
Supports Expressions
🟢 हाँ
🟡 अप्रत्यक्ष
🔴 नहीं
multiline Support
🟢 हाँ
🟢 हाँ
🔴 नहीं
Ease of Use
🟢 सबसे आसान
🟡 मध्यम
🔴 कठिन
Debugging (= Operator)
🟢 हाँ (Python 3.8+)
🔴 नहीं
🔴 नहीं
आपको कब
.format()को f-strings पर प्राथमिकता देनी चाहिए?Advantage
क्यों उपयोग करें .format()
लेगेसी Python सपोर्ट
Python 2.7+ में काम करता है
लचीला ऑर्डरिंग
प्लेसहोल्डर्स का आसान रीऑर्डर
डायनामिक फॉर्मैटिंग
जब फॉर्मैट स्पेसिफ़ायर डायनामिक हो
{} ब्रेसेस को बेहतर हैंडल करता है
अतिरिक्त मैनुअल एस्केपिंग से बचाता है
डिक्शनरी के साथ बेहतर
डिक्ट कीज़ का उपयोग आसान
सामान्य गलतियाँ और सर्वोत्तम प्रथाएँ
नीचे, आप Python स्ट्रिंग इंटरपोलेशन के लिए कुछ ट्रबलशूटिंग तरीके और शीर्ष सुझाव पा सकते हैं।
कर्ली ब्रेसेस के साथ सिंटैक्स एरर्स से बचना
कर्ली ब्रेसेस वाली स्ट्रिंग इंटरपोलेशन में कई तरह की सिंटैक्स गलतियाँ हो सकती हैं।
सौभाग्य से, यह त्रुटि सीधी है, और समाधान आसान।
यदि आप इंटरपोलेटेड स्ट्रिंग में कर्ली ब्रेसेस प्रिंट करना चाहते हैं तो क्या होगा? कर्ली ब्रैकेट्स के अंदर की किसी भी चीज़ का इवाल्यूएशन (करने का प्रयास) होगा।
Python कर्ली ब्रैकेट्स के अंदर a, b, c को एक टपल के रूप में समझता है और a से जुड़े मान को ढूँढने का प्रयास करता है। चूँकि ऐसा कोई वेरिएबल मौजूद नहीं है, यह KeyError उठाता है। समाधान है डबल कर्ली ब्रेसेस
{{}}का उपयोग।Set notation: {{a, b, c}}
प्रदर्शन तुलना: f-strings बनाम .format()
आइए f-strings और
.format()के प्रदर्शन की तुलना करें।जैसा कि आप देख सकते हैं, दक्षता के दृष्टिकोण से,
.format()की तुलना में f-strings को प्राथमिकता देनी चाहिए।साफ़ और पठनीय स्ट्रिंग इंटरपोलेशन के लिए सर्वोत्तम प्रथाएँ
यह सुनिश्चित करने के लिए कि आपकी स्ट्रिंग फॉर्मैटिंग स्पष्ट, प्रभावी और रखरखाव योग्य हो, इंटरपोलेटेड स्ट्रिंग्स का उपयोग करते समय इन सर्वोत्तम प्रथाओं का पालन करें।
Python 3.8 और बाद के संस्करण f-strings में डीबगिंग हेतु
=का समर्थन करते हैं।निष्कर्ष
स्ट्रिंग इंटरपोलेशन Python में एक शक्तिशाली फ़ीचर है जो स्ट्रिंग फॉर्मैटिंग को अधिक साफ़, पठनीय और कुशल बनाता है। उपलब्ध तरीकों में, f-strings सबसे आधुनिक और अनुशंसित तरीका है, जो
.format()और%फॉर्मैटिंग जैसे पुराने तरीकों की तुलना में बेहतर प्रदर्शन, स्पष्टता और लचीलापन प्रदान करता है।सर्वोत्तम प्रथाओं का पालन करके—जैसे नेम्ड प्लेसहोल्डर का उपयोग, दशमलव सटीकता नियंत्रित करना, पठनीयता के लिए टेक्स्ट को एलाइन करना, और मिसिंग डिक्शनरी कीज़ को शालीनता से हैंडल करना—आप Python में साफ़, पेशेवर और रखरखाव योग्य स्ट्रिंग फॉर्मैटिंग लिख सकते हैं।
चाहे आप फ़ॉर्मैटेड रिपोर्ट, मल्टीलाइन संदेश, या स्ट्रक्चर्ड डेटा आउटपुट बना रहे हों, f-strings वेरिएबल्स और एक्सप्रेशंस को सहज रूप से एकीकृत करने का सरल लेकिन शक्तिशाली तरीका प्रदान करती हैं। f-strings अपनाने से न केवल आपके कोड की गुणवत्ता सुधरेगी बल्कि दक्षता भी बढ़ेगी।
Python स्ट्रिंग इंटरपोलेशन पर अधिक जानकारी के लिए, DataCamp के संसाधन देखें: