পাইথনের `keyword` মডিউলের একটি বিস্তারিত ও গভীর নির্দেশিকা। শক্তিশালী মেটাপ্রোগ্রামিং, কোড জেনারেশন এবং বৈধতার জন্য কীভাবে সংরক্ষিত কীওয়ার্ডগুলি তালিকাভুক্ত, পরীক্ষা ও পরিচালনা করবেন তা শিখুন।
পাইথনের `keyword` মডিউল: সংরক্ষিত শব্দের চূড়ান্ত নির্দেশিকা
যে কোনো প্রোগ্রামিং ভাষার বিশাল মহাবিশ্বে, কিছু শব্দ পবিত্র। এগুলি কাঠামোগত স্তম্ভ, ব্যাকরণের আঠা যা পুরো সিনট্যাক্সকে একসাথে ধরে রাখে। পাইথনে, এগুলি কীওয়ার্ড বা সংরক্ষিত শব্দ হিসাবে পরিচিত। একটি ভেরিয়েবল নামের মতো তাদের উদ্দেশ্যপ্রণোদিত ব্যবহার ছাড়া অন্য কোনো কিছুর জন্য ব্যবহার করার চেষ্টা করলে একটি তাৎক্ষণিক এবং আপোষহীন `SyntaxError` হয়। কিন্তু আপনি কিভাবে তাদের ট্র্যাক রাখবেন? আপনি কিভাবে নিশ্চিত করবেন যে আপনার তৈরি করা কোড বা আপনার গ্রহণ করা ব্যবহারকারীর ইনপুট ভুলবশত এই পবিত্র ভূমিতে পা রাখছে না? এর উত্তর পাইথনের স্ট্যান্ডার্ড লাইব্রেরির একটি সহজ, মার্জিত এবং শক্তিশালী অংশে নিহিত: সেটি হল keyword
মডিউল।
এই বিস্তারিত নির্দেশিকা আপনাকে keyword
মডিউলে গভীরভাবে প্রবেশ করাবে। আপনি পাইথন সিনট্যাক্সের নিয়মাবলী সবেমাত্র শিখছেন এমন একজন শিক্ষানবিশ হন, বা শক্তিশালী অ্যাপ্লিকেশন তৈরি করছেন এমন একজন মধ্যবর্তী ডেভেলপার হন, অথবা ফ্রেমওয়ার্ক এবং কোড জেনারেটর নিয়ে কাজ করা একজন উন্নত প্রোগ্রামার হন, এই মডিউলটি আয়ত্ত করা পরিষ্কার, নিরাপদ এবং আরও বুদ্ধিমান পাইথন কোড লেখার দিকে একটি অপরিহার্য পদক্ষেপ।
পাইথনে কীওয়ার্ডগুলি আসলে কী?
পাইথন সিনট্যাক্সের ভিত্তি
মূলত, একটি কীওয়ার্ড হল এমন একটি শব্দ যার পাইথন ইন্টারপ্রেটারের কাছে একটি বিশেষ, পূর্বনির্ধারিত অর্থ রয়েছে। এই শব্দগুলি ভাষা দ্বারা আপনার স্টেটমেন্ট এবং কোড ব্লকের কাঠামো সংজ্ঞায়িত করার জন্য সংরক্ষিত। এগুলিকে পাইথন ভাষার ক্রিয়া এবং সংযোজক হিসাবে ভাবুন। তারা ইন্টারপ্রেটারকে কী করতে হবে, কিভাবে শাখা তৈরি করতে হবে, কখন লুপ করতে হবে এবং কিভাবে কাঠামো সংজ্ঞায়িত করতে হবে তা বলে দেয়।
যেহেতু তাদের এই বিশেষ ভূমিকা রয়েছে, তাই আপনি তাদের শনাক্তকারী (identifiers) হিসাবে ব্যবহার করতে পারবেন না। একটি শনাক্তকারী হল একটি নাম যা আপনি একটি ভেরিয়েবল, ফাংশন, ক্লাস, মডিউল বা অন্য কোনো বস্তুকে দেন। যখন আপনি একটি কীওয়ার্ডে মান বরাদ্দ করার চেষ্টা করেন, তখন পাইথনের পার্সার কোড রান হওয়ার আগেই আপনাকে থামিয়ে দেয়:
উদাহরণস্বরূপ, `for` কে একটি ভেরিয়েবল নাম হিসাবে ব্যবহার করার চেষ্টা করা:
# This code will not run
for = "loop variable"
# Result -> SyntaxError: invalid syntax
এই তাৎক্ষণিক প্রতিক্রিয়া একটি ভালো জিনিস। এটি ভাষার কাঠামোর অখণ্ডতা রক্ষা করে। এই বিশেষ শব্দগুলির তালিকায় if
, else
, while
, for
, def
, class
, import
, এবং return
এর মতো পরিচিত শব্দগুলি অন্তর্ভুক্ত।
একটি গুরুত্বপূর্ণ পার্থক্য: কীওয়ার্ড বনাম বিল্ট-ইন ফাংশন
পাইথনে নতুন ডেভেলপারদের জন্য একটি সাধারণ বিভ্রান্তির বিষয় হল কীওয়ার্ড এবং বিল্ট-ইন ফাংশনগুলির মধ্যে পার্থক্য। যদিও উভয়ই কোনো আমদানি (imports) ছাড়াই সহজে উপলব্ধ, তাদের প্রকৃতি মৌলিকভাবে ভিন্ন।
- কীওয়ার্ড: ভাষার সিনট্যাক্সের অংশ। এগুলি অপরিবর্তনীয় এবং পুনরায় অ্যাসাইন করা যায় না। এগুলি হল ব্যাকরণ।
- বিল্ট-ইন ফাংশন: গ্লোবাল নেমস্পেসে প্রিলোড করা ফাংশন, যেমন
print()
,len()
,str()
, এবংlist()
। যদিও এটি একটি খারাপ অনুশীলন, তবুও এগুলি পুনরায় অ্যাসাইন করা যেতে পারে। এগুলি স্ট্যান্ডার্ড শব্দভাণ্ডারের অংশ, তবে মূল ব্যাকরণের নয়।
চলুন একটি উদাহরণ দিয়ে বোঝাই:
# Trying to reassign a keyword (FAILS)
try = "attempt"
# Result -> SyntaxError: invalid syntax
# Reassigning a built-in function (WORKS, but is a very bad idea!)
print("This is the original print function")
print = "I am no longer a function"
# The next line would raise a TypeError because 'print' is now a string
# print("This will fail")
এই পার্থক্য বোঝা অপরিহার্য। keyword
মডিউল শুধুমাত্র প্রথম শ্রেণীর সাথে কাজ করে: পাইথন ভাষার প্রকৃত, পুনরায় অ্যাসাইন করা যায় না এমন সংরক্ষিত শব্দগুলি।
`keyword` মডিউলের পরিচিতি: আপনার অপরিহার্য টুলকিট
এখন যেহেতু আমরা কীওয়ার্ডগুলি কী তা প্রতিষ্ঠা করেছি, চলুন তাদের পরিচালনা করার জন্য তৈরি করা টুলের সাথে পরিচিত হই। keyword
মডিউলটি পাইথন স্ট্যান্ডার্ড লাইব্রেরির একটি বিল্ট-ইন অংশ, যার অর্থ হল আপনি pip
দিয়ে কিছু ইনস্টল না করেই এটি যেকোনো সময় ব্যবহার করতে পারেন। একটি সাধারণ import keyword
যথেষ্ট।
মডিউলটি দুটি প্রাথমিক, শক্তিশালী ফাংশন পরিবেশন করে:
- তালিকাভুক্ত করা: এটি আপনার বর্তমানে চলমান পাইথন সংস্করণের জন্য সমস্ত কীওয়ার্ডের একটি সম্পূর্ণ, আপ-টু-ডেট তালিকা প্রদান করে।
- পরীক্ষা করা: এটি কোনো প্রদত্ত স্ট্রিং একটি কীওয়ার্ড কিনা তা পরীক্ষা করার একটি দ্রুত এবং নির্ভরযোগ্য উপায় প্রদান করে।
এই সহজ ক্ষমতাগুলি লিন্টার তৈরি থেকে শুরু করে গতিশীল এবং নিরাপদ সিস্টেম তৈরি পর্যন্ত বিস্তৃত উন্নত অ্যাপ্লিকেশনের ভিত্তি।
`keyword` মডিউলের মূল ফাংশন: একটি ব্যবহারিক নির্দেশিকা
keyword
মডিউলটি সুন্দরভাবে সহজ, এর প্রধান বৈশিষ্ট্যগুলি কয়েকটি অ্যাট্রিবিউট এবং ফাংশনের মাধ্যমে প্রকাশ করে। চলুন ব্যবহারিক উদাহরণ সহ প্রতিটি অন্বেষণ করি।
1. `keyword.kwlist` ব্যবহার করে সমস্ত কীওয়ার্ড তালিকাভুক্ত করা
সবচেয়ে সহজবোধ্য বৈশিষ্ট্য হল keyword.kwlist
। এটি একটি ফাংশন নয়, বরং একটি অ্যাট্রিবিউট যা বর্তমান পাইথন ইন্টারপ্রেটারে সংজ্ঞায়িত সমস্ত কীওয়ার্ডের একটি ক্রম (বিশেষত, স্ট্রিংগুলির একটি তালিকা) ধারণ করে। এটি আপনার সত্যের চূড়ান্ত উৎস।
এটি কিভাবে ব্যবহার করবেন:
import keyword
# Get the list of all keywords
all_keywords = keyword.kwlist
print(f"There are {len(all_keywords)} keywords in this version of Python.")
print("Here they are:")
print(all_keywords)
এই কোডটি চালালে কীওয়ার্ডের সংখ্যা এবং তালিকাটি প্রিন্ট হবে। আপনি 'False'
, 'None'
, 'True'
, 'and'
, 'as'
, 'assert'
, 'async'
, 'await'
ইত্যাদির মতো শব্দ দেখতে পাবেন। এই তালিকাটি আপনার নির্দিষ্ট পাইথন সংস্করণের জন্য ভাষার সংরক্ষিত শব্দভাণ্ডারের একটি স্ন্যাপশট।
এটি কেন উপযোগী? এটি আপনার প্রোগ্রামের জন্য ভাষার সিনট্যাক্স সম্পর্কে সচেতন হওয়ার একটি আত্মদর্শনমূলক উপায় প্রদান করে। এটি পাইথন কোড পার্স, বিশ্লেষণ বা তৈরি করার প্রয়োজন এমন সরঞ্জামগুলির জন্য অমূল্য।
2. `keyword.iskeyword()` ব্যবহার করে কীওয়ার্ড পরীক্ষা করা
যদিও সম্পূর্ণ তালিকা থাকা ভালো, তবে একটি একক শব্দ কীওয়ার্ড কিনা তা পরীক্ষা করার জন্য এর মধ্য দিয়ে পুনরাবৃত্তি করা অদক্ষ। এই কাজের জন্য, মডিউলটি অত্যন্ত অপ্টিমাইজড ফাংশন keyword.iskeyword(s)
প্রদান করে।
এই ফাংশনটি একটি আর্গুমেন্ট, একটি স্ট্রিং s
গ্রহণ করে এবং এটি পাইথন কীওয়ার্ড হলে True
এবং অন্যথায় False
প্রদান করে। চেকটি অত্যন্ত দ্রুত কারণ এটি একটি হ্যাশ-ভিত্তিক লুকআপ ব্যবহার করে।
এটি কিভাবে ব্যবহার করবেন:
import keyword
# Check some potential keywords
print(f"'for' is a keyword: {keyword.iskeyword('for')}")
print(f"'if' is a keyword: {keyword.iskeyword('if')}")
print(f"'True' is a keyword: {keyword.iskeyword('True')}")
# Check some non-keywords
print(f"'variable' is a keyword: {keyword.iskeyword('variable')}")
print(f"'true' is a keyword: {keyword.iskeyword('true')}") # Note the case sensitivity
print(f"'Print' is a keyword: {keyword.iskeyword('Print')}")
প্রত্যাশিত আউটপুট:
'for' is a keyword: True
'if' is a keyword: True
'True' is a keyword: True
'variable' is a keyword: False
'true' is a keyword: False
'Print' is a keyword: False
এই উদাহরণ থেকে একটি গুরুত্বপূর্ণ বিষয় হল যে পাইথন কীওয়ার্ডগুলি কেস-সংবেদনশীল। True
, False
, এবং None
হল কীওয়ার্ড, কিন্তু true
, false
, এবং none
নয়। keyword.iskeyword()
এই গুরুত্বপূর্ণ বিবরণটি সঠিকভাবে প্রতিফলিত করে।
3. `keyword.issoftkeyword()` ব্যবহার করে সফট কীওয়ার্ড বোঝা
পাইথন বিকশিত হওয়ার সাথে সাথে নতুন বৈশিষ্ট্য যুক্ত হয়। বিদ্যমান কোড যাতে নতুন কীওয়ার্ডগুলিকে ভেরিয়েবল নাম হিসাবে ব্যবহার না করে, সেজন্য পাইথন কখনও কখনও "সফট কীওয়ার্ড" বা "প্রসঙ্গ-সংবেদনশীল কীওয়ার্ড" প্রবর্তন করে। এগুলি এমন শব্দ যা শুধুমাত্র নির্দিষ্ট প্রসঙ্গে কীওয়ার্ড হিসাবে কাজ করে। সবচেয়ে বিশিষ্ট উদাহরণ হল match
, case
, এবং _
(ওয়াইল্ডকার্ড), যা পাইথন ৩.১০ এ স্ট্রাকচারাল প্যাটার্ন ম্যাচিংয়ের জন্য প্রবর্তন করা হয়েছিল।
এগুলি বিশেষভাবে শনাক্ত করার জন্য, পাইথন ৩.৯ এ keyword.issoftkeyword(s)
ফাংশনটি প্রবর্তন করা হয়েছিল।
পাইথন সংস্করণ সম্পর্কে একটি নোট: যদিও match
এবং case
একটি match
ব্লকের মধ্যে কীওয়ার্ড হিসাবে কাজ করে, তবে তারা অন্য কোথাও ভেরিয়েবল বা ফাংশন নাম হিসাবে ব্যবহার করা যেতে পারে, যা পূর্ববর্তী সামঞ্জস্য বজায় রাখে। keyword
মডিউল এই পার্থক্যটি পরিচালনা করতে সহায়তা করে।
এটি কিভাবে ব্যবহার করবেন:
import keyword
import sys
# This function was added in Python 3.9
if sys.version_info >= (3, 9):
print(f"'match' is a soft keyword: {keyword.issoftkeyword('match')}")
print(f"'case' is a soft keyword: {keyword.issoftkeyword('case')}")
print(f"'_' is a soft keyword: {keyword.issoftkeyword('_')}")
print(f"'if' is a soft keyword: {keyword.issoftkeyword('if')}")
# In modern Python (3.10+), soft keywords are also in the main kwlist
print(f"
'match' is considered a keyword by iskeyword(): {keyword.iskeyword('match')}")
এই সূক্ষ্ম পার্থক্যটি ডেভেলপারদের জন্য গুরুত্বপূর্ণ যারা আধুনিক পাইথন সিনট্যাক্স সঠিকভাবে পার্স করতে সক্ষম টুল তৈরি করছেন। বেশিরভাগ দৈনন্দিন অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য, keyword.iskeyword()
যথেষ্ট, কারণ এটি সমস্ত শব্দ সঠিকভাবে শনাক্ত করে যা আপনাকে শনাক্তকারী হিসাবে এড়িয়ে চলতে হবে।
ব্যবহারিক অ্যাপ্লিকেশন এবং ব্যবহারের ক্ষেত্রগুলি
তাহলে, একজন ডেভেলপারের কেন প্রোগ্রামেটিকভাবে কীওয়ার্ড পরীক্ষা করার প্রয়োজন হবে? অ্যাপ্লিকেশনগুলি আপনার ধারণার চেয়েও বেশি সাধারণ, বিশেষত মধ্যবর্তী এবং উন্নত ডোমেনগুলিতে।
1. ডাইনামিক কোড জেনারেশন এবং মেটাপ্রোগ্রামিং
মেটাপ্রোগ্রামিং হল এমন কোড লেখার শিল্প যা অন্য কোড লেখে বা ম্যানিপুলেট করে। এটি ফ্রেমওয়ার্ক, অবজেক্ট-রিলেশনাল ম্যাপার (ORM), এবং ডেটা ভ্যালিডেশন লাইব্রেরি (যেমন Pydantic) তে সাধারণ।
দৃশ্যকল্প: কল্পনা করুন আপনি এমন একটি টুল তৈরি করছেন যা একটি ডেটা সোর্স (যেমন একটি JSON স্কিমা বা একটি ডেটাবেস টেবিল) নেয় এবং স্বয়ংক্রিয়ভাবে এটি উপস্থাপন করার জন্য একটি পাইথন ক্লাস তৈরি করে। সোর্স থেকে কী বা কলাম নামগুলি ক্লাসের অ্যাট্রিবিউট হয়ে যায়।
সমস্যা: যদি একটি ডেটাবেস কলামের নাম 'from'
বা একটি JSON কী 'class'
হয়? আপনি যদি অন্ধভাবে সেই নামের সাথে একটি অ্যাট্রিবিউট তৈরি করেন, তাহলে আপনি অবৈধ পাইথন কোড তৈরি করবেন।
সমাধান: keyword
মডিউল আপনার নিরাপত্তা জাল। একটি অ্যাট্রিবিউট তৈরি করার আগে, আপনি পরীক্ষা করে দেখুন নামটি একটি কীওয়ার্ড কিনা। যদি এটি হয়, আপনি এটিকে স্যানিটাইজ করতে পারেন, উদাহরণস্বরূপ, একটি আন্ডারস্কোর যোগ করে, যা পাইথনে একটি সাধারণ কনভেনশন।
উদাহরণ স্যানিটাইজার ফাংশন:
import keyword
def sanitize_identifier(name):
"""Ensures a string is a valid Python identifier and not a keyword."""
if keyword.iskeyword(name):
return f"{name}_"
# A full implementation would also check str.isidentifier()
return name
# Example usage:
fields = ["name", "id", "from", "import", "data"]
print("Generating class attributes...")
for field in fields:
sanitized_field = sanitize_identifier(field)
print(f" self.{sanitized_field} = ...")
আউটপুট:
Generating class attributes...
self.name = ...
self.id = ...
self.from_ = ...
self.import_ = ...
self.data = ...
এই সহজ চেক জেনারেট করা কোডে বিপর্যয়কর সিনট্যাক্স ত্রুটি প্রতিরোধ করে, আপনার মেটাপ্রোগ্রামিং টুলগুলিকে শক্তিশালী এবং নির্ভরযোগ্য করে তোলে।
2. ডোমেন-নির্দিষ্ট ভাষা (DSLs) তৈরি করা
একটি ডোমেন-নির্দিষ্ট ভাষা (DSL) হল একটি নির্দিষ্ট কাজের জন্য তৈরি একটি মিনি-ভাষা, যা প্রায়শই পাইথনের মতো একটি সাধারণ-উদ্দেশ্যমূলক ভাষার উপরে তৈরি করা হয়। ডেটাবেসের জন্য `SQLAlchemy` বা ডেটা ভিজ্যুয়ালাইজেশনের জন্য `Plotly` এর মতো লাইব্রেরিগুলি তাদের ডোমেনের জন্য কার্যকরভাবে DSLs প্রদান করে।
একটি DSL ডিজাইন করার সময়, আপনাকে আপনার নিজস্ব কমান্ড এবং সিনট্যাক্সের সেট সংজ্ঞায়িত করতে হবে। আপনার DSL-এর শব্দভাণ্ডার যাতে পাইথনের নিজস্ব সংরক্ষিত শব্দগুলির সাথে সংঘর্ষ না করে তা নিশ্চিত করার জন্য keyword
মডিউল অপরিহার্য। keyword.kwlist
এর বিরুদ্ধে পরীক্ষা করে, আপনি আপনার ডিজাইনকে অস্পষ্টতা এবং সম্ভাব্য পার্সিং দ্বন্দ্ব এড়াতে নির্দেশিত করতে পারেন।
3. শিক্ষামূলক সরঞ্জাম, লিন্টার এবং IDE তৈরি করা
পাইথন ডেভেলপমেন্ট টুলগুলির সম্পূর্ণ ইকোসিস্টেম পাইথনের সিনট্যাক্স বোঝার উপর নির্ভর করে।
- লিন্টার (যেমন, Pylint, Flake8): এই টুলগুলি আপনার কোডকে ত্রুটি এবং শৈলীগত সমস্যার জন্য স্ট্যাটিকালি বিশ্লেষণ করে। তাদের প্রথম পদক্ষেপ হল কোড পার্স করা, যার জন্য একটি কীওয়ার্ড কী এবং একটি শনাক্তকারী কী তা জানা প্রয়োজন।
- IDEs (যেমন, VS Code, PyCharm): আপনার এডিটরের সিনট্যাক্স হাইলাইটিং কাজ করে কারণ এটি ভেরিয়েবল, স্ট্রিং এবং কমেন্ট থেকে কীওয়ার্ডগুলিকে আলাদা করতে পারে। এটি
def
,if
, এবংreturn
কে ভিন্নভাবে রঙ করে কারণ এটি জানে যে এগুলি কীওয়ার্ড। এই জ্ঞানkeyword
মডিউল যা প্রদান করে তার অনুরূপ একটি তালিকা থেকে আসে। - শিক্ষামূলক প্ল্যাটফর্ম: ইন্টারেক্টিভ কোডিং টিউটোরিয়ালগুলিতে রিয়েল-টাইম প্রতিক্রিয়া প্রদান করতে হবে। যখন একজন শিক্ষার্থী একটি ভেরিয়েবলের নাম
else
করার চেষ্টা করে, তখন প্ল্যাটফর্মটিkeyword.iskeyword('else')
ব্যবহার করে ত্রুটিটি সনাক্ত করতে পারে এবং একটি সহায়ক বার্তা প্রদান করতে পারে, যেমন, "'else' হল পাইথনে একটি সংরক্ষিত কীওয়ার্ড এবং এটি একটি ভেরিয়েবলের নাম হিসাবে ব্যবহার করা যাবে না।"
4. শনাক্তকারীগুলির জন্য ব্যবহারকারীর ইনপুট যাচাই করা
কিছু অ্যাপ্লিকেশন ব্যবহারকারীদের সত্তাগুলির নাম দেওয়ার অনুমতি দেয় যা পরে প্রোগ্রাম্যাটিক শনাক্তকারী হতে পারে। উদাহরণস্বরূপ, একটি ডেটা সায়েন্স প্ল্যাটফর্ম একজন ব্যবহারকারীকে একটি ডেটাসেটে একটি গণনাকৃত কলামের নাম দিতে দিতে পারে। এই নামটি তখন অ্যাট্রিবিউট অ্যাক্সেসের মাধ্যমে কলামটি অ্যাক্সেস করতে ব্যবহৃত হতে পারে (যেমন, dataframe.my_new_column
)।
যদি ব্যবহারকারী 'yield'
এর মতো একটি নাম প্রবেশ করায়, তবে এটি ব্যাকএন্ড সিস্টেমকে ভেঙে দিতে পারে। ইনপুট পর্যায়ে keyword.iskeyword()
ব্যবহার করে একটি সাধারণ বৈধতা পদক্ষেপ এটি সম্পূর্ণরূপে প্রতিরোধ করতে পারে, যা একটি উন্নত ব্যবহারকারীর অভিজ্ঞতা এবং একটি স্থিতিশীল সিস্টেম প্রদান করে।
উদাহরণ ইনপুট ভ্যালিডেটর:
import keyword
def is_valid_column_name(name):
"""Checks if a user-provided name is a valid identifier."""
if not isinstance(name, str) or not name.isidentifier():
print(f"Error: '{name}' is not a valid identifier format.")
return False
if keyword.iskeyword(name):
print(f"Error: '{name}' is a reserved Python keyword and cannot be used.")
return False
return True
print(is_valid_column_name("sales_total")) # True
print(is_valid_column_name("2023_sales")) # False (starts with a number)
print(is_valid_column_name("for")) # False (is a keyword)
পাইথন সংস্করণ জুড়ে কীওয়ার্ড: বিবর্তন সম্পর্কে একটি নোট
পাইথন ভাষা স্থির নয়; এটি বিকশিত হয়। নতুন সংস্করণগুলির সাথে নতুন বৈশিষ্ট্য এবং কখনও কখনও, নতুন কীওয়ার্ড আসে। keyword
মডিউলের সৌন্দর্য হল যে এটি ভাষার সাথে বিকশিত হয়। আপনি যে কীওয়ার্ডের তালিকা পান তা সর্বদা আপনি যে ইন্টারপ্রেটার ব্যবহার করছেন তার জন্য নির্দিষ্ট হয়।
- পাইথন ২ থেকে ৩: সবচেয়ে বিখ্যাত পরিবর্তনগুলির মধ্যে একটি ছিল
print
এবংexec
। পাইথন ২ এ, তারা স্টেটমেন্টের জন্য কীওয়ার্ড ছিল। পাইথন ৩ এ, তারা বিল্ট-ইন ফাংশন হয়ে ওঠে, তাই তাদেরkeyword.kwlist
থেকে সরিয়ে দেওয়া হয়েছিল। - পাইথন ৩.৫+: অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের প্রবর্তনের সাথে
async
এবংawait
আসে। প্রাথমিকভাবে, তারা প্রসঙ্গ-সংবেদনশীল ছিল, কিন্তু পাইথন ৩.৭ এ, তারা সঠিক (হার্ড) কীওয়ার্ড হয়ে ওঠে। - পাইথন ৩.১০: স্ট্রাকচারাল প্যাটার্ন ম্যাচিং বৈশিষ্ট্য
match
এবংcase
কে প্রসঙ্গ-সংবেদনশীল কীওয়ার্ড হিসাবে যুক্ত করেছে।
এর অর্থ হল keyword
মডিউলের উপর নির্ভরশীল কোড সহজাতভাবে পোর্টেবল এবং ফরোয়ার্ড-কম্প্যাটিবল। পাইথন ৩.১১ এ লেখা একটি কোড জেনারেটর স্বয়ংক্রিয়ভাবে match
এড়ানো শিখবে, যা পাইথন ৩.৮ এ চলমান থাকলে এটি জানতে পারত না। এই গতিশীল প্রকৃতি মডিউলটির সবচেয়ে শক্তিশালী, অথচ অবমূল্যায়িত বৈশিষ্ট্যগুলির মধ্যে একটি।
সেরা অনুশীলন এবং সাধারণ ভুলগুলি
যদিও keyword
মডিউলটি সহজ, তবুও কিছু সেরা অনুশীলন অনুসরণ করতে হবে এবং কিছু ভুল এড়াতে হবে।
করুন: বৈধতার জন্য `keyword.iskeyword()` ব্যবহার করুন
প্রোগ্রামেটিক শনাক্তকারী তৈরি বা বৈধতা জড়িত যেকোনো দৃশ্যের জন্য, এই ফাংশনটি আপনার বৈধতা যুক্তির অংশ হওয়া উচিত। এটি দ্রুত, নির্ভুল এবং এই চেকটি সম্পাদন করার সবচেয়ে পাইথনিক উপায়।
করবেন না: `keyword.kwlist` পরিবর্তন করুন
keyword.kwlist
একটি নিয়মিত পাইথন তালিকা, যার অর্থ আপনি প্রযুক্তিগতভাবে রানটাইমে এটি পরিবর্তন করতে পারেন (যেমন, keyword.kwlist.append("my_keyword")
)। কখনোই এটি করবেন না। তালিকা পরিবর্তন করলে পাইথন পার্সারের উপর কোনো প্রভাব পড়ে না। পার্সারের কীওয়ার্ডের জ্ঞান হার্ড-কোডেড। তালিকা পরিবর্তন করলে শুধুমাত্র keyword
মডিউলের আপনার ইনস্ট্যান্স ভাষার প্রকৃত সিনট্যাক্সের সাথে অসামঞ্জস্যপূর্ণ হয়ে উঠবে, যার ফলে বিভ্রান্তিকর এবং অপ্রত্যাশিত বাগ দেখা দেবে। মডিউলটি পরিদর্শনের জন্য, পরিবর্তনের জন্য নয়।
করুন: কেস সংবেদনশীলতা মনে রাখুন
সর্বদা মনে রাখবেন যে কীওয়ার্ডগুলি কেস-সংবেদনশীল। ব্যবহারকারীর ইনপুট যাচাই করার সময়, নিশ্চিত করুন আপনি কোনো কেস-ফোল্ডিং (যেমন, ছোট হাতের অক্ষরে রূপান্তর করা) করছেন না iskeyword()
দিয়ে পরীক্ষা করার আগে, কারণ এটি 'True'
, 'False'
, এবং 'None'
এর জন্য একটি ভুল ফলাফল দেবে।
করবেন না: কীওয়ার্ডগুলিকে বিল্ট-ইনগুলির সাথে গুলিয়ে ফেলবেন না
যদিও list
বা str
এর মতো বিল্ট-ইন ফাংশন নামগুলিকে ছায়া দেওয়াও একটি খারাপ অনুশীলন, keyword
মডিউল আপনাকে এটি সনাক্ত করতে সাহায্য করবে না। এটি একটি ভিন্ন শ্রেণীর সমস্যা, যা সাধারণত লিন্টার দ্বারা পরিচালিত হয়। keyword
মডিউলটি শুধুমাত্র সংরক্ষিত শব্দগুলির জন্য যা একটি SyntaxError
ঘটাবে।
উপসংহার: পাইথনের বিল্ডিং ব্লক আয়ত্ত করা
keyword
মডিউলটি `asyncio` এর মতো ঝলমলে বা `multiprocessing` এর মতো জটিল নাও হতে পারে, তবে এটি যে কোনো গুরুতর পাইথন ডেভেলপারের জন্য একটি মৌলিক হাতিয়ার। এটি পাইথন সিনট্যাক্সের মূল অংশে — এর সংরক্ষিত শব্দগুলিতে — একটি পরিষ্কার, নির্ভরযোগ্য এবং সংস্করণ-সচেতন ইন্টারফেস প্রদান করে।
keyword.kwlist
এবং keyword.iskeyword()
আয়ত্ত করার মাধ্যমে, আপনি আরও শক্তিশালী, বুদ্ধিমান এবং ত্রুটি-মুক্ত কোড লেখার ক্ষমতা অর্জন করেন। আপনি শক্তিশালী মেটাপ্রোগ্রামিং টুল তৈরি করতে পারেন, নিরাপদ ব্যবহারকারী-মুখী অ্যাপ্লিকেশন তৈরি করতে পারেন এবং পাইথন ভাষার মার্জিত কাঠামোর প্রতি গভীর উপলব্ধি অর্জন করতে পারেন। পরের বার যখন আপনার একটি শনাক্তকারী যাচাই করার বা একটি কোডের অংশ তৈরি করার প্রয়োজন হবে, তখন আপনি ঠিক কোন টুলটি ব্যবহার করবেন তা জানতে পারবেন, যা আপনাকে আত্মবিশ্বাসের সাথে পাইথনের শক্তিশালী ভিত্তির উপর নির্ভর করে তৈরি করতে দেবে।