GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing python.github.io — پرسشهای متداول دربارهی کتابخانه و افزونه پرسشهای متداول دربارهی کتابخانه و افزونه¶پرسشهای عمومی کتابخانه¶چگونه میتوانم یک ماژول یا برنامه برای انجام کار X پیدا کنم؟¶برای اینکه ببینید آیا ماژول مرتبطی در کتابخانه استاندارد وجود دارد، مرجع کتابخانه را بررسی کنید. (سرانجام یاد خواهید گرفت که در کتابخانه استاندارد چه چیزهایی وجود دارد و خواهید توانست این مرحله را رد کنید.) برای بستههای شخص ثالث، در فهرست بستههای پایتون جستجو کنید یا Google یا موتور جستجوی وب دیگری را امتحان کنید. جستجوی «Python» بههمراه یک یا دو کلیدواژه برای موضوع مورد نظر شما معمولاً به پیدا کردن موردی مفید منجر میشود. پرونده منبع math.py (socket.py، regex.py و غیره) کجاست؟¶اگر نمیتوانید پرونده منبعی برای یک ماژول پیدا کنید، ممکن است آن ماژول توکار باشد یا ماژولی باشد که بهصورت پویا بارگذاری میشود و در C، C++ یا زبان کامپایلشده دیگری پیادهسازی شده است. در این حالت ممکن است پرونده منبع را نداشته باشید یا ممکن است چیزی مانند در پایتون (دستکم) ۳ نوع ماژول وجود دارد:
چگونه یک اسکریپت پایتون را در یونیکس قابلاجرا کنم؟¶شما باید دو کار انجام دهید: حالت پرونده اسکریپت باید اجرایی باشد و خط اول باید با مورد اول با اجرای دومی را میتوان به روشهای مختلفی انجام داد. مستقیمترین روش این است که بنویسید #!/usr/local/bin/python
بهعنوان نخستین خط پرونده شما، با استفاده از مسیر محل نصب مفسر پایتون در پلتفرم شما. اگر میخواهید اسکریپت مستقل از محل قرارگیری مفسر پایتون باشد، میتوانید از برنامهی env استفاده کنید. تقریباً همهی گونههای یونیکس از دستور زیر پشتیبانی میکنند، با فرض اینکه مفسر پایتون در پوشهای در #!/usr/bin/env python
این کار را برای اسکریپتهای CGI انجام ندهید. متغیر گاهی اوقات، محیط یک کاربر آنقدر پر است که برنامهی /usr/bin/env شکست میخورد؛ یا اصلاً برنامه env وجود ندارد. در این صورت، میتوانید ترفند زیر را امتحان کنید (از الکس رزینسکی): #! /bin/sh """:" exec python $0 ${1+"$@"} """ عیب جزئی این است که این کار رشتهی __doc__ اسکریپت را تعریف میکند. با این حال، میتوانید با افزودن این علامت آن را برطرف کنید __doc__ = """...Whatever...""" آیا بستهای برای curses/termcap در پایتون وجود دارد؟¶برای انواع یونیکس: توزیع کد منبع استاندارد پایتون شامل ماژول curses در زیرپوشهی Modules است، اگرچه بهطور پیشفرض کامپایل نمیشود. (توجه داشته باشید که این در توزیع ویندوز در دسترس نیست — ماژول curses برای ویندوز وجود ندارد.) ماژول آیا در پایتون معادلی برای onexit() در C وجود دارد؟¶ماژول چرا هندلرهای سیگنال من کار نمیکنند؟¶رایجترین مشکل این است که هندلر سیگنال با فهرست آرگومان نادرست تعریف شده باشد. این تابع بهصورت زیر فراخوانی میشود handler(signum, frame) بنابراین باید با دو پارامتر تعریف شود: def handler(signum, frame): ... وظایف رایج¶چگونه یک برنامه یا کامپوننت پایتون را آزمون کنم؟¶پایتون با دو چارچوب آزمون ارائه میشود. ماژول ماژول برای آسانتر کردن آزمون، باید از طراحی ماژولار خوبی در برنامه خود استفاده کنید. برنامه شما باید تقریباً تمام قابلیتها را در قالب توابع یا متدهای کلاس کپسوله کند -- و این گاهی اثر غافلگیرکننده و دلپذیری دارد که باعث میشود برنامه سریعتر اجرا شود (زیرا دسترسی به متغیرهای محلی سریعتر از دسترسی به متغیرهای سراسری است). علاوه بر این، برنامه باید از وابستگی به تغییر متغیرهای سراسری پرهیز کند، زیرا این کار آزمون را بسیار دشوارتر میکند. «منطق اصلی سراسری» برنامه شما ممکن است بهسادگی زیر باشد if __name__ == "__main__": main_logic() در انتهای ماژول اصلی برنامهتان. هنگامی که برنامه شما بهصورت مجموعهای قابلمدیریت از رفتارهای توابع و کلاسها سازماندهی شد، باید توابع آزمونی بنویسید که این رفتارها را آزمایش کنند. برای هر ماژول میتوان یک بدنه آزمون در نظر گرفت که دنبالهای از آزمونها را خودکار میکند. این کار ممکن است زیاد به نظر برسد، اما از آنجا که پایتون بسیار مختصر و انعطافپذیر است، بهطرز شگفتآوری آسان است. شما میتوانید با نوشتن توابع آزمون خود بهموازات «کد تولیدی»، کدنویسی را بسیار لذتبخشتر و سرگرمکنندهتر کنید، زیرا این کار یافتن باگها و حتی نقصهای طراحی را زودتر آسان میکند. «ماژولهای پشتیبانی» که بهعنوان ماژول اصلی یک برنامه در نظر گرفته نشدهاند، ممکن است شامل خودآزمایی (self-test) ماژول باشند. if __name__ == "__main__": self_test() حتی برنامههایی که با رابطهای خارجی پیچیده تعامل دارند، میتوانند هنگامی که رابطهای خارجی در دسترس نیستند، با استفاده از رابطهای «جعلی» پیادهسازیشده در پایتون آزمایش شوند. چگونه از رشته مستندات، مستندات بسازم؟¶ماژول چگونه میتوانم هر بار یک کلید را بهصورت تکی دریافت کنم؟¶برای گونههای یونیکس چندین راهحل وجود دارد. انجام این کار با استفاده از curses ساده است، اما curses ماژول نسبتاً بزرگی برای یادگیری است. نخها¶چگونه با استفاده از نخها برنامهنویسی کنم؟¶حتماً از ماژول چگونه کار را میان دستهای از نخهای کارگر تقسیم کنم؟¶سادهترین راه، استفاده از ماژول یا، اگر میخواهید کنترل دقیقی بر الگوریتم توزیع داشته باشید، میتوانید منطق خود را بهصورت دستی بنویسید. از ماژول این یک مثال ساده است: import threading, queue, time # The worker thread gets jobs off the queue. When the queue is empty, it # assumes there will be no more work and exits. # (Realistically workers will run until terminated.) def worker(): print('Running worker') time.sleep(0.1) while True: try: arg = q.get(block=False) except queue.Empty: print('Worker', threading.current_thread(), end=' ') print('queue empty') break else: print('Worker', threading.current_thread(), end=' ') print('running with argument', arg) time.sleep(0.5) # Create queue q = queue.Queue() # Start a pool of 5 workers for i in range(5): t = threading.Thread(target=worker, name='worker %i' % (i+1)) t.start() # Begin adding work to the queue for i in range(50): q.put(i) # Give threads time to run print('Main thread sleeping') time.sleep(5) هنگام اجرا، خروجی زیر تولید خواهد شد: Running worker Running worker Running worker Running worker Running worker Main thread sleeping Worker <Thread(worker 1, started 130283832797456)> running with argument 0 Worker <Thread(worker 2, started 130283824404752)> running with argument 1 Worker <Thread(worker 3, started 130283816012048)> running with argument 2 Worker <Thread(worker 4, started 130283807619344)> running with argument 3 Worker <Thread(worker 5, started 130283799226640)> running with argument 4 Worker <Thread(worker 1, started 130283832797456)> running with argument 5 ... برای جزئیات بیشتر، به مستندات ماژول مراجعه کنید؛ کلاس چه انواعی از تغییر مقادیر سراسری نخایمن هستند؟¶یک قفل سراسری مفسر (GIL) بهصورت داخلی استفاده میشود تا تضمین کند که در هر لحظه تنها یک نخ در ماشین مجازی پایتون اجرا میشود. بهطور کلی، پایتون تنها بین دستورالعملهای بایتکد امکان جابهجایی میان نخها را فراهم میکند؛ میزان دفعات جابهجایی آن را میتوان از طریق از نظر تئوری، این بدان معناست که یک محاسبهی دقیق نیازمند درک دقیق از پیادهسازی بایتکد PVM است. در عمل، به این معناست که عملیات روی متغیرهای مشترک از انواع دادهی توکار (اعداد صحیح، فهرستها، دیکشنریها و غیره) که «اتمی به نظر میرسند»، واقعاً اتمی هستند. برای مثال، عملیاتهای زیر همگی اتمی هستند (L، L1 و L2 فهرست هستند، D، D1 و D2 دیکشنری هستند، x و y شیء هستند، i و j عدد صحیح هستند): L.append(x) L1.extend(L2) x = L[i] x = L.pop() L1[i:j] = L2 L.sort() x = y x.field = y D[x] = y D1.update(D2) D.keys() اینها چنین نیستند: i = i+1 L.append(L[-1]) L[i] = L[j] D[x] = D[x] + 1 عملیاتی که اشیاء دیگر را جایگزین میکنند، ممکن است هنگامی که شمار ارجاع آن اشیاء دیگر به صفر میرسد، متد آیا نمیتوانیم قفل سراسری مفسر را حذف کنیم؟¶global interpreter lock (GIL) اغلب بهعنوان مانعی برای استقرار پایتون روی ماشینهای سرور چندپردازندهای ردهبالا در نظر گرفته میشود، زیرا یک برنامه چندنخی پایتون عملاً تنها از یک CPU استفاده میکند، به دلیل این الزام که (تقریباً) تمام کد پایتون تنها زمانی میتواند اجرا شود که GIL در اختیار گرفته شده باشد. Since Python 3.13, CPython provides an optional free-threaded build that can run with the GIL disabled, allowing Python threads to run in parallel on multiple CPU cores (see PEP 703). Free-threaded Python is officially supported as of Python 3.14 (see PEP 779), but is not the default build. See پشتیبانی پایتون از نخبندی آزاد for details. وجود GIL در نسخههای فعلی پایتون به این معنا نیست که نمیتوانید از پایتون روی ماشینهای چندپردازنده بهخوبی استفاده کنید! شما فقط باید در تقسیم کار میان چندین فرآیند بهجای چندین نخ خلاقانه عمل کنید. کلاس استفاده سنجیده از افزونههای C نیز کمک خواهد کرد؛ اگر از یک افزونه C برای انجام یک کار زمانبر استفاده کنید، افزونه میتواند در حالی که نخ اجرا در کد C است، GIL را آزاد کند و به نخهای دیگر اجازه دهد تا مقداری کار انجام دهند. برخی از ماژولهای کتابخانه استاندارد مانند یک رویکرد جایگزین برای کاهش تأثیر GIL این است که GIL بهجای کاملاً سراسری بودن، به قفلی بهازای هر وضعیت مفسر تبدیل شود. این مورد برای نخستین بار در Python 3.12 پیادهسازی شد و در C API در دسترس است. انتظار میرود یک رابط پایتون برای آن در Python 3.13 ارائه شود. در حال حاضر محدودیت اصلی آن احتمالاً ماژولهای توسعهای شخص ثالث هستند، زیرا این ماژولها برای قابلاستفاده بودن باید با در نظر گرفتن چند مفسر نوشته شوند، بنابراین بسیاری از ماژولهای توسعهای قدیمیتر قابلاستفاده نخواهند بود. ورودی و خروجی¶چگونه یک پرونده را حذف کنم؟ (و دیگر پرسشهای مربوط به پرونده...)¶از برای حذف یک پوشه، از برای تغییر نام یک پرونده، از برای بریدن یک پرونده، آن را با استفاده از ماژول چگونه یک پرونده را کپی کنم؟¶ماژول چگونه دادههای دودویی را بخوانم (یا بنویسم)؟¶برای خواندن یا نوشتن قالبهای داده دودویی پیچیده، بهتر است از ماژول برای مثال، کد زیر دو عدد صحیح ۲ بایتی و یک عدد صحیح ۴ بایتی را در قالب بزرگاندیان (big-endian) از یک پرونده میخواند: import struct with open(filename, "rb") as f: s = f.read(8) x, y, z = struct.unpack(">hhl", s) '>' در رشته قالب، دادههای بزرگاندیان (big-endian) را تحمیل میکند؛ حرف 'h' یک «عدد صحیح کوتاه» (۲ بایت) و 'l' یک «عدد صحیح بلند» (۴ بایت) را از رشته میخواند. برای دادههایی که منظمتر هستند (مثلاً فهرستی همگن از اعداد صحیح یا اعشاری)، همچنین میتوانید از ماژول به نظر میرسد نمیتوانم از os.read() روی یک پایپ ایجادشده با os.popen() استفاده کنم؛ چرا؟¶
چگونه به درگاه سریال (RS232) دسترسی پیدا کنم؟¶برای Win32، OSX، Linux، BSD، Jython، IronPython: برای یونیکس، یک پست یوزنت از میچ چپمن را ببینید: چرا بستن sys.stdout (stdin, stderr) واقعاً آن را نمیبندد؟¶اشیای پرونده در پایتون، یک لایه انتزاعی سطح بالا بر روی توصیفگرهای پرونده سطح پایین C هستند. برای بیشتر اشیای پروندهای که در پایتون از طریق تابع توکار اما پایتون stdin، stdout و stderr را بهطور ویژه مدیریت میکند، زیرا C نیز وضعیت ویژهای به آنها داده است. اجرای برای بستن توصیفگر پرونده C زیربنایی برای یکی از این سه مورد، ابتدا باید مطمئن شوید که واقعاً همین کار را میخواهید انجام دهید (برای مثال، ممکن است ماژولهای توسعهای را که سعی در انجام I/O دارند، دچار سردرگمی کنید). اگر چنین است، از os.close(stdin.fileno()) os.close(stdout.fileno()) os.close(stderr.fileno()) یا میتوانید بهترتیب از ثابتهای عددی 0، 1 و 2 استفاده کنید. برنامهنویسی شبکه/اینترنت¶چه ابزارهای WWW برای پایتون وجود دارد؟¶به فصلهایی با عنوانهای پروتکلهای اینترنتی و پشتیبانی و مدیریت دادههای اینترنتی در راهنمای مرجع کتابخانه مراجعه کنید. پایتون ماژولهای بسیاری دارد که به شما در ساخت سیستمهای وب سمت سرور و سمت کاربر کمک خواهند کرد. خلاصهای از چارچوبهای موجود توسط Paul Boddie در https://wiki.python.org/moin/WebProgrammingنگهداری میشود. برای کمک به تولید HTML از چه ماژولی باید استفاده کنم؟¶میتوانید مجموعهای از پیوندهای مفید را در صفحهی ویکی برنامهنویسی وب بیابید. چگونه از یک اسکریپت پایتون ایمیل ارسال کنم؟¶از ماژول کتابخانه استاندارد در اینجا یک فرستندهی تعاملی بسیار سادهی ایمیل آمده است که از آن استفاده میکند. این روش روی هر میزبانی که از یک شنوندهی SMTP پشتیبانی کند کار خواهد کرد. import sys, smtplib fromaddr = input("From: ") toaddrs = input("To: ").split(',') print("Enter message, end with ^D:") msg = '' while True: line = sys.stdin.readline() if not line: break msg += line # The actual mail send server = smtplib.SMTP('localhost') server.sendmail(fromaddr, toaddrs, msg) server.quit() یک جایگزین مختص یونیکس از sendmail استفاده میکند. مکان برنامهی sendmail در سیستمهای مختلف متفاوت است؛ گاهی import os SENDMAIL = "/usr/sbin/sendmail" # sendmail location p = os.popen("%s -t -i" % SENDMAIL, "w") p.write("To: [email protected]\n") p.write("Subject: test\n") p.write("\n") # blank line separating headers from body p.write("Some text\n") p.write("some more text\n") sts = p.close() if sts != 0: print("Sendmail exit status", sts) چگونه از مسدود شدن در متد connect() یک سوکت جلوگیری کنم؟¶ماژول برای جلوگیری از مسدود شدن اتصال TCP، میتوانید سوکت را در حالت غیرمسدودکننده قرار دهید. سپس وقتی میتوانید از متد پایگاههای داده¶آیا در پایتون رابطهایی برای بستههای پایگاه داده وجود دارد؟¶بله. رابطهایی برای هشهای مبتنی بر دیسک مانند پشتیبانی از بیشتر پایگاهدادههای رابطهای در دسترس است. برای جزئیات، صفحهی ویکی DatabaseProgramming را ببینید. چگونه اشیاء پایا را در پایتون پیادهسازی میکنید؟¶ماژول کتابخانهای ریاضیات و محاسبات عددی¶چگونه در پایتون اعداد تصادفی تولید کنم؟¶ماژول استاندارد import random random.random() این یک عدد ممیز شناور تصادفی در بازهی [۰، ۱) برمیگرداند. در این ماژول، تولیدگرهای تخصصی بسیاری نیز وجود دارند، مانند:
برخی از توابع سطحبالا مستقیماً روی دنبالهها عمل میکنند، از جمله:
همچنین یک کلاس
© حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است. مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند. برای اطلاعات بیشتر به تاریخچه و مجوز مراجعه کنید. بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است. لطفاً کمک مالی کنید. آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC). آیا اشکالی یافتید؟ ساخته شده با Sphinx 9.1.0. |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |