मॉड्यूल और मानक पुस्तकालय

Python के पास उपयोग के लिए तैयार उपकरणों का एक विशाल संग्रह है: यादृच्छिकता, गणित, तारीखें, फ़ाइल पथ, और बहुत कुछ। ये उपकरण मॉड्यूल में रहते हैं, और आप उन्हें import के साथ अपने कोड में लाते हैं। आपने पहले से ही Files and exceptions अध्याय में import json का उपयोग किया है। यह अध्याय आयात को पूरी तरह से कवर करता है और मानक पुस्तकालय के सबसे उपयोगी भागों का परिचय देता है।
मॉड्यूल आयात करना
सबसे सरल आयात एक पूरे मॉड्यूल को लाता है और आपको डॉट नोटेशन के साथ इसकी सामग्री का उपयोग करने देता है। आप मॉड्यूल से विशिष्ट नाम भी आयात कर सकते हैं ताकि उनका उपयोग सीधे उपसर्ग के बिना किया जा सके। अलियास लंबे नामों को छोटा करते हैं।
import math
math.sqrt(16) # 4.0
math.pi # 3.141592653589793
math.floor(3.9) # 3
math.ceil(3.1) # 4किसी मॉड्यूल से विशिष्ट नाम आयात करें ताकि आप उन्हें सीधे उपयोग कर सकें:
from math import sqrt, pi
sqrt(16) # 4.0 ("math." उपसर्ग की आवश्यकता नहीं)
pi # 3.141592653589793किसी मॉड्यूल या नाम को अलियास दें ताकि इसे छोटा किया जा सके:
import math as m
m.sqrt(16) # 4.0
from math import sqrt as square_root
square_root(25) # 5.0अलियास लोकप्रिय तीसरे पक्ष की पुस्तकालयों के साथ सामान्य हैं (import numpy as np, import pandas as pd)। मानक पुस्तकालय मॉड्यूल के लिए, पूरे नाम का उपयोग करना पसंद करें; यह कोड को अधिक पठनीय बनाता है।
import math पूरे मॉड्यूल को लाता है, फिर आप एक डॉट के साथ अंदर पहुंचते हैं: math.sqrt(16)। from math import sqrt एक नाम को पकड़ता है ताकि आप उपसर्ग को छोड़ सकें। as कीवर्ड लंबे आयात का नाम बदलता है, लेकिन मानक-पुस्तकालय सामान के लिए पूरा नाम स्पष्ट रूप से पढ़ता है। random
random मॉड्यूल यादृच्छिक संख्याएं उत्पन्न करता है और यादृच्छिक विकल्प बनाता है। इसे गेम, सिमुलेशन, यादृच्छिक नमूनाकरण, और कुछ भी उपयोग करें जिसे अप्रत्याशितता की आवश्यकता होती है। एक seed निर्धारित करने से परिणाम दोहराए जा सकते हैं: समान seed हर बार समान अनुक्रम उत्पन्न करता है।
import random
random.random() # 0 और 1 के बीच float (एक्सक्लूसिव)
random.randint(1, 10) # 1 से 10 तक पूर्णांक (दोनों समावेशी)
random.uniform(1.0, 10.0) # 1.0 और 10.0 के बीच float
colours = ["लाल", "हरा", "नीला"]
random.choice(colours) # एक आइटम चुनता है
random.choices(colours, k=3) # k आइटम चुनता है (प्रतिस्थापन के साथ)
random.sample(colours, k=2) # k आइटम चुनता है (प्रतिस्थापन के बिना)
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers) # जगह पर शफल करता है, None लौटाता हैदोहराए जाने योग्य परिणामों के लिए (परीक्षण और डेटा विज्ञान में उपयोगी), उत्पन्न करने से पहले एक seed निर्धारित करें:
random.seed(42)
random.randint(1, 100) # seed 42 के लिए हमेशा समान मानसमान seed हर बार, किसी भी मशीन पर समान अनुक्रम उत्पन्न करता है।
random.choice() किसी सूची से एक आइटम चुनता है, random.randint(1, 10) एक श्रृंखला में एक पूर्ण संख्या देता है, अंत समावेशी। क्या आप हर चलाने के लिए समान परिणाम चाहते हैं, मान लें कि एक परीक्षण के लिए? पहले random.seed() को कॉल करें और अनुक्रम लॉक हो जाता है। math
math मॉड्यूल Numbers अध्याय में मिलने वाले बुनियादी अंकगणित ऑपरेटरों से परे अधिक उन्नत गणितीय संचालन जोड़ता है। वर्गमूल, शक्तियां, लॉगरिदम, त्रिकोणमिति, और विशेष मान जैसे pi और अनंत सभी यहां हैं।
import math
math.sqrt(25) # 5.0
math.pow(2, 10) # 1024.0 (2 ** 10 के समान लेकिन हमेशा float लौटाता है)
math.log(100, 10) # 2.0 (log आधार 10)
math.log(math.e) # 1.0 (प्राकृतिक लॉग)
math.sin(math.pi / 2) # 1.0
math.cos(0) # 1.0
math.ceil(3.2) # 4
math.floor(3.9) # 3
math.trunc(3.9) # 3 (सकारात्मकों के लिए int() के समान)
math.inf # अनंत
math.isnan(float("nan")) # True
math.isinf(math.inf) # Truemath `+ - * /` के बाद सब कुछ को कवर करता है: वर्गमूल, शक्तियां, लॉग, त्रिकोणमिति, साथ ही `math.pi` जैसे स्थिरांक। इसके लिए पहुंचें जैसे ही गणना को बुनियादी ऑपरेटरों से अधिक की आवश्यकता होती है, और आप सूत्र को स्वयं लिखना छोड़ देते हैं। datetime
datetime मॉड्यूल तारीखों और समय को संभालता है। datetime.now() आपको वर्तमान तारीख और समय देता है। strftime() इसे एक स्ट्रिंग के रूप में प्रारूपित करता है। strptime() एक स्ट्रिंग को datetime में पार्स करता है। timedelta एक अवधि का प्रतिनिधित्व करता है जिसे आप जोड़ या घटा सकते हैं।
from datetime import datetime, date, timedelta
now = datetime.now() # वर्तमान तारीख और समय
today = date.today() # केवल वर्तमान तारीख
print(now.year, now.month, now.day)
print(now.hour, now.minute, now.second)
# प्रारूपण
print(now.strftime("%Y-%m-%d")) # "2024-01-15"
print(now.strftime("%d %B %Y, %H:%M")) # "15 जनवरी 2024, 09:42"
# पार्सिंग
deadline = datetime.strptime("2024-12-31", "%Y-%m-%d")
# अंकगणित
tomorrow = today + timedelta(days=1)
next_week = today + timedelta(weeks=1)
diff = deadline - now
print(f"{diff.days} दिन deadline तक")सामान्य strftime कोड:
| कोड | अर्थ | उदाहरण |
|---|---|---|
%Y | 4-अंकीय वर्ष | 2024 |
%m | महीना (zero-padded) | 01 |
%d | दिन (zero-padded) | 15 |
%H | घंटा (24h) | 09 |
%M | मिनट | 42 |
%B | पूरा महीने का नाम | जनवरी |
datetime.now() आपको वर्तमान तारीख और समय देता है। strftime() इसे %Y-%m-%d जैसे कोड के साथ एक स्ट्रिंग में बदल देता है, और strptime() दूसरे तरीके से जाता है, एक स्ट्रिंग को वापस पार्स करता है। timedelta एक अवधि है जिसे आप जोड़ या घटा सकते हैं, इसलिए today + timedelta(days=1) कल है। os और pathlib
pathlib फ़ाइल पथों के साथ काम करने का आधुनिक तरीका है। Path ऑब्जेक्ट आपको / ऑपरेटर का उपयोग करके पथों को बनाने, निरीक्षण करने और नेविगेट करने देते हैं। os पर्यावरण चर और निम्न-स्तरीय OS संचालन तक पहुंच देता है। नए कोड के लिए pathlib को प्राथमिकता दें।
from pathlib import Path
p = Path("data/reports")
p.exists() # True यदि पथ मौजूद है
p.is_dir() # True यदि यह एक निर्देशिका है
p.is_file() # True यदि यह एक फ़ाइल है
p.mkdir(parents=True, exist_ok=True) # निर्देशिकाएं बनाएं
for f in p.glob("*.csv"): # निर्देशिका में सभी CSV फ़ाइलें
print(f.name) # फ़ाइलनाम
report = p / "report_jan.csv" # / ऑपरेटर पथों को जोड़ता है
report.stem # "report_jan" (विस्तार के बिना नाम)
report.suffix # ".csv"
report.parent # Path("data/reports")
content = report.read_text() # सीधे फ़ाइल सामग्री पढ़ें
report.write_text("नई सामग्री\n") # सीधे लिखेंos मॉड्यूल के लिए:
import os
os.getcwd() # वर्तमान कार्यशील निर्देशिका
os.listdir(".") # निर्देशिका सामग्री सूचीबद्ध करें
os.path.exists("data.txt") # True यदि पथ मौजूद है
os.path.join("data", "file.txt") # "data/file.txt" (क्रॉस-प्लेटफॉर्म)
os.environ.get("HOME") # एक पर्यावरण चर पढ़ेंनए कोड के लिए pathlib को प्राथमिकता दें। os का उपयोग करें जब आपको पर्यावरण चर की आवश्यकता हो या पुरानी APIs के साथ काम कर रहे हों जो स्ट्रिंग की अपेक्षा करते हैं।
pathlib.Path एक फ़ाइल पथ को एक वस्तु के रूप में मानता है जिसे आप पॉक कर सकते हैं: .exists(), .read_text(), .write_text(), .glob()। `/` ऑपरेटर टुकड़ों को जोड़ता है, इसलिए p / "report.csv" एक वास्तविक पथ की तरह पढ़ता है। नए कोड में पुराने os.path पर `pathlib` के लिए पहुंचें। timeit
timeit मापता है कि कोड कितने समय तक चलता है। यह उपयोगी है जब आप दो दृष्टिकोणों की तुलना करना चाहते हैं और तेजी से चुनना चाहते हैं। एक स्थिर माप पाने के लिए कोड को कई बार चलाएं।
import timeit
# एक एकल कथन को समय दें
timeit.timeit("sum(range(1000))", number=10000)
# एक अधिक जटिल ब्लॉक को समय दें
setup = "data = list(range(1000))"
code = "[x * 2 for x in data]"
time = timeit.timeit(code, setup=setup, number=10000)
print(f"10,000 चलाने के लिए {time:.4f} सेकंड")number कितनी बार दोहराएं है। अधिक पुनरावृत्तियां अधिक स्थिर माप देती हैं।
timeit.timeit() कोड के एक टुकड़े को बार-बार चलाकर समय देता है, फिर आप एक स्थिर प्रति-कॉल संख्या के लिए चलाने की गणना से विभाजित करते हैं। यह है कि आप "इनमें से कौन सा दो तेजी से है" को अनुमान लगाने की बजाय कैसे तय करते हैं। एक चलाना बहुत शोरपूर्ण है विश्वास करने के लिए, तो इसे लूप करने दें। string
string मॉड्यूल अक्षरों, अंकों और विराम चिह्न के लिए पूर्व-निर्मित स्ट्रिंग स्थिरांक प्रदान करता है। उपयोगी जब आपको वर्णों को जांचने या एक विशिष्ट वर्णमाला से यादृच्छिक स्ट्रिंग बनाने की आवश्यकता होती है।
import string
string.ascii_lowercase # "abcdefghijklmnopqrstuvwxyz"
string.ascii_uppercase # "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
string.ascii_letters # दोनों संयुक्त
string.digits # "0123456789"
string.punctuation # सभी विराम चिह्न वर्णजब आपको वर्णों को जांचने या यादृच्छिक स्ट्रिंग बनाने की आवश्यकता हो तो उपयोगी:
import string, random
chars = string.ascii_letters + string.digits
password = "".join(random.choices(chars, k=12))string.ascii_letters, string.digits, string.punctuation। वे सादे स्ट्रिंग हैं, इसलिए आप उन्हें लूप कर सकते हैं या उनसे नमूना ले सकते हैं। जब भी आपको एक ज्ञात वर्णमाला की आवश्यकता हो, तब के लिए उपयोगी। अपने स्वयं के मॉड्यूल बनाना
कोई भी Python फ़ाइल एक मॉड्यूल है। इसे किसी अन्य फ़ाइल से उपयोग करने के लिए, फ़ाइलनाम (.py के बिना) द्वारा इसे आयात करें। आप पूरे मॉड्यूल को आयात कर सकते हैं और डॉट नोटेशन के साथ इसकी सामग्री का उपयोग कर सकते हैं, या विशिष्ट नाम सीधे आयात कर सकते हैं।
# utils.py
def clamp(value, lo, hi):
return max(lo, min(value, hi))
PI = 3.14159# main.py
import utils
utils.clamp(150, 0, 100) # 100
utils.PI # 3.14159
from utils import clamp
clamp(50, 0, 100) # 50Python आयात करने वाली फ़ाइल के समान निर्देशिका (और कुछ अन्य स्थानों) में देखकर मॉड्यूल को ढूंढता है। बड़ी परियोजनाओं के लिए, मॉड्यूल को packages में संगठित किया जाता है: __init__.py फ़ाइल वाली निर्देशिकाएं।
.py फ़ाइल पहले से ही एक मॉड्यूल है: इसे .py के बिना अपने फ़ाइलनाम द्वारा आयात करें, और इसके फ़ंक्शन और चर आपके हैं उपयोग करने के लिए। import utils फिर utils.clamp(...), या एक नाम के साथ from utils import clamp खींचें। यह है कि आप एक बढ़ती हुई प्रोग्राम को फ़ाइलों में कैसे विभाजित करते हैं। __name__ == "__main__"
जब Python किसी फ़ाइल को सीधे चलाता है, तो __name__ को "__main__" पर सेट किया जाता है। जब समान फ़ाइल को एक मॉड्यूल के रूप में आयात किया जाता है, तो __name__ मॉड्यूल नाम होता है। यह पैटर्न आपको ऐसा कोड लिखने देता है जो तब चलता है जब आप फ़ाइल को सीधे निष्पादित करते हैं लेकिन अन्य मॉड्यूल द्वारा फ़ाइल आयात किए जाने पर छोड़ दिया जाता है।
# utils.py
def clamp(value, lo, hi):
return max(lo, min(value, hi))
if __name__ == "__main__":
# यह केवल तब चलता है जब आप करते हैं: python utils.py
# नहीं जब आप करते हैं: import utils
print(clamp(150, 0, 100)) # 100यह किसी भी मॉड्यूल के लिए मानक पैटर्न है जो स्टैंडअलोन स्क्रिप्ट के रूप में भी उपयोगी है।
if __name__ == "__main__": एक फ़ाइल को एक आयात योग्य मॉड्यूल और एक चलाने योग्य स्क्रिप्ट दोनों बनाता है। गार्ड के अंतर्गत कोड तब चलता है जब आप python utils.py करते हैं, और तब छोड़ दिया जाता है जब कोई अन्य फ़ाइल import utils करती है। एक मॉड्यूल के नीचे एक त्वरित डेमो या परीक्षण को छिपाने के लिए उपयोगी। मानक पुस्तकालय हाइलाइट
जानने लायक कुछ और मॉड्यूल। प्रत्येक एक सामान्य समस्या को हल करता है जिसे स्वयं को लागू करने के लिए महत्वपूर्ण काम करना पड़ता।
collections: विशेषीकृत कंटेनर प्रकार:
from collections import Counter, defaultdict, deque
Counter(["a", "b", "a", "c", "a"]) # Counter({'a': 3, 'b': 1, 'c': 1})
defaultdict(list) # dict जो स्वचालित रूप से लापता कुंजियों को बनाता है
deque([1, 2, 3], maxlen=5) # दोनों सिरों से तेजी से append/popitertools: iterables के साथ काम करने के लिए उपकरण:
import itertools
list(itertools.chain([1, 2], [3, 4])) # [1, 2, 3, 4]
list(itertools.islice(range(100), 5)) # [0, 1, 2, 3, 4]
list(itertools.combinations([1, 2, 3], 2)) # [(1, 2), (1, 3), (2, 3)]
list(itertools.product([0, 1], repeat=2)) # [(0,0), (0,1), (1,0), (1,1)]sys: Python दुभाषिए तक पहुंच:
import sys
sys.argv # कमांड-लाइन तर्कों की सूची
sys.exit(1) # एक स्थिति कोड के साथ बाहर निकलें
sys.version # Python संस्करण stringतीसरे पक्ष की पैकेज: मानक पुस्तकालय से परे, pip सामुदायिक पैकेज स्थापित करता है:
pip install requests # HTTP पुस्तकालय
pip install pandas # डेटा हेरफेर
pip install numpy # संख्यात्मक कंप्यूटिंगतीसरे पक्ष की पैकेज इस गाइड के दायरे से बाहर हैं, लेकिन पैटर्न हमेशा समान है: pip install, फिर import।
व्यावहारिक रूप में
समय के साथ अद्वितीय गेम आईडी बनाने के लिए random, string, और datetime को संयोजित करना:
import random
import string
from datetime import datetime
def generate_game_id(length: int = 8) -> str:
chars = string.ascii_uppercase + string.digits
return "".join(random.choices(chars, k=length))
def timestamp() -> str:
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
game_id = generate_game_id()
print(f"[{timestamp()}] गेम {game_id} शुरू किया जा रहा है")
scores = [random.randint(50, 100) for _ in range(5)]
print(f"राउंड स्कोर: {scores}")
print(f"सर्वश्रेष्ठ: {max(scores)}")
