পাইথন (প্রোগ্রামিং ভাষা) (original) (raw)
এই নিবন্ধটি কম্পিউটারের একটি ভাষা সম্পর্কিত; একই বানানের অন্যান্য নিবন্ধের জন্য পাইথন (দ্ব্যর্থতা নিরসন) দেখুন।
পাইথন
| প্যারাডাইম | বহু-প্যারাডাইম |
| নকশাকার | গুইডো ভ্যান রস্যিউম |
| বিকাশকারী | পাইথন সফটওয়্যার ফাউন্ডেশন |
| প্রথম প্রদর্শিত | ১৯৯১ |
| টাইপিং পদ্ধতি | কঠোর, চলমান ("ডাক টাইপিং") |
| ওএস | আন্তঃ-প্ল্যাটফর্ম |
| লাইসেন্স | পাইথন সফটওয়্যার ফাউন্ডেশন লাইসেন্স |
| ফাইলনেম এক্সটেনশন | .py |
| মুখ্য বাস্তবায়নসমূহ | |
| সিপাইথন, জাইথন, আয়রনপাইথন, পাইপাই | |
| উপভাষাসমূহ | |
| স্ট্যাকলেস পাইথন | |
| যার দ্বারা প্রভাবিত | |
| এবিসি সি হ্যাস্কেল আইকন লিস্প মডুলা-৩ পার্ল জাভা[১][_উল্লেখ করুন_] | |
| যাকে প্রভাবিত করেছে | |
| রুবি, বু |
পাইথন (ইংরেজি: Python) একটি বস্তু-সংশ্লিষ্ট উচ্চস্তরের প্রোগ্রামিং ভাষা। ১৯৯১ সালে গিডো ভান রসম এটি প্রথম প্রকাশ করেন।[২] পাইথন নির্মাণ করার সময় প্রোগ্রামের পঠনযোগ্যতার উপর বেশি গুরুত্ব দেয়া হয়েছে।[৩] এখানে প্রোগ্রামারের পরিশ্রমকে কম্পিউটারের চেয়ে বেশি গুরুত্ব দেয়া হয়েছে। পাইথনের কোর সিনট্যাক্স ও সেমান্টিক্স খুবই সংক্ষিপ্ত, তবে ভাষাটির স্ট্যান্ডার্ড লাইব্রেরি অনেক সমৃদ্ধ। পাইথন প্রোগ্রামারদের সমাজ থেকে পাইথন দর্শন এর সূচনা হয়েছে।
পাইথন একটি বহু-প্যারাডাইম প্রোগ্রামিং ভাষা (ফাংশন-ভিত্তিক, বস্তু-সংশ্লিষ্ট ও নির্দেশমূলক) এবং এটি একটি পুরোপুরি চলমান প্রোগ্রামিং ভাষা যার স্বনিয়ন্ত্রিত মেমরি ব্যবস্থাপনা রয়েছে। এদিক থেকে এটি পার্ল, রুবি প্রভৃতি প্রোগ্রামিং ভাষার মত।
পাইথন ভাষার মুক্ত, কমিউনিটি-ভিত্তিক উন্নয়ন মডেল রয়েছে, যার দায়িত্বে আছে পাইথন সফটওয়্যার ফাউন্ডেশন নামের একটি অলাভজনক প্রতিষ্ঠান। এই ভাষাটির বিভিন্ন অংশের বিধিবদ্ধ বৈশিষ্ট্য ও আদর্শ থাকলেও পুরো ভাষাটিকে এখনো সম্পূর্ণ বিধিবদ্ধ করা হয়নি। তবে কার্যত সিপাইথন ভাষাটির আদর্শ বাস্তবায়িত রূপ।
পাইথন প্রোগ্রামিং ভাষার নামকরণ করা হয়েছে ব্রিটিশ রম্য অনুষ্ঠান "মন্টি পাইথন ফ্লাইং সারকাসের" নামে।
পাইথন এর উদ্ভাবক, গিডো ভান রসম
১৯৮০ দশকের শেষের দিকে পাইথনের জন্ম দেন নেদারল্যান্ডের সিডব্লিউআই'র গবেষক গুইডো ভ্যান রস্যিউম।[৪] মূলত এবিসি'র উত্তরসূরী হিসেবে পাইথনের আবির্ভাব হয়েছে যা এক্সেপশন হ্যান্ডলিং করতে এবং অ্যামিবা অপারেটিং সিস্টেমের সাথে কাজ করতে সক্ষম ছিল।[৫] ভ্যান রস্যিউম পাইথনের প্রধান লেখক এবং বর্তমানে পাইথনের উন্নয়নে তিনিই প্রধানত নেতৃত্ব দিচ্ছেন। তাকে পাইথনের আজীবন পরিচালক হিসেবে সম্মান দেয়া হয়েছে।
১৯৯১ সালে ভ্যান রস্যিউম পাইথনের কোড প্রকাশ করেন (ভার্শন ০.৯.০)।[২] পাইথন ডিজাইনের এই ধাপেই ক্লাস ইনহেরিটেন্স, এক্সেপশন হ্যান্ডলিং, ফাংশন, ও প্রধান ডাটা টাইপ list, dict, str প্রভৃতি সংযুক্ত ছিল। এই প্রাথমিক প্রকাশে ছিল মডুলা-৩ থেকে ধার করা মডিউল সিস্টেম; ভ্যান রোসাম এই মডিউলকে "পাইথনের মূল প্রোগ্রামিং ইউনিটের একটি" আখ্যায়িত করেছেন।[৪] পাইথনের এক্সেপশন মডেলটিও অনেকটা মডুলা-৩'র মত যাতে কেবল অতিরিক্ত else যুক্ত হয়েছে।[৫] ১৯৯৪ সালে পাইথনের প্রধান ফোরাম comp.lang.python গঠিত হয়, এবং পাইথনের ব্যবহারকারীদের জন্য তা মাইলফলক হিসেবে চিহ্নিত হয়।
১৯৯৪ সালের জানুয়ারি পাইথন ১.০ সংস্করণে প্রবেশ করে। এই সংস্করণে যে প্রধান বিষয়াদি যুক্ত হয় তা হলো ফাংশনাল প্রোগ্রামিং টুলস [lambda](//bn.wikipedia.org/wiki/ল্যাম্বডা%5Fক্যালকুলাস?action=edit&redlink=1 "ল্যাম্বডা ক্যালকুলাস (পাতার অস্তিত্ব নেই)"), map, filter ও reduce। ভ্যান রস্যিউম বলেন "পাইথন lambda, reduce(), filter() ও map() অধিকার করেছে, (আমি বিশ্বাস করি) একজন লিস্প হ্যাকারের কাছ থেকে যে নিজেকে এগুলো থেকে বঞ্চিত মনে করছিল এবং কর্মক্ষম প্যাচগুলো সরবরাহ করেছে।"[৬] এর প্রধান অবদানকারী ছিলেন অমৃত প্রেম; এবং এর প্রকাশ নোটে সে সময় কোন লিস্প প্রোগ্রামের উত্তরসূরী হওয়ার উল্লেখ করা হয়নি।
সিডব্লিউআই থেকে প্রকাশিত সর্বশেষ সংস্করণ হচ্ছে পাইথন ১.২। ১৯৯৫ সালে ভ্যান রস্যিউম ভার্জিনিয়ার কর্পোরেশন ফর ন্যাশনাল রিসার্চ ইনিশিয়েটিভস (সিএনআরআই) প্রতিষ্ঠান থেকে পাইথনের ওপর তার কাজ চালিয়ে যেতে থাকেন এবং এখান থেকে সফটওয়ারটির কয়েকটি সংস্করণ বের করেন।
১.৪ সংস্করণের মধ্যে পাইথনের কিছু নতুন বৈশিষ্ট্য যোগ করা হয়। এর মধ্যে উল্লেখযোগ্য হলো মডুলা-৩ থেকে উদ্বুদ্ধ হয়ে গ্রহণ করা নতুন কিওয়ার্ড আর্গুমেন্ট (যা কমন লিস্প এর কিওয়ার্ড আর্গুমেন্টের সাথে অনেকটা মেলে), এবং জটিল সংখ্যার জন্য অভ্যন্তরীন সমর্থন। এছাড়া তথ্য লুকানোর জন্যও একটি বিশেষ ব্যবস্থা ছিল, যদিও তা তেমন কঠিন কিছু ছিলনা।[৭]
সিএনআরআই তে থাকাকালীন ভ্যান রস্যিউম কম্পিউটার প্রোগ্রামিং ফর এভরিবডি (সিপি৪ই) উদ্যোগ গ্রহণ করেন, যাতে আরো অনেক মানুষ কম্পিউটার প্রোগ্রামিং এর সুবিধা গ্রহণ এবং অল্প মৌলিক প্রোগ্রামিং জ্ঞানের (ইংরেজি ও গণিতের জন্য সাধারণ যে জ্ঞান থাকা প্রয়োজন) মাধ্যমে ছোটখাট সমস্যা সমাধান করতে পারে। পাইথন এক্ষেত্রে কেন্দ্রীয় ভূমিকা পালন করেছে যার মূল কারণঃ এর পরিষ্কার সিনট্যাক্সের প্রতি মনোযোগ, এর ব্যবহার উপযোগিতা এবং সিপি৪ই এর লক্ষ্যের সাথে পাইথনের পূর্বসূরী এবিসির লক্ষ্যের মিল। এই প্রকল্পের অর্থায়ন করে DARPA।[৮] এই ২০০৭ সাল পর্যন্ত সিপি৪ই প্রকল্প নিস্ক্রিয় রয়েছে এবং অন্যদিকে পাইথন সাধারণ মানুষের জন্য সহজে শিখার মত প্রোগ্রামিং ভাষা তৈরির লক্ষ্য থেকে অনেকটাই দূরে সরে গেছে। এটা এখন আর পাইথনের জন্য সক্রিয় বিবেচ্য নয়।[৯]
২০০০ সালে পাইথনের মূল উন্নয়নকারী দল বিওপেন.কম এর সাথে যুক্ত হয়ে যৌথভাবে বিওপেন পাইথনল্যাবস গঠন করে। সিএনআরআই পাইথনের একটি সংস্করণ ১.৬ প্রকাশের অনুরোধ করেছিল যা মূলত এ পর্যন্ত সিএনআরআইতে পাইথনের যেটুকু উন্নয়ন হয়েছে তার সম্মিলিত প্রকাশ। একারণে পাইথনের ১.৬ ও ২.০ সংস্করণের মধ্যে অনেক বিলম্ব ঘটেছিল।[১০] পাইথন ২.০ ছিল বিওপেন.কম থেকে প্রকাশিত প্রথম ও একমাত্র পাইথন ডিস্ট্রিবিউশন। পাইথন ২.০ প্রকাশিত হওয়ার পর গুইডো ভ্যান রোসাম ও অন্যান্য পাইথনল্যাবস কর্মীরা ডিজিটাল ক্রিয়েশন্স এ যোগ দেন।
পাইথন ২.০ তার বিভিন্ন বৈশিষ্টের অনেকাংশই ধার করেছে ফাংশনভিত্তিক প্রোগ্রামিং ভাষা হ্যাস্কেল থেকে। হ্যাস্কেলের লিস্ট ও পাইথনের মধ্যে অনেক মিল রয়েছে যদিও হ্যাস্কেল যতিচিহ্নকে বেশি গুরুত্ব দেয় আর পাইথন গুরুত্ব দেয় বর্ণভিত্তিক কিওয়ার্ড এর উপর। পাইথন ২.০ তে গারবেজ কালেকশন ব্যবস্থা যুক্ত হয়েছে যা নিয়মিত ভাবে মেমরি পরিষ্কার করতে সক্ষম।[১০]
এই দ্বৈত প্রকাশের পর ও ভ্যান রস্যিউমের সিএনআরআই ত্যাগ করে বাণিজ্যিক সফটওয়ার নির্মাতাদের সাথে যুক্ত হবার পর পরিষ্কার হয়ে যায় যে, জিপিএল লাইসেন্সের অধীনে পাইথন সফটওয়ারের ব্যবহারের খুবই প্রয়োজনীয়। সে সময় যে লাইসেন্স ব্যবহৃত হত তা ছিল পাইথন লাইসেন্স। এতে একটি সংযুক্তি ছিল যাতে বলা থাকে এই লাইসেন্স ভার্জিনিয়া রাজ্যের নিয়ন্ত্রণাধীন যারা এটা তৈরি করেছে। ফ্রি সফটওয়ার ফাউন্ডেশনের (এফএসএফ) আইনজীবিদের মতে এই লাইসেন্স গনু জিপিএলের সাথে সঙ্গতিপূর্ণ নয়। সিএনআরআই ও এফএসএফ একত্রিত হয়ে পাইথনের লাইসেন্সে পরিবর্তন আনেন যাতে এটা জিপিএলের সাথে সঙ্গতিপূর্ণ হয়। একই বছর (২০০১) ভ্যান রোসামকে এফএসএফ অ্যাওয়ার্ড ফর দ্য অ্যাডভান্সমেন্ট ওব ফ্রি সফটওয়ার পুরস্কার দেয়া হয়।
পাইথন ১.৬.১ আসলে শুধুই পাইথন ১.৬ যাতে কিছুটা ত্রুটি মুক্ত করা হয়েছে এবং নতুন জিপিএল-সঙ্গতিপূর্ণ লাইসেন্স রয়েছে।[১১]
সিনট্যাক্স বর্ণায়িত পাইথন কোড
পাইথন ২.১ তৈরি করা হয়েছে পাইথন ১.৬.১ ও পাইথন ২.০ এর উপর ভিত্তি করে। এর লাইসেন্সের নাম পরিবর্তন করে রাখা হয় পাইথন সফটওয়ার ফাউন্ডেশন লাইসেন্স। পাইথন ২.১ এর প্রকাশের পর এগুলোর সমস্ত কোড, ডকুমেন্টেশন ও স্পেসিফিকেশন পাইথন সফটওয়ার ফাইন্ডেশন (পিএসএফ) এর অধীনে চলে আসে। অলাভজনক প্রতিষ্ঠান হিসেবে পিএসএফ গঠন করা হয় ২০০১ সালে। এটির ব্যবস্থাপনা ও গঠন অ্যাপাচি সফটওয়ার ফাউন্ডেশনের আদলে করা হয়।[১১] এই ভার্শনে স্ট্যাটিক স্কোপিং নিয়মাবলী (যেটির মূল প্রবক্তা হচ্ছে স্কিম নামে একটি প্রোগ্রামিং ভাষা) যোগ করা হয়, যদিও প্রথম দিকে এটি বাধ্যতামূলক ও সাধারনভাবে সক্রিয় ছিল না।[১২]
পাইথন ২.২ এর একটি প্রধান উদ্ভাবন হচ্ছে পাইথনের বিভিন্ন টাইপ (সি তে লেখা টাইপসমূহ) ও ক্লাসের (পাইথনে লেখা টাইপসমূহ) একই গঠনের আওতায় নিয়ে আসা। এর ফলে পাইথনের অবজেক্ট মডেল অনেক স্থিতিশীল ও প্রকৃত অবজেক্ট ওরিয়েন্টেড হয়েছে।[১৩] এতে আরও যুক্ত করা হয়েছে জেনারেটর যেটি আইকন নামে একটি ভাষায় প্রথম ব্যবহৃত হয়েছে।[১৪]
পাইথনের স্ট্যান্ডার্ড লাইব্রেরি ও সিনট্যাক্টিক্যাল ব্যবহার জাভা থেকে অনুপ্রাণিত হয়েছে। কোন কোন ক্ষেত্রে যেমনঃ logging প্যাকেজ,[১৫] যা যুক্ত হয় ২.৩ ভার্সনে,[১৬] স্যাক্স পার্সার যা ২.০ সংস্করণে যুক্ত হয় এবং ডেকোরেটর সিনট্যাক্স যা @ ব্যবহার করে এবং ২.৪ সংস্করণে যুক্ত হয়[১৭] added in version 2.4[১৮] ইত্যাদি।
যে সকল বড় বড় প্রকল্পে পাইথন ব্যবহৃত হয়েছে তার মধ্যে জোপ অ্যাপ্লিকেশন সার্ভার, এমনেট ডিস্ট্রিবিউটেড ফাইল স্টোর, ইউটিউব এবং মূল বিটটরেন্ট ক্লায়েন্ট উল্লেখযোগ্য। যে সমস্ত বড় প্রতিষ্ঠান পাইথন ব্যবহার করে তাদের মধ্যে গুগল[১৯] ও নাসা[২০] উল্লেখযোগ্য।
তথ্য নিরাপত্তা শিল্পে পাইথনে বহুবিধ ব্যবহার লক্ষনীয়। এর মধ্যে ইমিউনিটি সিকিউরিটির কিছু টুলস,[২১][২২] কোর সিকিউরিটির কিছু টুলস,[২৩] ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা স্ক্যানার ওয়াপিটি,[২৪] ও ফাজার টিএওএফ[২৫] বিশেষভাবে উল্লেখযোগ্য। সাধারণত দ্রুত সফটওয়ার নির্মাণের জন্য পাইথন ব্যবহৃত হয়।[২৬][২৭]
পাইথন কোডের একটি ব্লক বোঝাতে ব্রাকেট বা কীওয়ার্ডের পরিবর্তে হোয়াইটস্পেস ইন্ডেন্টেশন ব্যবহার করে। এই ব্যবস্থাটিকে অফ-সাইড নিয়ম বলা হয়। কোন একটি ব্লক বোঝাতে ইন্ডেন্টেশন বেশি করা হয়। আবার চলতি ব্লক শেষ বোঝাতে কম ইন্ডেন্টেশন করা হয়।
স্টেট্মেন্ট এবং কন্ট্রোল ফ্লো
[সম্পাদনা]
পাইথনে যেসব স্টেট্মেন্ট আছে তার মধ্যে অন্যতম হল-
ifস্টেট্মেন্ট যাelseএবংelif(else if এর সংক্ষিপ্ত রূপ) এর সাথে কোডের একটি ব্লক শর্তের উপর ভিত্তি করে এক্সিকিউট করে।whileস্টেট্মেন্ট যা কোডের একটি ব্লক এক্সিকিউট করে যতক্ষণ পর্যন্ত এর শর্ত পূরণ হতে থাকে।defস্টেট্মেন্ট যা একটি ফাংশন অথবা মেথড লেখার জন্য ব্যবহৃত হয়।yieldস্টেট্মেন্ট যা একটি জেনারেটর ফাংশন থেকে মান পাঠায়। পাইথন ২.৫ থেকেyieldকে অপারেটর এর মধ্যেও অন্তর্ভুক্ত করা হয়েছে। এটি করা হয়েছে মূলত কোরুটিন বাস্তবায়নের জন্য।
পাইথন একটি অত্যন্ত পঠনযোগ্য ভাষা হিসেবে ডিজাইন করা হয়েছিল। এটি একটি পরিচ্ছন্ন দৃশ্যমান বিন্যাসের লক্ষ্য রাখে, যেখানে অন্যান্য ভাষা বিরাম চিহ্ন ব্যবহার করে সেখানে এটি প্রায়শই ইংরেজি কীওয়ার্ড ব্যবহার করে এবং সি (C), পার্ল (Perl) বা প্যাসকেল (Pascal)-এর মতো অনেক কাঠামোগত ভাষার তুলনায় এতে উল্লেখযোগ্যভাবে কম সিনট্যাকটিক গঠন রয়েছে। পাইথন স্টেটমেন্ট ব্লকগুলোকে সীমাবদ্ধ করতে কার্লি ব্র্যাকেট বা কোঁকড়ানো বন্ধনীর পরিবর্তে ইন্ডেন্টেশন ব্যবহার করে। কিছু নির্দিষ্ট স্টেটমেন্টের পর ইন্ডেন্টেশন বৃদ্ধি পায়; ইন্ডেন্টেশন হ্রাস পাওয়া বর্তমান ব্লকের সমাপ্তি নির্দেশ করে। পাইথনের স্টেটমেন্টগুলোর মধ্যে রয়েছে:
- if স্টেটমেন্ট, যা
elseএবংelif(else-if এর সংক্ষিপ্ত রূপ) সহ শর্তসাপেক্ষে কোডের একটি ব্লক সম্পাদন করে। - while স্টেটমেন্ট, যা একটি শর্ত
Falseবা মিথ্যা না হওয়া পর্যন্ত কোডের একটি ব্লক চালাতে থাকে। - for স্টেটমেন্ট, যা একটি ইট্যারেবলের ওপর পুনরাবৃত্তি (iterate) করে, সংযুক্ত ব্লকের ব্যবহারের জন্য প্রতিটি উপাদানকে একটি স্থানীয় চলকে (local variable) ধারণ করে।
classস্টেটমেন্ট, যা কোডের একটি ব্লক সম্পাদন করে এবং এর স্থানীয় নেমস্পেসকে একটি ক্লাসের সাথে যুক্ত করে, যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ ব্যবহারের জন্য।defস্টেটমেন্ট, যা একটি ফাংশন সংজ্ঞায়িত করে।
প্রতিটি স্টেটমেন্টের নিজস্ব শব্দার্থবিদ্যা (semantics) রয়েছে: উদাহরণস্বরূপ, অন্যান্য বেশিরভাগ স্টেটমেন্টের মতো def স্টেটমেন্ট তাৎক্ষণিকভাবে এর ব্লক সম্পাদন করে না।
সিপাইথন (CPython) কন্টিনিউয়েশন সমর্থন করে না এবং গুইডো ভ্যান রস্যামের মতে, এটি কখনও করবেও না।[২৮] তবে, পাইথনের জেনারেটর সম্প্রসারণের মাধ্যমে ২.৫ সংস্করণে করুটিন-এর মতো কার্যকারিতার জন্য আরও ভালো সমর্থন প্রদান করা হয়েছে।[২৯] ২.৫ সংস্করণের আগে, জেনারেটরগুলো ছিল অলস ইট্যারেটর — যেখান থেকে তথ্য জেনারেটরের বাইরে একমুখীভাবে (monodirectionally) প্রবাহিত হতো।
পাইথন ডাক টাইপিং ব্যবহার করে, যা ল্যাটেন্ট টাইপিং নামেও পরিচিত। কম্পাইল টাইম-এ টাইপ সীমাবদ্ধতাগুলো পরীক্ষা করা হয় না; বরং, কোনো অবজেক্টের ওপর অপারেশন ব্যর্থ হতে পারে, যা নির্দেশ করে যে প্রদত্ত অবজেক্টটি উপযুক্ত টাইপের নয়। স্ট্যাটিক টাইপিং প্রয়োগ না করা সত্ত্বেও পাইথন একটি স্ট্রংলি টাইপড ভাষা, যা অর্থহীন অপারেশনগুলোকে (উদাহরণস্বরূপ, একটি স্ট্রিংয়ের সাথে একটি সংখ্যা যোগ করা) নীরবে কোনো অর্থবোধক করার চেষ্টার পরিবর্তে সেগুলোকে নিষিদ্ধ করে।
পাইথনে বেশ কয়েকটি সাধারণ ডেটা টাইপ রয়েছে, যার মধ্যে পূর্ণসংখ্যা উপস্থাপনের জন্য int এবং ফ্লোটিং-পয়েন্ট সংখ্যার জন্য float অন্তর্ভুক্ত। ভাষাটিতে বুলিয়ান ক্রিয়াকলাপের জন্য একটি bool টাইপও রয়েছে। এছাড়াও জটিল সংখ্যার জন্য একটি complex টাইপ রয়েছে।
এই চারটি সাংখ্যিক ডেটা টাইপ ছাড়াও, পাইথনে বিভিন্ন উদ্দেশ্যে ব্যবহৃত বেশ কয়েকটি বিল্ট-ইন টাইপ রয়েছে। এই তালিকাটি সবচেয়ে বেশি ব্যবহৃত টাইপগুলোর বর্ণনা দেয়; পাইথন এরকম আরও অনেক টাইপ প্রদান করে — বিল্ট-ইন টাইপগুলোর একটি সম্পূর্ণ তালিকা ডকুমেন্টেশন থেকে পাওয়া যাবে।
| টাইপ | ধরন | মন্তব্য | সিনট্যাক্স উদাহরণ |
|---|---|---|---|
| str | স্ট্রিং | অপরিবর্তনীয় | 'Wikipedia' |
| unicode | স্ট্রিং | str-এর ইউনিকোড সংস্করণ | u'Wikipedia' |
| list | সিকোয়েন্স | পরিবর্তনযোগ্য, মিশ্র টাইপ ধারণ করতে পারে | [4.0, 'string', True] |
| tuple | সিকোয়েন্স | অপরিবর্তনীয়, প্রায়শই "রেকর্ড" হিসেবে ব্যবহৃত হয় | (4.0, 'string', True) |
| set | সেট | অবিন্যস্ত, কোনো প্রতিলিপি (ডুপ্লিকেট) থাকে না | set([4.0, 'string', True]) |
| dict | ম্যাপিং | কী (key) এবং ভ্যালু (value) জোড়ার সমষ্টি | {'key1': 1.0, 'key2': False} |
| int | পূর্ণসংখ্যা (Integer) | ফিক্সড-প্রিসিশন | 42 |
| long | পূর্ণসংখ্যা (Integer) | অ্যারবিট্রারি-প্রিসিশন | 42L বা 456966786151987643L |
| float | সংখ্যা | ফ্লোটিং পয়েন্ট | 3.1415927 |
পাইথন প্রোগ্রামারদের নিজস্ব টাইপ সংজ্ঞায়িত করার সুযোগও দেয়। এটি ক্লাস আকারে থাকে, যা প্রায়শই প্রোগ্রামিংয়ের অবজেক্ট-ওরিয়েন্টেড ঘরানায় ব্যবহৃত হয়। ক্লাসগুলোকে কল করার মাধ্যমে (অর্থাৎ, FooClass() এর মতো) ক্লাসের নতুন ইনস্ট্যান্স বা দৃষ্টান্ত তৈরি করা হয়, এবং ক্লাসগুলো নিজেই type ক্লাসের ইনস্ট্যান্স (যা আবার নিজেরই একটি ইনস্ট্যান্স), যা মেটাপ্রোগ্রামিং এবং রিফ্লেকশন-এর সুযোগ দেয়।
অবজেক্টের মেথডগুলো হলো অবজেক্টের ক্লাসের সাথে যুক্ত ফাংশন; সাধারণ মেথড এবং ফাংশনের ক্ষেত্রে, instance.method(argument) সিনট্যাক্সটি মূলত Class.method(instance, argument)-এর জন্য একটি সিনট্যাকটিক সুগার। এই কারণেই ইনস্ট্যান্স ডেটা অ্যাক্সেস করার জন্য পাইথন মেথডগুলোতে একটি সুস্পষ্ট [self](//bn.wikipedia.org/wiki/দিস%5F%28কম্পিউটার%5Fবিজ্ঞান%29?action=edit&redlink=1 "দিস (কম্পিউটার বিজ্ঞান) (পাতার অস্তিত্ব নেই)") প্যারামিটার থাকতে হয়, যা অন্যান্য কিছু অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষার (উদাহরণস্বরূপ, জাভা বা রুবি) অন্তর্নিহিত বা ইমপ্লিসিট self-এর ঠিক বিপরীত।[৩০]
'হ্যালো, বিশ্ব' লেখার প্রোগ্রাম:
ইনপুট নিয়ে তা পুনরায় লেখার প্রোগ্রাম
নাম= input("আপনার নাম টি লেখুন ") print(নাম)
ধনাত্মক সংখ্যার গৌণিক নির্ণয়ের প্রোগ্রামঃ
n = int(input('একটি সংখ্যা টাইপ করুন, এবং এর গৌণিক মুদ্রণ করা হবে: '))
if n < 0: raise ValueError('আপনাকে অবশ্যই একটি ধনাত্মক পূর্ণসংখ্যা লিখতে হবে')
fact = 1 i = 2 while i <= n: fact *= i i += 1
print(fact) print(1+1)
সিপাইথন এর মিথষ্ক্রিয়/interactive মোড,যা IDLE এর মাধ্যমে ব্যবহার করা হচ্ছে
মানসম্মত পাইথন ইন্টারপ্রেটার একটি _ইন্টারেক্টিভ মোড_-ও সমর্থন করে, যেখানে এটি এক ধরনের শেল হিসেবে কাজ করে: এক্সপ্রেশনগুলো একে একে প্রবেশ করানো যায় এবং সেগুলোর মূল্যায়নের ফলাফল তাৎক্ষণিকভাবে দেখা যায়। এটি ভাষাটি যারা শিখছেন এবং অভিজ্ঞ ডেভেলপার—উভয়ের জন্যই একটি আশীর্বাদস্বরূপ: কোনো পূর্ণাঙ্গ প্রোগ্রামে যুক্ত করার আগে কোডের ছোট অংশগুলো (snippets) ইন্টারেক্টিভ মোডে পরীক্ষা করে নেওয়া যায়। পাশাপাশি, পাইথন শেল প্রায়শই মিথস্ক্রিয়ামূলকভাবে বা ইন্টারেক্টিভ উপায়ে সিস্টেমের কাজগুলো সম্পন্ন করতে ব্যবহৃত হয়, যেমন ফাইল পরিবর্তন বা মডিফাই করা।
অন্যান্য শেলগুলো মৌলিক ইন্টারপ্রেটারের চেয়ে আরও বেশি কার্যক্ষমতা প্রদান করে, যার মধ্যে আইডিএলই এবং আইপাইথন অন্যতম। এগুলো সাধারণত পাইথন শেলের দৃশ্যমান শৈলী অনুসরণ করলেও, এগুলোতে অটো-কমপ্লিশন (স্বয়ংক্রিয়-সমাপ্তি), সেশনের অবস্থা বা স্টেট ধরে রাখা এবং সিনট্যাক্স হাইলাইটিংয়ের মতো বৈশিষ্ট্যগুলো থাকে। পাইথনের নিজস্ব বহু মডিউল ও লাইব্রেরি থাকা সত্বেও বিশেষ ধরনের কাজের জন্য বিশেষভাবে তৈরি বিভিন্ন প্যাকেজ পাওয়া যায়। যেমনঃ বায়োইনফর্মেটিক্স বিষয়ক কাজের জন্য রয়েছে BioPython, গ্রাফিকেল ইন্টারফেস প্রোগ্রামিং এর জন্য PyGTK ওয়েব্যাক মেশিনে আর্কাইভকৃত ১৫ জানুয়ারি ২০০৯ তারিখে, ইমেজ প্রসেসিং এর জন্য OpenCV ইত্যাদি।
পাইথনের মূলধারার বাস্তবায়ন, যা সিপাইথন নামেও পরিচিত, সেটি লেখা হয়েছে সি প্রোগ্রামিং ভাষাতে। এটি একটি বৃহৎ স্ট্যান্ডার্ড লাইব্রেরির সাথে বণ্টিত হয় যা সি ও পাইথন উভয় ভাষার মিশ্রণে লেখা। সিপাইথন বর্তমানে প্রচলিত অধিকাংশ ইউনিক্স-সদৃশ অপারেটিং সিস্টেম এবং মাইক্রোসফট উইন্ডোজ-সহ বিপুল সংখ্যক প্ল্যাটফর্মের জন্য উপলব্ধ; বিস্তারিত জানতে সম্পূর্ণ তালিকাটি দেখুন। এর কোডবেস মূলত কমপ্লায়েন্ট C89[৩১] দিয়ে লেখা, যার ফলে এটি সহজেই বেশিরভাগ অপারেটিং সিস্টেমে, বিশেষ করে পজিক্স-কমপ্লায়েন্ট বা ইউনিক্স-সদৃশ সিস্টেমে পোর্টেবল বা স্থানান্তরযোগ্য।
পাইথন মূলত অ্যামিবা ডিস্ট্রিবিউটেড অপারেটিং সিস্টেম-এর জন্য একটি স্ক্রিপ্টিং ভাষা হিসেবে তৈরি করা হয়েছিল যা সিস্টেম কল করতে সক্ষম ছিল; তবে সেই সংস্করণটি এখন আর রক্ষণাবেক্ষণ করা হয় না। সিপাইথনকে এর প্রায় জন্মলগ্ন থেকেই ক্রস-প্ল্যাটফর্ম করার পরিকল্পনা করা হয়েছিল; অ্যামিবার মতো দুর্লভ প্ল্যাটফর্মের পাশাপাশি ইউনিক্স বা ম্যাকিনটোশ-এর মতো প্রচলিত প্ল্যাটফর্মে এর ব্যবহার ও উন্নয়ন এই লক্ষ্য পূরণে অনেক সাহায্য করেছে।[৩২]
স্ট্যাকলেস পাইথন হলো সিপাইথনের একটি উল্লেখযোগ্য ফর্ক যা মাইক্রোথ্রেড বাস্তবায়ন করে। এটি প্রায় সেইসব প্ল্যাটফর্মেই চলতে পারে যেগুলোতে সিপাইথন চলে।
আরও দুটি প্রধান বাস্তবায়ন রয়েছে: জাভা প্ল্যাটফর্ম-এর জন্য জাইথন, এবং .NET প্ল্যাটফর্ম-এর জন্য আয়রনপাইথন। পাইপাইহলো পাইথন দিয়েই তৈরি পাইথনের একটি পরীক্ষামূলক সেলফ-হোস্টিং বাস্তবায়ন, যা বিভিন্ন ধরনের বাইটকোড, অবজেক্ট কোড এবং ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ আউটপুট দিতে পারে। আরও বেশ কিছু পরীক্ষামূলক বাস্তবায়ন তৈরি করা হয়েছে, তবে সেগুলো এখনো ব্যাপকভাবে গৃহীত হয়নি।
পাইথন প্রোগ্রামগুলোকে স্বতন্ত্র এক্সিকিউটেবল ফাইলে প্যাকেজ করার জন্য বেশ কিছু প্রোগ্রাম রয়েছে, যার মধ্যে py2exe, PyInstaller এবং py2app ওয়েব্যাক মেশিনে আর্কাইভকৃত ২৩ অক্টোবর ২০১০ তারিখে অন্তর্ভুক্ত।
অনেক পাইথন প্রোগ্রাম কোনো পরিবর্তন ছাড়াই বিভিন্ন পাইথন বাস্তবায়নে এবং ভিন্ন ভিন্ন অপারেটিং সিস্টেম ও এক্সিকিউশন এনভায়রনমেন্টে চলতে পারে। জাভা ভার্চুয়াল মেশিন বা কমন ল্যাঙ্গুয়েজ রানটাইম-এর ওপর ভিত্তি করে চলা বাস্তবায়নগুলোর ক্ষেত্রে, এই সিস্টেমগুলোর প্ল্যাটফর্ম-নিরপেক্ষতাকে সংশ্লিষ্ট পাইথন বাস্তবায়ন দ্বারা কাজে লাগানো হয়।
পাইথনের অনেক থার্ড-পার্টি লাইব্রেরি (এবং এমনকি কিছু ফার্স্ট-পার্টি লাইব্রেরিও) শুধুমাত্র উইন্ডোজ, লিনাক্স, বিএসডি এবং ম্যাক ওএস এক্স-এ উপলব্ধ।
পাইথন প্রোগ্রামিং ভাষায় লেখা একটি কোড যা একটি রোবটকে সামনে রাস্তা না পেলে বামে ঘোরার নির্দেশ দেয়
পাইথনের একটি বিশাল স্ট্যান্ডার্ড লাইব্রেরি রয়েছে, যা বিভিন্ন ধরণের কাজের উপযোগী সরঞ্জাম সরবরাহ করে। এটি পাইথন মডিউলগুলোর তথাকথিত "ব্যাটারি ইনক্লুডেড" দর্শন থেকে এসেছে। স্ট্যান্ডার্ড লাইব্রেরির মডিউলগুলোকে সি বা পাইথনে লেখা কাস্টম মডিউল দিয়ে আরও সমৃদ্ধ করা যেতে পারে। বর্তমানে, বুস্ট সি++ লাইব্রেরি-তে 'python' নামক একটি লাইব্রেরি অন্তর্ভুক্ত রয়েছে যা সি++ এবং পাইথনের মধ্যে আন্তঃকার্যক্ষমতা সক্ষম করে। স্ট্যান্ডার্ড লাইব্রেরি দ্বারা প্রদত্ত হরেক রকমের সরঞ্জামের সাথে সি এবং সি++ এর মতো লো-লেভেল ভাষা ব্যবহারের ক্ষমতা যুক্ত হওয়ায়, পাইথন বিভিন্ন ভাষা এবং টুলের মধ্যে একটি শক্তিশালী গ্লু ল্যাঙ্গুয়েজ হিসেবে কাজ করতে পারে।
স্ট্যান্ডার্ড লাইব্রেরিটি বিশেষ করে ইন্টারনেট-ভিত্তিক অ্যাপ্লিকেশন লেখার জন্য অত্যন্ত উপযোগী, যেখানে বিপুল সংখ্যক স্ট্যান্ডার্ড ফরম্যাট এবং প্রোটোকল (যেমন মাইম এবং এইচটিটিপি) সমর্থিত। এতে গ্রাফিকাল ইউজার ইন্টারফেস তৈরি, রিলেশনাল ডেটাবেস-এর সাথে সংযোগ স্থাপন, সুনির্দিষ্ট ডেসিমেল পাটিগণিত এবং রেগুলার এক্সপ্রেশন ব্যবহারের মডিউলও অন্তর্ভুক্ত রয়েছে।[৩৩] এছাড়াও সম্পূর্ণ টেস্ট স্যুট তৈরির জন্য পাইথনে একটি ইউনিট টেস্টিং ফ্রেমওয়ার্ক রয়েছে।
"ব্যাটারি ইনক্লুডেড" দর্শনের সাথে সামঞ্জস্য রেখে বর্তমানে এটি নিয়ে বিতর্ক চলছে যে, টুইস্টেড, নামপাই, বা ডব্লিউএক্সপাইথন-এর মতো থার্ড-পার্টি ওপেন সোর্স পাইথন মডিউলগুলো স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত করা উচিত কি না।
স্ট্যান্ডার্ড লাইব্রেরিটি সাধারণত পাইথনের অন্যতম প্রধান শক্তি হিসেবে বিবেচিত হয়।[৩৪] যদিও (অল্প কিছু ব্যতিক্রম ছাড়া) স্ট্যান্ডার্ড লাইব্রেরিটি শুধুমাত্র সিপাইথন বাস্তবায়ন দ্বারা সংজ্ঞায়িত, তবুও এর সিংহভাগই ক্রস-প্ল্যাটফর্ম পাইথন কোড। পাইথনের একটা বড় স্ট্যান্ডার্ড লাইব্রেরি রয়েছে যেটা দিয়ে বিভিন্ন ধরনের কাজ সম্ভব। পাইথনের অনেক দর্শনের মধ্যে একটা হচ্ছে "আলাদা ব্যাটারির দরকার নাই"। পাইথনের স্ট্যান্ডার্ড লাইব্রেরির মডিউলগুলো সি বা পাইথন দিয়ে পরিবর্ধিত মডিউল তৈরী করা সম্ভব।
পাইথনের স্ট্য়ান্ডার্ড লাইব্রেরি বিশেষভাবে ইন্টারনেটমুখী এপ্লিকেশন উপযোগী। এখানে রয়েছে বিভিন্ন ফর্মাট এবং প্রটোকল যেমন(মাইম, এইচটিটিপি) এর সাপোর্ট।
পাইথন একটি মাল্টি-প্যারাডাইম প্রোগ্রামিং ভাষা। এর অর্থ হলো, প্রোগ্রামারদের কোনো নির্দিষ্ট স্টাইল বা রীতি গ্রহণে বাধ্য করার পরিবর্তে এটি একাধিক স্টাইল অনুমোদন করে: অবজেক্ট ওরিয়েন্টেড এবং কাঠামোবদ্ধ প্রোগ্রামিং এখানে পুরোপুরি সমর্থিত। এছাড়া এতে বেশ কিছু ল্যাঙ্গুয়েজ ফিচার বা বৈশিষ্ট্য রয়েছে যা ফাংশনাল প্রোগ্রামিং এবং অ্যাসপেক্ট-অরিয়েন্টেড প্রোগ্রামিং সমর্থন করে। এক্সটেনশন ব্যবহার করে আরও অনেক প্যারাডাইম সমর্থন করা সম্ভব, যেমন pyDBC এবং Contracts for Python যা ডিজাইন বাই কন্ট্রাক্ট-এর সুবিধা দেয়। মেমরি ব্যবস্থাপনা-র জন্য পাইথন ডায়নামিক টাইপিং এবং রেফারেন্স কাউন্টিং ব্যবহার করে। পাইথনের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হলো ডায়নামিক নেম রেজোলিউশন, যা প্রোগ্রাম চলার সময় মেথড এবং ভেরিয়েবলের নাম নির্ধারণ করে। ভাষার নকশার আরেকটি লক্ষ্য হলো সহজে সম্প্রসারণযোগ্যতা, অর্থাৎ সব কিছু ল্যাঙ্গুয়েজ কোরের (মূল ভাষা) মধ্যে না রাখা। সি বা সি++ ব্যবহার করে সহজেই নতুন বিল্ট-ইন মডিউল লেখা যায়। যেসব অ্যাপ্লিকেশনের জন্য প্রোগ্রামেবল ইন্টারফেস প্রয়োজন, সেখানে পাইথনকে এক্সটেনশন ল্যাঙ্গুয়েজ হিসেবেও ব্যবহার করা যায়। একটি ছোট কোর ল্যাঙ্গুয়েজ, বিশাল স্ট্যান্ডার্ড লাইব্রেরি এবং সহজে সম্প্রসারণযোগ্য ইন্টারপ্রেটার—এই নকশাটি ভ্যান রসাম শুরু থেকেই ঠিক করে রেখেছিলেন। কারণ তিনি এর আগের ভাষা ABC-এর সীমাবদ্ধতা নিয়ে হতাশ ছিলেন, যা এর ঠিক উল্টো পথে চলেছিল।[৪]যদিও পাইথনের নকশা ফাংশনাল প্রোগ্রামিং এবং লিস্প ঐতিহ্যের প্রতি কিছুটা প্রতিকূল (এখানে টেইল-কল এলিমিনেশন নেই এবং অ্যানোনিমাস ক্লোজার-এর ভালো সমর্থন নেই), তবুও পাইথনের দর্শনের সাথে স্কিম-এর মতো মিনিমালিস্ট লিস্প-পরিবারের ভাষার উল্লেখযোগ্য মিল রয়েছে। কোডিং পদ্ধতির ক্ষেত্রে স্বাধীনতা দিলেও, পাইথনের দর্শন পার্লের মতো অতিরিক্ত বা জাঁকালো সিনট্যাক্স বর্জন করে এবং একটি ছিমছাম, কম এলোমেলো সিনট্যাক্স পছন্দ করে। পার্লের মতো পাইথনের নির্মাতারাও একটি নির্দিষ্ট "সংস্কৃতি" বা মতাদর্শ প্রচার করেন, যা তারা ভাষাকে যেমন দেখতে চান তার ওপর ভিত্তি করে তৈরি। তারা এমন ভাষশৈলী পছন্দ করেন যা "সুন্দর", "সুস্পষ্ট" এবং "সহজ"। অ্যালেক্স মারতেলি তার পাইথন কুকবুক (২য় সংস্করণ, পৃষ্ঠা ২৩০)-এ বলেছেন: "পাইথন সংস্কৃতিতে কাউকে 'চালাক' বলাটা প্রশংসা হিসেবে ধরা হয় না।" পাইথনের দর্শন পার্লের "কাজটি করার একাধিক উপায় আছে" (there is more than one way to do it) দৃষ্টিভঙ্গিকে প্রত্যাখ্যান করে এবং সমস্যা সমাধানের জন্য একটি "সঠিক" বা নির্দিষ্ট উপায়ের পক্ষে কথা বলে।[৩৫]কিছু লো-লেভেল ভাষার বিপরীতে, পাইথনের নকশা রানটাইম গতির ওপর জোর দেয় না। যদিও পাইথনের ইমপ্লিমেন্টেশনগুলো অন্যান্য বাইটকোড ইন্টারপ্রেটেড ভাষার সমতুল্য, তবুও পাইথনের নকশায় কোডের স্বচ্ছতা বা স্পষ্টতা সর্বদা প্রাধান্য পায়। পাইথন কমিউনিটিতে মাঝেমধ্যে একটি স্লোগান শোনা যায়, "গতি ততক্ষণ পর্যন্ত কোনো সমস্যা নয়, যতক্ষণ না এটি সমস্যা সৃষ্টি করে"। এই অনুভূতি কেবল পাইথন প্রোগ্রামারদের একার নয়, তবে অন্যান্য ভাষা সম্প্রদায়ের তুলনায় তারা এতে বেশি জোর দিয়ে থাকেন।[_তথ্যসূত্র প্রয়োজন_]
পাইথন কমিউনিটিতে একটি সাধারণ নবশব্দ হলো পাইথনিক (pythonic), যা প্রোগ্রামের স্টাইল বা শৈলী সম্পর্কিত নানা অর্থ বহন করে। কোনো কোডকে 'পাইথনিক' বলার অর্থ হলো এটি পাইথনের ইডিয়ম বা বাগ্ধারাগুলো ভালোভাবে ব্যবহার করেছে; এটি স্বাভাবিক এবং ভাষায় সাবলীলতা প্রকাশ করে। একইভাবে, কোনো ইন্টারফেস বা ল্যাঙ্গুয়েজ ফিচারকে পাইথনিক বলার অর্থ হলো এটি পাইথনের ইডিয়মগুলোর সাথে ভালো কাজ করে এবং ভাষার বাকি অংশের সাথে ভালোভাবে মিশে যায়। বিপরীতভাবে, আনপাইথনিক (unpythonic) কোডের লক্ষণ হলো এটি "পাইথনে C++ (বা লিস্প, বা পার্ল) কোড লেখার" চেষ্টা করে—অর্থাৎ, এটি পাইথনের নিজস্ব ইডিয়ম ব্যবহার না করে অন্য ভাষার শৈলীকে জোর করে চাপিয়ে দেয়। পাইথনিসিটির ধারণাটি পাইথনের মিনিমালিস্ট বা স্বল্পবাদী রিডিবিলিটি (পাঠযোগ্যতা) দর্শনের সাথে ঘনিষ্ঠভাবে যুক্ত। দুর্বোধ্য কোড বা বোঝা যায় না এমন ইডিয়মগুলো আনপাইথনিক হিসেবে গণ্য হয়। পাইথনের ব্যবহারকারী এবং প্রশংসাকারীদের—বিশেষ করে যারা জ্ঞানী বা অভিজ্ঞ—প্রায়শই পাইথনিস্ট (Pythonists), পাইথনিস্তা (Pythonistas), এবং পাইথনীয়ার (Pythoneers) বলা হয়। কোনো কিছু পাইথনের সাথে সম্পর্কিত তা বোঝাতে Py- বা পাই- উপসর্গটি ব্যবহার করা হয়। পাইথন অ্যাপ্লিকেশন বা লাইব্রেরির নামে এই উপসর্গের ব্যবহারের উদাহরণগুলোর মধ্যে রয়েছে: Pygame, যা পাইথনের সাথে SDL-এর বাইন্ডিং (সাধারণত গেম তৈরিতে ব্যবহৃত হয়); PyUI, একটি GUI যা সম্পূর্ণ পাইথনে লেখা; PyQt, পাইথনের জন্য Qt বাইন্ডিং; PyGTK, GTK টুলকিট বাইন্ডিং; এবং PySol, পাইথনে প্রোগ্রাম করা সলিটায়ার কার্ড গেমের সিরিজ; অথবা pyMPI, যা MPI বাইন্ডিং সহ CPython-এর একটি প্যারালাল বা সমান্তরাল ডিস্ট্রিবিউটেড সংস্করণ। পাইথন ডেভেলপারদের একটি গুরুত্বপূর্ণ লক্ষ্য হলো পাইথনের ব্যবহারকে আনন্দদায়ক করা। এর প্রতিফলন দেখা যায় এর নামকরণে (টেলিভিশন সিরিজ _মন্টি পাইথনস ফ্লাইং সার্কাস_-এর নামানুসারে), উদাহরণ কোডে মন্টি পাইথনের রেফারেন্স ব্যবহারের সাধারণ চর্চায়, এবং টিউটোরিয়াল ও রেফারেন্স ম্যাটেরিয়ালগুলোতে মাঝেমধ্যে কৌতুকপূর্ণ ভঙ্গি ব্যবহারে।[৩৬] উদাহরণস্বরূপ, পাইথন সাহিত্যে প্রায়শই ব্যবহৃত মেটাসিনট্যাকটিক ভেরিয়েবলগুলো হলো স্প্যাম এবং এগস, যা প্রথাগত foo এবং bar-এর পরিবর্তে ব্যবহৃত হয়।
পাইথনের নকশা এবং দর্শন বেশ কয়েকটি প্রোগ্রামিং ভাষাকে প্রভাবিত করেছে:
- বু (Boo)-এর ওপর পাইথনের উত্তরাধিকার আরও স্পষ্ট — এটিও ইনডেন্টেশন, একই ধরনের সিনট্যাক্স এবং অবজেক্ট মডেল ব্যবহার করে। তবে, বু স্ট্যাটিক টাইপিং ব্যবহার করে এবং এটি .NET framework-এর সাথে ঘনিষ্ঠভাবে যুক্ত।[৩৭]
- ECMAScript, যার একটি এক্সটেনশন হলো জাভাস্ক্রিপ্ট, পাইথনের ইমপ্লিমেন্টেশন থেকে ইটারেটর, জেনারেটর এবং লিস্ট কমপ্রিহেনশন ধার করছে।[৩৮]
- রুবি পাইথনের দ্বারা প্রভাবিত। বিশেষত, ম্যাটস এমন একটি ভাষা চেয়েছিলেন যা পাইথনের চেয়ে ক্লাসিক্যাল মেসেজ পাসিং অবজেক্ট-ওরিয়েন্টেড মডেলের কাছাকাছি হবে।[৩৯]
- গ্রুভি তৈরি হয়েছিল জাভাতে পাইথনের ডিজাইনের দর্শন নিয়ে আসার আকাঙ্ক্ষা থেকে।[৪০]
অন্যান্য ভাষাগুলো পাইথনের উন্নয়ন চর্চা বা ডেভেলপমেন্ট প্র্যাকটিসও অনুকরণ করেছে। যেমন, ভাষার কোনো পরিবর্তনের যৌক্তিকতা এবং সমস্যাগুলো বর্ণনা করে একটি নথিপত্র (যেমন PEP) তৈরি করার পদ্ধতিটি পাইথনের প্রভাবে সরাসরি Tcl-এ ব্যবহৃত হচ্ছে।[৪১]এছাড়া এক্সটেনশন ব্য়বহার করে অন্য়ান্য় প্য়ারাডাইম সমর্থন করা সম্ভব: যেমন: পাইডিবিসি, এবং পাইকন্ট্রাক্ট ব্য়বহার করে কন্ট্রাক্ট প্রোগ্রামিং সম্পাদনা করা।
পাইথনকে একটি সহজে পাঠযোগ্য ভাষা হিসেবে ডিজাইন করা হয়েছে। এর ফরম্যাটিং বেশ পরিচ্ছন্ন এবং অনেক ক্ষেত্রে যেখানে অন্যান্য প্রোগ্রামিং ভাষায় যতিচিহ্ন ব্যবহৃত হয়, সেখানে পাইথনে ইংরেজি কিওয়ার্ড ব্যবহার করা হয়েছে। অন্যান্য অনেক ভাষার মতো এটি ব্লক আলাদা করার জন্য কোঁকড়ানো বন্ধনী (curly brackets) ব্যবহার করে না এবং স্টেটমেন্টের শেষে সেমিকোলন ব্যবহার করার অনুমতি থাকলেও তা খুব কমই ব্যবহৃত হয়। সি বা প্যাসকেলের তুলনায় এতে সিনট্যাকটিক ব্যতিক্রম এবং বিশেষ ক্ষেত্র অনেক কম।
পাইথন কোড ব্লক আলাদা করার জন্য কার্লি ব্র্যাকেট বা কিওয়ার্ডের পরিবর্তে হোয়াইটস্পেস ইন্ডেন্টেশন ব্যবহার করে। একটি নির্দিষ্ট স্টেটমেন্টের পর ইন্ডেন্টেশন বৃদ্ধি পায় (যেমন কোলনের পরে); আবার ইন্ডেন্টেশন হ্রাস পাওয়া মানে বর্তমান কোড ব্লকের সমাপ্তি।
এই পদ্ধতির ফলে প্রোগ্রামের ভিজ্যুয়াল কাঠামো এবং এর সেমান্টিক (কার্যকরী) কাঠামো হুবহু এক হয়। এই বৈশিষ্ট্যটিকে অনেক সময় অফ-সাইড রুল বলা হয়। পাইথনে আদর্শ ইন্ডেন্টেশন সাইজ হলো **চারটি স্পেস**।
পাইথনের স্টেটমেন্টগুলোর মধ্যে নিচের বিষয়গুলো অন্তর্ভুক্ত:
- অ্যাসাইনমেন্ট স্টেটমেন্ট, যেখানে একটি একক সমান চিহ্ন
=ব্যবহার করা হয়। [if](//bn.wikipedia.org/wiki/If-then-else?action=edit&redlink=1 "If-then-else (পাতার অস্তিত্ব নেই)")স্টেটমেন্ট, যা শর্তসাপেক্ষে একটি কোড ব্লক কার্যকর করে। এর সাথে[else](//bn.wikipedia.org/wiki/Conditional%5F%28computer%5Fprogramming%29?action=edit&redlink=1#If–then%28–else%29 "Conditional (computer programming) (পাতার অস্তিত্ব নেই)")এবংelif([else if](//bn.wikipedia.org/wiki/Conditional%5F%28computer%5Fprogramming%29?action=edit&redlink=1#Else%5Fif "Conditional (computer programming) (পাতার অস্তিত্ব নেই)")-এর সংক্ষিপ্ত রূপ) ব্যবহৃত হয়।[for](//bn.wikipedia.org/wiki/Foreach?action=edit&redlink=1#Python "Foreach (পাতার অস্তিত্ব নেই)")স্টেটমেন্ট, যা একটি 'ইটারেবল' (iterable) অবজেক্টের ওপর পুনরাবৃত্তি করে এবং প্রতিটি উপাদানকে একটি ভ্যারিয়েবলে ক্যাপচার করে সংশ্লিষ্ট ব্লকে ব্যবহারের সুযোগ দেয়; লুপ শেষ হওয়ার পর ভ্যারিয়েবলটি মুছে যায় না।[while](//bn.wikipedia.org/wiki/While%5Floop?action=edit&redlink=1#Python "While loop (পাতার অস্তিত্ব নেই)")স্টেটমেন্ট, যা যতক্ষণ পর্যন্ত একটি বুলিয়ান শর্ত সত্য থাকে ততক্ষণ একটি কোড ব্লক কার্যকর করে।[try](//bn.wikipedia.org/wiki/Exception%5Fhandling%5Fsyntax?action=edit&redlink=1#Python "Exception handling syntax (পাতার অস্তিত্ব নেই)")স্টেটমেন্ট, যা এর সাথে সংযুক্ত কোড ব্লকে উদ্ভূত এক্সেপশনগুলোকে (exceptions)exceptক্লজের মাধ্যমে ধরতে এবং হ্যান্ডেল করতে সাহায্য করে (অথবা পাইথন ৩.১১ থেকে এক্সেপশন গ্রুপের জন্য নতুন সিনট্যাক্সexcept*ব্যবহৃত হয়);tryস্টেটমেন্টটি এটিও নিশ্চিত করে যেfinallyব্লকের ক্লিন-আপ কোড সবসময় কার্যকর হবে, ব্লকটি যেভাবেই শেষ হোক না কেন।raiseস্টেটমেন্ট, যা একটি নির্দিষ্ট এক্সেপশন তৈরি করতে বা ধরা পড়া কোনো এক্সেপশনকে পুনরায় উত্থাপন করতে ব্যবহৃত হয়।classস্টেটমেন্ট, যা একটি কোড ব্লক কার্যকর করে এবং অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে ব্যবহারের জন্য এর লোকাল নেমস্পেসকে একটি ক্লাসের সাথে যুক্ত করে।defস্টেটমেন্ট, যা একটি ফাংশন বা মেথড সংজ্ঞায়িত করে।[with](//bn.wikipedia.org/wiki/Dispose%5Fpattern?action=edit&redlink=1#Language%5Fconstructs "Dispose pattern (পাতার অস্তিত্ব নেই)")স্টেটমেন্ট, যা একটি কোড ব্লককে একটি কনটেক্সট ম্যানেজারের আওতাভুক্ত করে। এটি RAII-এর মতো আচরণ নিশ্চিত করে এবং সাধারণ try/finally পদ্ধতির বিকল্প হিসেবে কাজ করে। কনটেক্সটের উদাহরণ হিসেবে কোড চালানোর আগে লক করা এবং পরে তা মুক্ত করা, অথবা একটি ফাইল খোলা এবং বন্ধ করা উল্লেখযোগ্য।[break](//bn.wikipedia.org/wiki/Break%5Fstatement?action=edit&redlink=1 "Break statement (পাতার অস্তিত্ব নেই)")স্টেটমেন্ট, যা একটি লুপ থেকে বের হয়ে যায়।continueস্টেটমেন্ট, যা বর্তমান ইটারেশনের বাকি অংশ এড়িয়ে গিয়ে পরবর্তী ইটারেশনে চলে যায়।delস্টেটমেন্ট, যা একটি ভ্যারিয়েবল সরিয়ে ফেলে—অর্থাৎ নাম থেকে মানের রেফারেন্সটি মুছে দেয়। যদি ভ্যারিয়েবলটি পুনরায় সংজ্ঞায়িত করার আগে রেফার করা হয়, তবে এটি ত্রুটি (error) প্রদর্শন করে।passস্টেটমেন্ট, যা একটি NOP (অর্থাৎ কোনো অপারেশন নয়) হিসেবে কাজ করে; সিনট্যাক্টিক্যালি একটি খালি কোড ব্লক তৈরির প্রয়োজনে এটি ব্যবহৃত হয়।[assert](//bn.wikipedia.org/wiki/Assertion%5F%28programming%29?action=edit&redlink=1 "Assertion (programming) (পাতার অস্তিত্ব নেই)")স্টেটমেন্ট, যা ডিবাগিংয়ের সময় এমন শর্তগুলো পরীক্ষা করতে ব্যবহৃত হয় যা অবশ্যই সত্য হওয়ার কথা।yieldস্টেটমেন্ট, যা একটি জেনারেটর ফাংশন থেকে মান রিটার্ন করে (এটি একটি অপারেটরও বটে); এটি কোরুটিন বাস্তবায়নে ব্যবহৃত হয়।returnস্টেটমেন্ট, যা একটি ফাংশন থেকে মান প্রদান করে।[import](//bn.wikipedia.org/wiki/Include%5Fdirective?action=edit&redlink=1 "Include directive (পাতার অস্তিত্ব নেই)")এবংfromস্টেটমেন্ট, যা মডিউল ইমপোর্ট করতে ব্যবহৃত হয় যার ফাংশন বা ভ্যারিয়েবল বর্তমান প্রোগ্রামে ব্যবহার করা যায়।matchএবংcaseস্টেটমেন্ট, যা একটি switch statement কাঠামোর মতো কাজ করে এবং একটি এক্সপ্রেশনকে এক বা একাধিক কেসের সাথে তুলনা করে কন্ট্রোল-ফ্লো নিয়ন্ত্রণ করে।
অ্যাসাইনমেন্ট স্টেটমেন্ট (=) একটি নামকে একটি আলাদা, ডায়নামিকভাবে বরাদ্দকৃত অবজেক্টের রেফারেন্স হিসেবে আবদ্ধ করে। ভ্যারিয়েবলগুলো যেকোনো সময় যেকোনো অবজেক্টের সাথে পুনরায় আবদ্ধ (rebound) হতে পারে। পাইথনে, একটি ভ্যারিয়েবল নাম হলো একটি সাধারণ রেফারেন্স হোল্ডার যার কোনো নির্দিষ্ট ডেটা টাইপ নেই; তবে এটি সবসময় টাইপসহ 'কোনো না কোনো' অবজেক্টকে রেফার করে। একে ডায়নামিক টাইপিং বলা হয়—যা statically-typed ল্যাঙ্গুয়েজের বিপরীত, যেখানে প্রতিটি ভ্যারিয়েবল কেবল নির্দিষ্ট টাইপের মান ধারণ করতে পারে।
পাইথন tail call অপ্টিমাইজেশন বা first-class continuations সমর্থন করে না; ভ্যান রোসামের মতে, ভাষাটি এটি কখনোই করবে না। তবে পাইথনের জেনারেটর সম্প্রসারণের মাধ্যমে কোরুটিন-এর মতো কার্যকারিতার উন্নত সমর্থন দেওয়া হয়েছে। ২.৫ সংস্করণের আগে জেনারেটরগুলো ছিল 'লেজি ইটারেটর'; ডেটা কেবল জেনারেটরের বাইরে পাঠানো যেত। পাইথন ২.৫ থেকে জেনারেটর ফাংশনে ডেটা ফেরত পাঠানো সম্ভব হয়েছে এবং ৩.৩ সংস্করণ থেকে ডেটা একাধিক স্ট্যাক লেভেলের মধ্য দিয়ে পাঠানো যায়।
পাইথনের এক্সপ্রেশনগুলোর মধ্যে নিচের বিষয়গুলো অন্তর্ভুক্ত:
- গাণিতিক যোগ, বিয়োগ এবং গুণের জন্য
+,-, এবং*অপারেটরগুলো অন্যান্য ভাষার মতোই কাজ করে, তবে ভাগের (division) আচরণ কিছুটা ভিন্ন। পাইথনে দুই ধরনের ভাগ রয়েছে: ফ্লোর ডিভিশন (বা পূর্ণসংখ্যা ভাগ)//এবং ফ্লোটিং-পয়েন্ট ডিভিশন/। পাইথনে ঘাত বা পাওয়ারের জন্য**অপারেটর ব্যবহৃত হয়। - পাইথন স্ট্রিং সংযোগ বা কনক্যাটেনেশনের (concatenation) জন্য
+অপারেটর ব্যবহার করে। একটি স্ট্রিংকে নির্দিষ্ট সংখ্যক বার পুনরাবৃত্তি করার জন্য*অপারেটর ব্যবহৃত হয়। @ইনফিক্স অপারেটরটি NumPy-এর মতো লাইব্রেরিগুলোতে ম্যাট্রিক্স গুণনের জন্য ব্যবহারের উদ্দেশ্যে তৈরি করা হয়েছে।:=সিনট্যাক্সটি "ওয়ালরাস অপারেটর" (walrus operator) নামে পরিচিত, যা পাইথন ৩.৮ সংস্করণে প্রবর্তিত হয়। এই অপারেটরটি একটি বড় এক্সপ্রেশনের অংশ হিসেবে ভ্যারিয়েবলে মান নির্ধারণ (assign) করতে সাহায্য করে।- পাইথনে
==দ্বারা দুটি অবজেক্টের মান (value) তুলনা করা হয়। অবজেক্টের পরিচয় বা আইডেন্টিটি (অর্থাৎ রেফারেন্সের তুলনা) যাচাই করতেisঅপারেটর ব্যবহৃত হয়। এছাড়া পাইথনে তুলনাগুলো চেইন বা ধারাবাহিকভাবে করা সম্ভব—যেমন:a <= b <= c। - বুলিয়ান অপারেটর হিসেবে পাইথন
and,or, এবংnotব্যবহার করে। - পাইথনে এক ধরনের বিশেষ এক্সপ্রেশন রয়েছে যাকে লিস্ট কমপ্রিহেনশন (list comprehension) বলা হয়। এছাড়া আরও সাধারণ একটি এক্সপ্রেশন হলো 'জেনারেটর এক্সপ্রেশন' (generator expression)।
- বেনামী ফাংশনগুলো ল্যাম্বডা (lambda) এক্সপ্রেশন ব্যবহার করে বাস্তবায়ন করা হয়; তবে ল্যাম্বডার বডিতে কেবল একটি মাত্র এক্সপ্রেশন থাকতে পারে।
- কন্ডিশনাল বা শর্তসাপেক্ষ এক্সপ্রেশনগুলো
x if c else yআকারে লেখা হয়। (এটি অন্যান্য অনেক ভাষায় প্রচলিত[c ? x : y](//bn.wikipedia.org/wiki/%3F:?action=edit&redlink=1 "?: (পাতার অস্তিত্ব নেই)")অপারেটরের চেয়ে আলাদা)। - পাইথন লিস্ট এবং টাপল-এর মধ্যে পার্থক্য বজায় রাখে। লিস্ট
[1, 2, 3]আকারে লেখা হয় যা মিউটেবল (পরিবর্তনযোগ্য) এবং এগুলো ডিকশনারির 'কী' (key) হিসেবে ব্যবহার করা যায় না। টাপল(1, 2, 3)আকারে লেখা হয় যা ইমিউটেবল (অপরিবর্তনীয়) এবং এগুলো ডিকশনারির কী হিসেবে ব্যবহার করা সম্ভব (যদি টাপলের প্রতিটি উপাদান ইমিউটেবল হয়)। দুটি টাপলকে+অপারেটর দিয়ে যুক্ত করে একটি নতুন টাপল তৈরি করা যায়। স্পষ্ট প্রেক্ষাপটে টাপলের ক্ষেত্রে প্রথম ও শেষ বন্ধনী ঐচ্ছিক। - পাইথনে 'সিকোয়েন্স আনপ্যাকিং' (sequence unpacking) বৈশিষ্ট্য রয়েছে যেখানে একটি ইটারেবল অবজেক্টের (যেমন লিস্ট বা টাপল) মানগুলো একসাথে একাধিক ভ্যারিয়েবলে অ্যাসাইন করা যায়।
- পাইথনে স্ট্রিং ফরম্যাটিংয়ের জন্য
%অপারেটর (যা সি ভাষারprintf-এর মতো কাজ করে),format()মেথড এবং পাইথন ৩.৬ থেকে "f-strings" (যেমন:f'spam={spam}') ব্যবহৃত হয়। - পাইথনে স্ট্রিং লিটারেল বিভিন্নভাবে লেখা যায়:
- একক (
') বা দ্বৈত (") উদ্ধৃতি চিহ্নের মাধ্যমে। - ট্রিপল-কোট ( বা
"""), যা একাধিক লাইন জুড়ে বিস্তৃত হতে পারে। - র-স্ট্রিং (raw strings), যা
rপ্রিফিক্স দিয়ে শুরু হয় এবং এতে ব্যাকস্ল্যাশ (\) স্পেশাল ক্যারেক্টার হিসেবে কাজ করে না। এটি রেগুলার এক্সপ্রেশনের জন্য উপযোগী।
- একক (
- পাইথনে লিস্টের জন্য অ্যারে ইনডেক্স এবং স্লাইসিং (slicing) এক্সপ্রেশন রয়েছে, যা
a[key],a[start:stop]বাa[start:stop:step]আকারে লেখা হয়। ইনডেক্স শুরু হয় শূন্য (০) থেকে এবং নেতিবাচক (negative) ইনডেক্স শেষ থেকে গণনা করা হয়।
পাইথনে এক্সপ্রেশন এবং স্টেটমেন্টের মধ্যে পার্থক্য কঠোরভাবে বজায় রাখা হয়। একটি স্টেটমেন্ট কখনোই এক্সপ্রেশনের অংশ হতে পারে না। এই কারণে লিস্ট কমপ্রিহেনশন বা ল্যাম্বডা এক্সপ্রেশনের ভেতরে কোনো স্টেটমেন্ট (যেমন অ্যাসাইনমেন্ট a = 1) ব্যবহার করা যায় না।
পাইথন ৩-এর স্ট্যান্ডার্ড টাইপ হায়ারার্কি
পাইথন ডাক টাইপিং ব্যবহার করে এবং এতে অবজেক্টের টাইপ থাকলেও ভ্যারিয়েবল নামের কোনো নির্দিষ্ট টাইপ নেই। টাইপের সীমাবদ্ধতাগুলো ভ্যারিয়েবল সংজ্ঞায়িত করার সময় পরীক্ষা করা হয় না; বরং কোনো অবজেক্ট ব্যবহারের সময় অপারেশনগুলো ব্যর্থ হতে পারে, যা নির্দেশ করে যে অবজেক্টটি সঠিক টাইপের নয়। ডায়নামিক টাইপিং হওয়া সত্ত্বেও পাইথন একটি স্ট্রংলি টাইপড ভাষা। এটি অস্পষ্ট বা ভুলভাবে সংজ্ঞায়িত অপারেশন (যেমন একটি সংখ্যা এবং একটি স্ট্রিং যোগ করা) নিষিদ্ধ করে, তা নিজে থেকে সমাধান করার চেষ্টা না করে।
পাইথন প্রোগ্রামারদের ক্লাস ব্যবহার করে নিজস্ব টাইপ সংজ্ঞায়িত করার অনুমতি দেয়, যা সাধারণত অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে ব্যবহৃত হয়। ক্লাসের নতুন ইন্সট্যান্সগুলো ক্লাসটিকে কল করার মাধ্যমে তৈরি করা হয় (যেমন: SpamClass())। পাইথনে ক্লাসগুলো নিজেই type নামক মেটাক্লাসের ইন্সট্যান্স, যা মেটাপ্রোগ্রামিং এবং রিফ্লেকশন (reflection) সমর্থন করে।
পাইথন ৩.০ সংস্করণের আগে দুই ধরনের ক্লাস ছিল: ওল্ড-স্টাইল এবং নিউ-স্টাইল। বর্তমান পাইথন সংস্করণগুলোতে কেবল নিউ-স্টাইল ক্লাসের সেমান্টিকস সমর্থিত।
পাইথন ঐচ্ছিক টাইপ অ্যানোটেশন সমর্থন করে। এই অ্যানোটেশনগুলো ভাষা দ্বারা বাধ্যতামূলক নয়, তবে **mypy**-এর মতো এক্সটার্নাল টুল ব্যবহার করে কোডের ত্রুটি ধরার জন্য ব্যবহৃত হতে পারে।
পাইথন ৩-এর বিল্ট-ইন টাইপ সমূহের সারাংশ
[সম্পাদনা]
পাইথনের প্রধান ডেটা টাইপসমূহ
| টাইপ | মিউটেবিলিটি | বিবরণ | সিনট্যাক্স উদাহরণ |
|---|---|---|---|
| bool | ইমিউটেবল | বুলিয়ান মান | True, False |
| int | ইমিউটেবল | অসীম দৈর্ঘ্যের পূর্ণসংখ্যা | 42 |
| float | ইমিউটেবল | ফ্লোটিং-পয়েন্ট সংখ্যা (ডাবল প্রিসিশন) | 1.33333 |
| complex | ইমিউটেবল | জটিল সংখ্যা (বাস্তব ও কাল্পনিক অংশসহ) | 3+2.7j |
| str | ইমিউটেবল | ইউনিকোড ক্যারেক্টার স্ট্রিং | 'Wikipedia', "বাংলা" |
| list | মিউটেবল | বিভিন্ন টাইপের উপাদানের লিস্ট | [4.0, 'string', True] |
| tuple | ইমিউটেবল | বিভিন্ন টাইপের উপাদানের টাপল | (4.0, 'string', True) |
| dict | মিউটেবল | কী এবং ভ্যালুর জোড়া (অ্যাসোসিয়েটিভ অ্যারে) | {'key': 'value', 3: False} |
| set | মিউটেবল | অনন্য উপাদানের আনঅর্ডারড সেট | {4.0, 'string'} |
| bytes | ইমিউটেবল | বাইট সিকোয়েন্স | b'Some ASCII' |
| types.NoneType | ইমিউটেবল | মান নেই এমন অবজেক্ট (Null) | None |
গাণিতিক অপারেশন (Arithmetic operations)
[সম্পাদনা]
পাইথনে প্রচলিত গাণিতিক অপারেটর চিহ্নগুলো (+, -, *, /) অন্তর্ভুক্ত রয়েছে। এছাড়া এতে ফ্লোর-ডিভিশন (floor-division) অপারেটর // এবং মডুলা অপারেটর % রয়েছে। (মডুলা অপারেটরের ক্ষেত্রে ভাগশেষ ঋণাত্মক হতে পারে, যেমন: 4 % -3 == -2)। এছাড়া পাইথনে ঘাত বা পাওয়ার বোঝাতে ** চিহ্ন ব্যবহৃত হয় (যেমন: 5**3 == 125)। ম্যাট্রিক্স গুণনের জন্য এতে @ অপারেটরও রয়েছে। এই অপারেটরগুলো প্রচলিত গণিতের নিয়ম ও অগ্রাধিকার (precedence) অনুযায়ী কাজ করে। ইনফিক্স অপারেটর + এবং - ধনাত্মক ও ঋণাত্মক সংখ্যা বোঝাতে ইউনিারি (unary) অপারেটর হিসেবেও ব্যবহৃত হতে পারে।
পূর্ণসংখ্যার মধ্যে ভাগের ফলে ফ্লোটিং-পয়েন্ট ফলাফল পাওয়া যায়। পাইথনে ভাগের আচরণ সময়ের সাথে উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে:
- পাইথনের বর্তমান সংস্করণে (৩.০ থেকে)
/অপারেটর সবসময় ফ্লোটিং-পয়েন্ট ফলাফল প্রদান করে, যেমন:5/2 == 2.5। - ফ্লোর ডিভিশন
//অপারেটর প্রবর্তিত হয়েছে যা নিচের মতো ফলাফল দেয়:7//3 == 2,-7//3 == -3,7.5//3 == 2.0, এবং-7.5//3 == -3.0।
পাইথনের পরিভাষায়, / অপারেটর হলো 'ট্রু ডিভিশন' (true division), আর // অপারেটর হলো 'ফ্লোর ডিভিশন'।
পাইথনে ঋণাত্মক অসীমের (negative infinity) দিকে রাউন্ডিং করার পদ্ধতিটি অন্যান্য ভাষার চেয়ে আলাদা হলেও এটি ভাষায় সামঞ্জস্য বজায় রাখে। যেমন, এই রাউন্ডিং নিশ্চিত করে যে (a + b)//b == a//b + 1 সমীকরণটি সবসময় সত্য হবে। এছাড়া এটি নিশ্চিত করে যে b*(a//b) + a%b == a সমীকরণটি a-এর ধনাত্মক ও ঋণাত্মক উভয় মানের জন্যই বৈধ। প্রত্যাশিতভাবে, a%b-এর ফলাফল [0, b) সীমার মধ্যে থাকে যেখানে b একটি ধনাত্মক পূর্ণসংখ্যা।
পাইথনে ফ্লোট সংখ্যাকে নিকটতম পূর্ণসংখ্যায় রূপান্তর করতে round ফাংশন ব্যবহৃত হয়। টাই-ব্রেকিং (tie-breaking)-এর ক্ষেত্রে পাইথন ৩ 'রাউন্ড টু ইভেন' (round to even) পদ্ধতি ব্যবহার করে: round(1.5) এবং round(2.5) উভয় ক্ষেত্রেই ফলাফল 2 পাওয়া যায়। পাইথন ৩-এর আগের সংস্করণগুলোতে 'রাউন্ড-অ্যাওয়ে-ফ্রম-জিরো' (round-away-from-zero) পদ্ধতি ব্যবহৃত হতো।
পাইথনে গাণিতিক ব্যবহারের মতো একাধিক রিলেশন বা তুলনা একসাথে করা যায়। যেমন, a < b < c এক্সপ্রেশনটি পরীক্ষা করে যে a কি b-এর চেয়ে ছোট এবং b কি c-এর চেয়ে ছোট কি না। সি-ভিত্তিক ভাষাগুলো একে ভিন্নভাবে ব্যাখ্যা করে।
পাইথন সমস্ত পূর্ণসংখ্যা অপারেশনের জন্য 'আর্বিট্রারি-প্রিসিশন অ্যারিথমেটিক' (arbitrary-precision arithmetic) বা সীমাহীন দৈর্ঘ্যের সংখ্যা ব্যবহার করে। decimal মডিউলের Decimal টাইপ এবং fractions মডিউলের Fraction ক্লাস যথাক্রমে দশমিক ভগ্নাংশ এবং মূলদ সংখ্যার জন্য সুনির্দিষ্ট প্রিসিশন প্রদান করে।
পাইথনের বিশাল গাণিতিক লাইব্রেরি এবং থার্ড-পার্টি লাইব্রেরি NumPy-এর কারণে ভাষাটি বর্তমানে বৈজ্ঞানিক কম্পিউটিং ও ডেটা প্রসেসিংয়ের কাজে ব্যাপকভাবে ব্যবহৃত হয়।
ফাংশন সিনট্যাক্স (Function syntax)
[সম্পাদনা]
পাইথনে def কিওয়ার্ড ব্যবহার করে ফাংশন তৈরি করা হয়। একটি ফাংশন যেভাবে কল (call) করা হয়, ঠিক সেভাবেই এটি সংজ্ঞায়িত (define) করা হয়; প্রথমে ফাংশনের নাম এবং তারপরে প্রয়োজনীয় প্যারামিটারগুলো প্রদান করতে হয়।
নিচে একটি ফাংশনের উদাহরণ দেওয়া হলো যা এর ইনপুটগুলো প্রিন্ট করে:
def printer(input1, input2 = "already there"): print(input1) print(input2)
printer("hello")
আউটপুট উদাহরণ:
hello
already there
রান টাইমে যদি কোনো প্যারামিটারের মান প্রদান করা না হয়, তবে সেই প্যারামিটারে একটি ডিফল্ট মান (default value) নির্ধারণ করার জন্য ফাংশন হেডারের ভেতরে ভ্যারিয়েবল-ডেফিনেশন সিনট্যাক্স ব্যবহার করা যেতে পারে।
[ "হ্যালো, ওয়ার্ল্ড!" প্রোগ্রাম](//bn.wikipedia.org/wiki/"হ্যালো,%5Fওয়ার্ল্ড!"%5Fপ্রোগ্রাম ""হ্যালো, ওয়ার্ল্ড!" প্রোগ্রাম"):
একটি অ-ঋণাত্মক পূর্ণসংখ্যার ফ্যাক্টোরিয়াল গণনা করার প্রোগ্রাম:
text = input('একটি সংখ্যা লিখুন, এবং এর ফ্যাক্টোরিয়াল প্রিন্ট করা হবে: ') n = int(text)
if n < 0: raise ValueError('আপনাকে অবশ্যই একটি অ-ঋণাত্মক পূর্ণসংখ্যা লিখতে হবে')
factorial = 1 for i in range(2, n + 1): factorial *= i
print(factorial)
পাইথনের বিশাল স্ট্যান্ডার্ড লাইব্রেরি প্রায়শই এর অন্যতম প্রধান শক্তি হিসেবে উল্লেখ করা হয়। ইন্টারনেট-ভিত্তিক অ্যাপ্লিকেশনের জন্য এতে মাইম এবং এইচটিটিপি-র মতো অনেক স্ট্যান্ডার্ড ফরম্যাট এবং প্রোটোকল সমর্থিত। এছাড়া এতে গ্রাফিক্যাল ইউজার ইন্টারফেস তৈরি, রিলেশনাল ডেটাবেসে সংযোগ, সিউডোর্যান্ডম নম্বর তৈরি, আর্বিট্রারি-প্রিসিশন ডেসিমেল গাণিতিক অপারেশন, রেগুলার এক্সপ্রেশন পরিচালনা এবং ইউনিট টেস্টিং-এর জন্য বিভিন্ন মডিউল অন্তর্ভুক্ত রয়েছে।
স্ট্যান্ডার্ড লাইব্রেরির কিছু অংশ নির্দিষ্ট স্পেসিফিকেশন দ্বারা পরিচালিত—উদাহরণস্বরূপ, Web Server Gateway Interface (WSGI) এর ইমপ্লিমেন্টেশন wsgiref মূলত PEP 333 অনুসরণ করে—তবে বেশিরভাগ অংশই তাদের কোড, অভ্যন্তরীণ ডকুমেন্টেশন এবং টেস্ট স্যুট দ্বারা নির্দিষ্ট করা হয়েছে। যেহেতু স্ট্যান্ডার্ড লাইব্রেরির বেশিরভাগ অংশই ক্রস-প্ল্যাটফর্ম পাইথন কোড, তাই ভিন্ন ভিন্ন ইমপ্লিমেন্টেশনের ক্ষেত্রে কেবল অল্প কিছু মডিউল পরিবর্তন বা পুনর্লিখন করতে হয়।
১৩ মার্চ ২০২৫ (2025-03-13)-এর হিসাব অনুযায়ী[হালনাগাদ] থার্ড-পার্টি পাইথন সফটওয়্যারের অফিসিয়াল রিপোজিটরি Python Package Index (PyPI)-তে ৬,১৪,৩৩৯-এরও বেশি প্যাকেজ রয়েছে।
CPython-সহ বেশিরভাগ পাইথন ইমপ্লিমেন্টেশনে একটি রিড–ইভাল–প্রিন্ট লুপ (REPL) অন্তর্ভুক্ত থাকে; এটি এনভায়রনমেন্টকে একটি কমান্ড লাইন ইন্টারপ্রেটার হিসেবে কাজ করার সুযোগ দেয়, যার মাধ্যমে ব্যবহারকারীরা ধারাবাহিকভাবে স্টেটমেন্ট প্রবেশ করাতে পারেন এবং তাৎক্ষণিকভাবে ফলাফল পান।
এছাড়াও, CPython-এর সাথে IDLE নামক একটি ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট (IDE) যুক্ত থাকে, যা মূলত নতুনদের শেখার উদ্দেশ্যে তৈরি করা হয়েছে।
অন্যান্য শেল, যেমন IDLE এবং IPython, উন্নত অটো-কমপ্লিশন, সেশন-স্টেট ধরে রাখা এবং সিনট্যাক্স হাইলাইটিং-এর মতো অতিরিক্ত সক্ষমতা যোগ করে।
জনপ্রিয় ডেস্কটপ আইডিই-গুলোর (IDE) মধ্যে রয়েছে PyCharm, Spyder এবং Visual Studio Code।
এছাড়াও কিছু ওয়েব ব্রাউজার-ভিত্তিক আইডিই রয়েছে, যেমন:
- জপিটার নোটবুক (Jupyter Notebooks), একটি ওপেন-সোর্স ইন্টারঅ্যাক্টিভ কম্পিউটিং প্ল্যাটফর্ম;
- PythonAnywhere, একটি ব্রাউজার-ভিত্তিক আইডিই এবং হোস্টিং এনভায়রনমেন্ট; এবং
- Canopy, Enthought-এর একটি বাণিজ্যিক আইডিই যা মূলত সায়েন্টিফিক কম্পিউটিং-এর ওপর গুরুত্ব দেয়।
সিপাইথন হলো পাইথনের রেফারেন্স ইমপ্লিমেন্টেশন। এই ইমপ্লিমেন্টেশনটি সি ভাষায় লেখা, যা পাইথন ৩.১১ সংস্করণ থেকে C11 স্ট্যান্ডার্ড অনুসরণ করে।[৪২] এর আগের সংস্করণগুলো C89 স্ট্যান্ডার্ডের সাথে কিছু নির্দিষ্ট সি৯৯ ফিচার ব্যবহার করত, তবে থার্ড-পার্টি এক্সটেনশনগুলো শুধুমাত্র পুরোনো সি সংস্করণের মধ্যে সীমাবদ্ধ নয়—উদাহরণস্বরূপ, এগুলো সি১১ বা সি++ ব্যবহার করেও তৈরি করা যেতে পারে।[৪৩][৪৪]
সিপাইথন পাইথন প্রোগ্রামকে একটি ইন্টারমিডিয়েট বাইটকোড-এ কম্পাইল করে,[৪৫] যা পরবর্তীতে একটি ভার্চুয়াল মেশিন দ্বারা চালিত হয়।[৪৬] CPython-এর সাথে একটি বিশাল স্ট্যান্ডার্ড লাইব্রেরি থাকে যা সি এবং নেটিভ পাইথনের সমন্বয়ে লেখা।
সিপাইথন উইন্ডোজ এবং অধিকাংশ আধুনিক ইউনিক্স-সদৃশ সিস্টেমে উপলব্ধ, যার মধ্যে ম্যাকওএস (অ্যাপল এম১ ম্যাক-সহ, পাইথন ৩.৯.১ থেকে একটি পরীক্ষামূলক ইনস্টলারের মাধ্যমে) অন্তর্ভুক্ত। পাইথন ৩.৯ থেকে শুরু করে, পাইথন ইনস্টলারটি উদ্দেশ্যমূলকভাবে উইন্ডোজ ৭ এবং ৮-এ ইনস্টল হতে ব্যর্থ হয়;[৪৭][৪৮] উইন্ডোজ এক্সপি পাইথন ৩.৫ পর্যন্ত সমর্থিত ছিল এবং ওপেনভিএমএস-এর জন্য অনানুষ্ঠানিক সমর্থন ছিল।[৪৯] প্ল্যাটফর্ম পোর্টেবিলিটি পাইথনের শুরুর দিকের অগ্রাধিকারগুলোর একটি ছিল। পাইথন ১ এবং ২-এর বিকাশের সময় এমনকি OS/2 এবং Solaris-ও সমর্থিত ছিল; তবে সেই সময়ের পর থেকে অনেক প্ল্যাটফর্মের সমর্থন বন্ধ করে দেওয়া হয়েছে।
৩.৭ সংস্করণের পরের সকল বর্তমান পাইথন সংস্করণ শুধুমাত্র সেইসব অপারেটিং সিস্টেম সমর্থন করে যেগুলোতে মাল্টিথ্রেডিং সুবিধা রয়েছে।
রেফারেন্স ইমপ্লিমেন্টেশনের সীমাবদ্ধতা
[সম্পাদনা]
- সাধারণত লেখা কোডের ক্ষেত্রে C-এর তুলনায় CPython-এ পাইথনের শক্তি (Energy) ব্যবহারের পরিমাণ ৭৫.৮৮ গুণ বেশি।[৫০]
- সাধারণ কোডের ক্ষেত্রে C-এর তুলনায় CPython-এ পাইথনের থ্রুপুট (Throughput) বা কাজের গতি ৭১.৯ গুণ কম।[৫০]
- সাধারণত লেখা কোডের ক্ষেত্রে C-এর তুলনায় CPython-এর গড় মেমোরি ব্যবহারের পরিমাণ ২.৪ গুণ বেশি।[৫০]
পাইথনের সকল বিকল্প ইমপ্লিমেন্টেশনের (Alternative implementations) মধ্যে অন্তত সামান্য হলেও প্রয়োগিক বৈশিষ্ট্যের (Semantics) পার্থক্য থাকে। উদাহরণস্বরূপ, বর্তমান পাইথন সংস্করণগুলোর বিপরীতে কোনো বিকল্প ইমপ্লিমেন্টেশনে অবিন্যস্ত ডিকশনারি (unordered dictionaries) থাকতে পারে। পাইথন ইকোসিস্টেমের আরেকটি উদাহরণ হলো, PyPy সম্পূর্ণ সি পাইথন এপিআই (C Python API) সমর্থন করে না।
পাইথন দিয়ে একটি এক্সিকিউটেবল ফাইল তৈরির ক্ষেত্রে প্রায়শই সম্পূর্ণ পাইথন ইন্টারপ্রেটারকে ওই এক্সিকিউটেবলের সাথে যুক্ত করা হয়, যার ফলে ছোট প্রোগ্রামের ক্ষেত্রেও বাইনারি ফাইলের আকার অনেক বড় হয়ে যায়।[৫১] তবে এমন কিছু ইমপ্লিমেন্টেশন আছে যা পাইথনকে সত্যিকার অর্থে কম্পাইল করতে সক্ষম। উল্লেখযোগ্য কিছু বিকল্প ইমপ্লিমেন্টেশন হলো:
- PyPy হলো পাইথন ২.৭ এবং ৩.১০-এর একটি দ্রুত এবং মানানসই (compliant) ইন্টারপ্রেটার।[৫২][৫৩] PyPy-এর জাস্ট-ইন-টাইম কম্পাইলার (JIT) প্রায়শই CPython-এর তুলনায় গতি উল্লেখযোগ্যভাবে বৃদ্ধি করে, তবে এটি সি (C) ভাষায় লেখা কিছু লাইব্রেরি সমর্থন করে না।[৫৪] PyPy বর্তমানে RISC-V ইন্সট্রাকশন-সেট আর্কিটেকচার সমর্থন করে।
- Codon হলো একটি অ্যাহেড-অফ-টাইম (AOT) কম্পাইলার ভিত্তিক ইমপ্লিমেন্টেশন। এটি পাইথনের মতো একটি স্ট্যাটিক্যালি-টাইপড ভাষাকে কম্পাইল করে যার "সিনট্যাক্স এবং সেমান্টিকস পাইথনের প্রায় অনুরূপ হলেও কিছু উল্লেখযোগ্য পার্থক্য রয়েছে।"[৫৫] যেমন, Codon গতির জন্য ৬৪-বিট মেশিন ইনটিজার ব্যবহার করে। এর ডেভেলপারদের দাবি অনুযায়ী, CPython-এর তুলনায় এর গতি সাধারণত দশ থেকে একশ গুণ বেশি। Codon LLVM-এর মাধ্যমে মেশিন কোডে কম্পাইল করে এবং নেটিভ মাল্টিথ্রেডিং সমর্থন করে।[৫৬]
- MicroPython এবং CircuitPython হলো পাইথন ৩-এর এমন দুটি সংস্করণ যা মাইক্রোকন্ট্রোলারের জন্য অপ্টিমাইজ করা হয়েছে, যার মধ্যে Lego Mindstorms EV3-ও অন্তর্ভুক্ত।[৫৭]
- Pyston হলো পাইথন রানটাইমের একটি সংস্করণ যা প্রোগ্রাম চালানোর গতি বাড়ানোর জন্য জাস্ট-ইন-টাইম কম্পাইলেশন ব্যবহার করে।[৫৮]
- Cinder হলো CPython ৩.৮-এর একটি কর্মক্ষমতা-ভিত্তিক ফর্ক (fork), যা ইনস্টাগ্রাম (Instagram) তৈরি করেছে। এতে বেশ কিছু অপ্টিমাইজেশন রয়েছে, যার মধ্যে বাইটকোড ইনলাইন ক্যাশিং এবং একটি পরীক্ষামূলক বাইটকোড কম্পাইলার অন্তর্ভুক্ত।[৫৯]
- Snek এমবেডেড কম্পিউটিং ভাষাটি পাইথন দ্বারা অনুপ্রাণিত, কিন্তু এটি পূর্ণাঙ্গ পাইথন নয়। এতে পাইথনের মতো অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং নেই এবং এটি আরডুইনোর মতো ৮-বিট AVR microcontrollers-এ চলতে পারে।[৬০]
বর্তমানে অসমর্থিত ইমপ্লিমেন্টেশন
[সম্পাদনা]
Stackless Python হলো CPython-এর একটি গুরুত্বপূর্ণ ফর্ক যা মাইক্রোথ্রেড (microthreads) ইমপ্লিমেন্ট করে। এটি কল স্ট্যাকের (call stack) ভিন্ন ব্যবহারের মাধ্যমে ব্যাপকভাবে কনকারেন্ট প্রোগ্রাম চালানোর সুবিধা দেয়।
বর্তমানে সমর্থন বন্ধ হয়ে যাওয়া কিছু জাস্ট-ইন-টাইম পাইথন কম্পাইলার হলো:
- গুগল ২০০৯ সালে Unladen Swallow নামে একটি প্রজেক্ট শুরু করেছিল, যার লক্ষ্য ছিল LLVM ব্যবহার করে পাইথন ইন্টারপ্রেটারের গতি পাঁচ গুণ বাড়ানো।[৬১]
- Psyco হলো একটি পুরোনো জাস্ট-ইন-টাইম কম্পাইলার যা রানটাইমে বাইটকোডকে মেশিন কোডে রূপান্তরিত করত। এটি পাইথন ২.৭ বা তার পরের সংস্করণগুলো সমর্থন করে না।
- PyS60 ছিল ২০০৫ সালে নোকিয়া (Nokia) কর্তৃক অবমুক্ত করা সিরিজ ৬০ মোবাইল ফোনের জন্য একটি পাইথন ২ ইন্টারপ্রেটার। এটি Symbian অপারেটিং সিস্টেমের সাথে পাইথনের সমন্বয় ঘটাত।[৬২]
উচ্চ-স্তরের অবজেক্ট ল্যাঙ্গুয়েজে রূপান্তরের জন্য বেশ কয়েকটি কম্পাইলার বা ট্রান্সপাইলার রয়েছে; এক্ষেত্রে উৎস ভাষা হিসেবে পূর্ণাঙ্গ পাইথন, পাইথনের একটি সাবসেট (subset) বা পাইথনের মতো কোনো ভাষা ব্যবহৃত হয়:
- Brython[৬৩] এবং Transcrypt[৬৪]: এগুলো পাইথনকে জাভাস্ক্রিপ্টে রূপান্তর করে।
- Cython: এটি পাইথনের একটি সুপারসেটকে সি (C) ভাষায় কম্পাইল করে। এর ফলে প্রাপ্ত কোডটি পাইথন ইন্টারপ্রেটারে সরাসরি সি-লেভেল এপিআই (C-level API) কলের মাধ্যমে ব্যবহার করা যায়।
- PyJL: এটি পাইথনের একটি সাবসেটকে "মানুষের পাঠযোগ্য, রক্ষণাবেক্ষণযোগ্য এবং উচ্চ-ক্ষমতাসম্পন্ন জুলিয়া (Julia) সোর্স কোড"-এ রূপান্তর করে।[৬৫] যদিও ডেভেলপাররা উচ্চ গতির দাবি করেন, তবে সব ধরনের পাইথন কোডের জন্য এটি সম্ভব নয়। জুলিয়া সোর্স কোডটি পাইথন থেকে ব্যবহার করা যায় অথবা সরাসরি মেশিন কোডে কম্পাইল করা যায়।
- Nuitka: এটি পাইথনকে সি (C) ভাষায় কম্পাইল করে।[৬৬] এই কম্পাইলারটি পাইথন ৩.৪ থেকে ৩.১৩ পর্যন্ত (এবং ২.৬ ও ২.৭) সংস্করণ সমর্থন করে। এটি অ্যান্ড্রয়েড এবং অ্যাপল সিলিকন-সহ ম্যাকওএস-এ কাজ করে। নুইটকা বিনামূল্যে ব্যবহার করা যায়, তবে এর কিছু বাণিজ্যিক অ্যাড-অন (commercial add-ons) রয়েছে।
- Numba: এটি হলো একটি জেআইটি (JIT) কম্পাইলার যা পাইথন এবং NumPy কোডের সাবসেটকে দ্রুত মেশিন কোডে রূপান্তর করে। এটি ব্যবহারের জন্য পাইথন কোডে কেবল একটি 'ডেকোরেটর' (decorator) যুক্ত করতে হয়।
- Pythran: এটি পাইথন ৩-এর একটি সাবসেটকে সি++ (C++11) ভাষায় কম্পাইল করে।[৬৭]
- RPython: এটি সি (C) ভাষায় কম্পাইল করা যায় এবং এটি মূলত পাইথনের জন্য PyPy ইন্টারপ্রেটার তৈরিতে ব্যবহৃত হয়।
- Python → 11l → C++: এই ট্রান্সপাইলারটি পাইথন ৩-এর একটি সাবসেটকে সি++ (C++17) ভাষায় রূপান্তর করে।
এছাড়াও কিছু বিশেষায়িত কম্পাইলার রয়েছে:
- MyHDL: এটি হলো পাইথন-ভিত্তিক একটি হার্ডওয়্যার ডেসক্রিপশন ল্যাঙ্গুয়েজ (HDL), যা MyHDL কোডকে Verilog বা VHDL কোডে রূপান্তর করে।
কিছু পুরোনো বা পাইথন ৩.এক্স-এর জন্য অপ্টিমাইজড নয় এমন প্রজেক্টগুলো হলো:
- Grumpy: গুগলের এই টুলটি পাইথন ২-কে গো (Go) ভাষায় রূপান্তর করে।[৬৮] ২০১৭ সালের পর এর নতুন কোনো সংস্করণ আসেনি।
- IronPython: এটি পাইথন ২.৭ প্রোগ্রামকে .NET-এর কমন ল্যাঙ্গুয়েজ রানটাইমে চালানোর সুবিধা দেয়। পাইথন ৩.৪-এর জন্য এর একটি আলফা সংস্করণ ২০২১ সালে প্রকাশিত হয়েছে।
- Jython: এটি পাইথন ২.৭-কে জাভা বাইটকোডে কম্পাইল করে, যার ফলে পাইথন প্রোগ্রাম থেকে জাভা লাইব্রেরি ব্যবহার করা সম্ভব হয়।
- Pyrex এবং Shed Skin: এগুলো যথাক্রমে সি এবং সি++ ভাষায় কোড কম্পাইল করত (বর্তমানে এগুলোর ব্যবহার কমে গেছে)।
একটি অ-সংখ্যাসূচক (combinatorial) কাজের চাপের ওপর ভিত্তি করে বিভিন্ন পাইথন ইমপ্লিমেন্টেশনের মধ্যে একটি কর্মক্ষমতা তুলনা ইউরোসাইপাই '১৩ (EuroSciPy '13)-এ উপস্থাপন করা হয়েছিল।[৬৯] এছাড়াও, অন্যান্য প্রোগ্রামিং ভাষার তুলনায় পাইথনের কর্মক্ষমতা The Computer Language Benchmarks Game-এ বেঞ্চমার্ক করা হয়েছে।[৭০]
একটি ইন্টারপ্রেটেড ভাষা হওয়ার কারণে সহজাত ধীরগতি থাকা সত্ত্বেও, পাইথনের কর্মক্ষমতা অপ্টিমাইজ করার জন্য বেশ কিছু পদ্ধতি রয়েছে। এই পদ্ধতিগুলোর মধ্যে নিম্নলিখিত কৌশল বা সরঞ্জামগুলো অন্তর্ভুক্ত:
- জাস্ট-ইন-টাইম কম্পাইলেশন: একটি পাইথন প্রোগ্রাম চালানোর সময় তার কিছু অংশকে গতিশীলভাবে (dynamically) কম্পাইল করা। এই প্রযুক্তিটি Numba এবং PyPy-এর মতো লাইব্রেরিতে ব্যবহৃত হয়।
- স্ট্যাটিক কম্পাইলেশন: কখনও কখনও পাইথন কোডকে চালানোর আগেই মেশিন কোডে কম্পাইল করা যায়। এই পদ্ধতির একটি উদাহরণ হলো Cython, যা পাইথনকে সি (C) ভাষায় কম্পাইল করে।
- কনকারেন্সি এবং প্যারালালিজম: একাধিক কাজ একসাথে চালানো। এই ধরনের প্যারালালিজম বা সমান্তরালতা সমর্থনের জন্য পাইথনে
multiprocessing-এর মতো মডিউল রয়েছে। অধিকন্তু, এই পদ্ধতিটি সিপিইউ সংক্রান্ত কাজে গ্লোবাল ইন্টারপ্রেটার লক (GIL)-এর সীমাবদ্ধতা কাটিয়ে উঠতে সাহায্য করে।
[Image explaining Python Global Interpreter Lock (GIL) vs Multiprocessing]
- দক্ষ ডেটা স্ট্রাকচার: মেম্বারশিপ টেস্টের (membership tests) জন্য
Setঅথবা কিউ (queue) অপারেশনের জন্যcollectionsথেকেdeque-এর মতো ডেটা টাইপ ব্যবহার করেও কর্মক্ষমতা উন্নত করা যায়। - বিশেষায়িত লাইব্রেরি: NumPy-এর মতো লাইব্রেরি ব্যবহার করে কর্মক্ষমতা উল্লেখযোগ্যভাবে বৃদ্ধি করা সম্ভব। বেশিরভাগ উচ্চ-ক্ষমতাসম্পন্ন পাইথন লাইব্রেরি পাইথন ইন্টারপ্রেটারের পরিবর্তে নেপথ্যে সি (C) অথবা ফোরট্রান (Fortran) ব্যবহার করে।[৭১]
পাইথনের উন্নয়ন মূলত 'পাইথন এনহান্সমেন্ট প্রপোজাল' (Python Enhancement Proposal) বা PEP প্রক্রিয়ার মাধ্যমে পরিচালিত হয়; এটি প্রধানত নতুন ফিচারের প্রস্তাব দেওয়া, কোনো বিষয়ে সম্প্রদায়ের মতামত সংগ্রহ এবং পাইথনের নকশা সংক্রান্ত সিদ্ধান্তগুলো নথিবদ্ধ করার প্রাথমিক মাধ্যম।[৭২] পাইথনের কোডিং স্টাইল বা লেখার ধরন PEP 8-এ বর্ণনা করা হয়েছে।[৭৩] গুরুত্বপূর্ণ পিইপি (PEP)-গুলো পাইথন সম্প্রদায় এবং স্টিয়ারিং কাউন্সিল কর্তৃক পর্যালোচনা ও মন্তব্য করা হয়।[৭২]
ভাষার এই উন্নয়ন কার্যক্রম CPython রেফারেন্স ইমপ্লিমেন্টেশনের সাথে সামঞ্জস্য রেখে চলে। 'python-dev' মেলিং লিস্ট হলো ভাষাটির উন্নয়নের প্রধান ফোরাম। নির্দিষ্ট সমস্যাগুলো শুরুতে ফাউন্ডেশন দ্বারা পরিচালিত 'Roundup' বাগ ট্র্যাকার-এ আলোচনা করা হতো।[৭৪] ২০২২ সালে সকল সমস্যা (issues) এবং আলোচনা গিটহাবে স্থানান্তরিত করা হয়েছে।[৭৫] ২০১৭ সালের জানুয়ারিতে গিটহাবে স্থানান্তরের আগে পাইথনের উন্নয়ন কার্যক্রম মূলত 'Mercurial' চালিত একটি নিজস্ব সোর্স-কোড রিপোজিটরিতে হতো।[৭৬]
CPython-এর পাবলিক রিলিজ বা জনসমক্ষে প্রকাশিত সংস্করণগুলো তিন প্রকারের হয়, যা সংস্করণ নম্বরের পরিবর্তনের মাধ্যমে চিহ্নিত করা হয়:
- পূর্ববর্তী সংস্করণের সাথে অসামঞ্জস্যপূর্ণ সংস্করণ (Backward-incompatible versions): এক্ষেত্রে আগের কোড নতুন সংস্করণে কাজ নাও করতে পারে এবং ম্যানুয়ালি তা ঠিক (porting) করতে হয়। সংস্করণ নম্বরের প্রথম অংশটি এক্ষেত্রে পরিবর্তন করা হয়। এই ধরনের প্রকাশনা খুব কমই ঘটে—যেমন সংস্করণ ২.০-এর ৮ বছর পর সংস্করণ ৩.০ প্রকাশ করা হয়েছিল। গুইডো ভ্যান রোসামের মতে, সংস্করণ ৪.০ সম্ভবত কখনোই আসবে না।[৭৭]
- প্রধান বা "ফিচার" রিলিজ (Major or "feature" releases): এগুলো আগের সংস্করণের সাথে সামঞ্জস্যপূর্ণ থাকে তবে নতুন নতুন ফিচার যুক্ত করা হয়। সংস্করণ নম্বরের দ্বিতীয় অংশটি এক্ষেত্রে পরিবর্তন করা হয়। পাইথন ৩.৯ থেকে শুরু করে, এই সংস্করণগুলো প্রতি বছর একবার প্রকাশিত হয়।[৭৮] প্রকাশের পর কয়েক বছর পর্যন্ত প্রতিটি প্রধান সংস্করণ বাগ ফিক্সের (bug fix) সমর্থন পায়।
- বাগ ফিক্স রিলিজ (Bug fix releases): এতে কোনো নতুন ফিচার যুক্ত করা হয় না, বরং আগের সংস্করণের ত্রুটিগুলো সংশোধন করা হয়। এগুলো প্রায় প্রতি তিন মাস অন্তর প্রকাশিত হয় এবং সংস্করণ নম্বরের তৃতীয় বা শেষ অংশটি পরিবর্তন করা হয়। এতে নিরাপত্তার ঝুঁকিগুলোও (security vulnerabilities) সংশোধন করা হয়।[৭৯]
চূড়ান্ত প্রকাশের আগে পরীক্ষা করার জন্য অনেক আলফা, বিটা এবং রিলিজ-ক্যান্ডিডেট সংস্করণও প্রকাশ করা হয়। যদিও প্রকাশের একটি নির্দিষ্ট সময়সূচী থাকে, তবে কোড সম্পূর্ণ প্রস্তুত না হলে অনেক সময় প্রকাশে দেরি করা হয়। পাইথনের ডেভেলপমেন্ট টিম উন্নয়নের সময় একটি বিশাল 'ইউনিট টেস্ট' (unit test) স্যুট চালানোর মাধ্যমে কোডের অবস্থা পর্যবেক্ষণ করে।[৮০]
পাইথনের প্রধান একাডেমিক কনফারেন্স হলো PyCon। এছাড়াও, পাইথনে নারীদের উৎসাহিত করতে PyLadies-এর মতো বিশেষ মেন্টরিং প্রোগ্রাম রয়েছে।
পাইথনের নামটি ব্রিটিশ কমেডি দল মন্টি পাইথন-এর অনুপ্রেরণায় রাখা হয়েছে, যাঁদের সৃষ্টিকর্ম পাইথনের স্রষ্টা গুইডো ভ্যান রোসাম ভাষাটি তৈরির সময় বেশ উপভোগ করতেন। পাইথন কোড এবং সংস্কৃতিতে প্রায়শই মন্টি পাইথনের উল্লেখ পাওয়া যায়;[৮১] উদাহরণস্বরূপ, পাইথন সাহিত্যে প্রায়শই ব্যবহৃত মেটাসিনট্যাকটিক ভেরিয়েবলগুলো হলো spam এবং eggs, প্রথাগত foo এবং bar-এর পরিবর্তে।[৮১][৮২]
এছাড়াও, পাইথনের দাপ্তরিক নথিপত্রে (documentation) মন্টি পাইথনের বিভিন্ন রুটিনের নানা উল্লেখ রয়েছে।[৮৩][৮৪] পাইথন ব্যবহারকারীদের অনেক সময় "Pythonistas" (পাইথনিস্তা) হিসেবে অভিহিত করা হয়।[৮৫]
পাইথন দ্বারা প্রভাবিত প্রোগ্রামিং ভাষাসমূহ
[সম্পাদনা]
কোবরা: এই ভাষার একটি 'Acknowledgements' নথি রয়েছে যেখানে পাইথনকে প্রথম প্রভাবশালী ভাষা হিসেবে তালিকাভুক্ত করা হয়েছে।[৮৬]
ECMAScript এবং জাভাস্ক্রিপ্ট: এই ভাষা দুটি পাইথন থেকে ইটারেটর এবং জেনারেটর পদ্ধতিগুলো গ্রহণ করেছে।[৮৭]
গো: পাইথনের মতো একটি ডাইনামিক ভাষায় কাজ করার দ্রুততা নিশ্চিত করার লক্ষ্যে এটি ডিজাইন করা হয়েছে।[৮৮]
জুলিয়া: এটি পাইথনের মতো সাধারণ প্রোগ্রামিংয়ের জন্য সমানভাবে উপযোগী হওয়ার লক্ষ্যে ডিজাইন করা হয়েছে।[৮৯]
মোজো: এটি প্রায় পাইথনের একটি সুপারসেট হিসেবে পরিচিত।[৯০][৯১]
এছাড়াও, Groovy, বু, কফিস্ক্রিপ্ট, এফ#, Nim, Ring,[৯৩] Ruby,[৯৪] Swift,[৯৫] এবং V[৯৬] পাইথন দ্বারা প্রভাবিত হয়েছে।
গুগল কোল্যাব — জিরো সেটআপ অনলাইন আইডিই (IDE) যা পাইথন পরিচালনা করে
- ↑ Computer Languages History
- 1 2 "HISTORY"। _Python source distribution_। Python Foundation। ১৭ ফেব্রুয়ারি ২০১৬ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২১ মার্চ ২০০৭।
- ↑ "What is Python? Executive Summary"। _Python documentation_। Python Foundation। সংগ্রহের তারিখ ২১ মার্চ ২০০৭।
- 1 2 3 "The Making of Python"। Artima Developer। সংগ্রহের তারিখ ২২ মার্চ ২০০৭।
- 1 2 "Why was Python created in the first place?"। Python FAQ। সংগ্রহের তারিখ ২২ মার্চ ২০০৭।
- ↑ Guido van Rossum। "The fate of reduce() in Python 3000"। Artima Developer। সংগ্রহের তারিখ ২২ মার্চ ২০০৭।
- ↑ "LJ #37: Python 1.4 Update"। ১ মে ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২৯ এপ্রিল ২০০৭।
- ↑ Guido van Rossum। "Computer Programming for Everybody"। ২৩ ফেব্রুয়ারি ২০০৯ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২২ মার্চ ২০০৭।
- ↑ "Computer Programming for Everybody"। Python Software Foundation। ১২ মার্চ ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২২ মার্চ ২০০৭।
- 1 2 A.M. Kuchling and Moshe Zadka। "What's New in Python 2.0"। ১৪ ডিসেম্বর ২০০৯ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২২ মার্চ ২০০৭।
- 1 2 "History of the software"। _Python Library Reference_। ২৯ মার্চ ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২২ মার্চ ২০০৭।
- ↑ Jeremy Hylton। "Statically Nested Scopes"। সংগ্রহের তারিখ ২২ মার্চ ২০০৭।
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ২ ফেব্রুয়ারি ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৬ ফেব্রুয়ারি ২০০৭।
- ↑ http://www.python.org/doc/2.2.3/whatsnew/node5.html
- ↑ http://www.python.org/dev/peps/pep-0282/
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ৩ ফেব্রুয়ারি ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৬ ফেব্রুয়ারি ২০০৭।
- ↑ http://www.python.org/dev/peps/pep-0318/
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ৬ ফেব্রুয়ারি ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৬ ফেব্রুয়ারি ২০০৭।
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ১৯ ফেব্রুয়ারি ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৬ ফেব্রুয়ারি ২০০৭।
- ↑ http://www.python.org/about/success/usa/
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ১৬ ফেব্রুয়ারি ২০০৯ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৩ ডিসেম্বর ২০০৭।
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ১৮ ডিসেম্বর ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৩ ডিসেম্বর ২০০৭।
- ↑ "CORE Security Technologies' open source software repository"। ১২ ডিসেম্বর ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৩ ডিসেম্বর ২০০৭।
- ↑ http://wapiti.sourceforge.net/
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ১ ডিসেম্বর ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৩ ডিসেম্বর ২০০৭।
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি" (পিডিএফ)। ২৯ নভেম্বর ২০০৭ তারিখে মূল থেকে (পিডিএফ) আর্কাইভকৃত। সংগ্রহের তারিখ ১৩ ডিসেম্বর ২০০৭।
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ১২ ডিসেম্বর ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৩ ডিসেম্বর ২০০৭।
- ↑ http://www.artima.com/weblogs/viewpost.jsp?thread=147358
- ↑ http://www.python.org/peps/pep-0342.html
- ↑ "Why must 'self' be used explicitly in method definitions and calls?"। Python FAQ।
- ↑ http://www.python.org/dev/peps/pep-0007/
- ↑ http://www.oreilly.com/pub/a/oreilly/frank/rossum_1099.html
- ↑ http://www.python.org/peps/pep-0327.html
- ↑ http://www.oracle.com/technology/pub/articles/piotrowski-pythoncore.html
- ↑ http://www.python.org/dev/peps/pep-0020/
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ২৭ আগস্ট ২০০৬ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৬ ফেব্রুয়ারি ২০০৭।
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ১১ ডিসেম্বর ২০০৮ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৬ ফেব্রুয়ারি ২০০৭।
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ২ ফেব্রুয়ারি ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৬ ফেব্রুয়ারি ২০০৭।
- ↑ http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html
- ↑ "সংরক্ষণাগারভুক্ত অনুলিপি"। ১৩ ফেব্রুয়ারি ২০১২ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৬ ফেব্রুয়ারি ২০০৭।
- ↑ http://www.tcl.tk/cgi-bin/tct/tip/3.html
- ↑ "PEP 7 – Style Guide for C Code | peps.python.org"। _peps.python.org_। ২৪ এপ্রিল ২০২২ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২৮ এপ্রিল ২০২২।
- ↑ "4. Building C and C++ Extensions – Python 3.9.2 documentation"। _docs.python.org_। ৩ মার্চ ২০২১ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১ মার্চ ২০২১।
- ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-66নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-67নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-68নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ "Changelog – Python 3.9.0 documentation"। _docs.python.org_। ৭ ফেব্রুয়ারি ২০২১ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ৮ ফেব্রুয়ারি ২০২১।
- ↑ "Download Python"। Python.org (ইংরেজি ভাষায়)। ৮ ডিসেম্বর ২০২০ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৩ ডিসেম্বর ২০২০।
- ↑ "history [vmspython]"। _www.vmspython.org_। ২ ডিসেম্বর ২০২০ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ৪ ডিসেম্বর ২০২০।
- 1 2 3 Pereira, Rui; Couto, Marco; Ribeiro, Francisco; Rua, Rui; Cunha, Jácome; Fernandes, João Paulo; Saraiva, João (২৩ অক্টোবর ২০১৭)। "Energy efficiency across programming languages: How do energy, time, and memory relate?"। Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering। SLE 2017। New York, NY, USA: Association for Computing Machinery। পৃ. ২৫৬–২৬৭। ডিওআই:10.1145/3136014.3136031। আইএসবিএন ৯৭৮-১-৪৫০৩-৫৫২৫-৪।
- ↑ "What PyInstaller Does and How It Does It"।
- ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-70নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ Team, The PyPy (২৮ ডিসেম্বর ২০১৯)। "Download and Install"। PyPy (ইংরেজি ভাষায়)। ৮ জানুয়ারি ২০২২ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ৮ জানুয়ারি ২০২২।
- ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-71নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ "Codon: Differences with Python"। ২৫ মে ২০২৩ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২৮ আগস্ট ২০২৩।
- ↑ Lawson, Loraine (১৪ মার্চ ২০২৩)। "MIT-Created Compiler Speeds up Python Code"। The New Stack (মার্কিন ইংরেজি ভাষায়)। ৬ এপ্রিল ২০২৩ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২৮ আগস্ট ২০২৩।
- ↑ "Python-for-EV3"। LEGO Education (ইংরেজি ভাষায়)। ৭ জুন ২০২০ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৭ এপ্রিল ২০১৯।
- ↑ Yegulalp, Serdar (২৯ অক্টোবর ২০২০)। "Pyston returns from the dead to speed Python"। _InfoWorld_। ২৭ জানুয়ারি ২০২১ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২৬ জানুয়ারি ২০২১।
- ↑ "cinder: Instagram's performance-oriented fork of CPython."। GitHub (ইংরেজি ভাষায়)। ৪ মে ২০২১ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ৪ মে ২০২১।
- ↑ Packard, Keith (২০ ডিসেম্বর ২০২২)। "The Snek Programming Language" (পিডিএফ)। সংগ্রহের তারিখ ৪ জানুয়ারি ২০২৪।
- ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-74নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ "Python on the Nokia N900"। _Stochastic Geometry_। ২৯ এপ্রিল ২০১০। সংগ্রহের তারিখ ৯ জুলাই ২০১৫।
- ↑ "Brython"।
- ↑ "Transcrypt – Python in the browser"।
- ↑ "Transpiling Python to Julia using PyJL" (পিডিএফ)।
- ↑ "Nuitka Home"।
- ↑ Guelton, Serge। "Pythran: enabling static optimization of scientific Python programs"। _Computational Science & Discovery_।
- ↑ "google/grumpy"।
- ↑ Murri, Riccardo (২০১৩)। _Performance of Python runtimes on a non-numeric scientific code_। European Conference on Python in Science (EuroSciPy)। আরজাইভ:1404.6388। বিবকোড:2014arXiv1404.6388M।
- ↑ "The Computer Language Benchmarks Game"। ১৪ জুন ২০২০ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ৩০ এপ্রিল ২০২০।
- ↑ Python, Real। "Look Ma, No for Loops: Array Programming With NumPy – Real Python"। realpython.com (ইংরেজি ভাষায়)। সংগ্রহের তারিখ ১৫ অক্টোবর ২০২৫।
- 1 2 উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;PepCite000নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;pep8নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-21নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ Edge, Jake (২৩ ফেব্রুয়ারি ২০২২)। "Moving Python's bugs to GitHub [LWN.net]"।
- ↑ "Python Developer's Guide"।
- ↑ Hughes, Owen। "Why Python 4.0 might never arrive"।
- ↑ "PEP 602 – Annual Release Cycle for Python"।
- ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-22নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-23নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - 1 2 উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;tutorial-chapter1নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;AutoNT-26নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ Lutz 2013, পৃ. 17।
- ↑ Fehily, Chris (২০০২)। Python (ইংরেজি ভাষায়)। Peachpit Press। পৃ. xv। আইএসবিএন ৯৭৮-০-২০১-৭৪৮৮৪-০। ১৭ জুলাই ২০১৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ৯ মে ২০১৭।
- ↑ Lubanovic, Bill (২০১৪)। Introducing Python। Sebastopol, CA : O'Reilly Media। পৃ. ৩০৫। আইএসবিএন ৯৭৮-১-৪৪৯৩-৫৯৩৬-২। সংগ্রহের তারিখ ৩১ জুলাই ২০২৩।
- ↑ Esterbrook, Charles। "Acknowledgements"। _cobra-language.com_।
- ↑ "Proposals: iterators and generators [ES4 Wiki]"। ২০ অক্টোবর ২০০৭ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৫ জানুয়ারি ২০২৬।
- ↑ Kincaid, Jason। "Google's Go: A New Programming Language That's Python Meets C++"।
- ↑ "Why We Created Julia"। _Julia website_। ফেব্রুয়ারি ২০১২।
- ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;Mojoনামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ "Modular Docs – Why Mojo"।
- ↑ "GDScript"। _gdscript.com_। সংগ্রহের তারিখ ২৪ নভেম্বর ২০২৫।
- ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;The Ring programming language and other languagesনামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;biniনামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;lattner2014নামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি - ↑ উদ্ধৃতি ত্রুটি:
<ref>ট্যাগ বৈধ নয়;vpeopleনামের সূত্রটির জন্য কোন লেখা প্রদান করা হয়নি