Python Functions
Python Functions Part-1: Python Function basics
পাইথনে ফাঙ্কশন কি? What is the function in Python?
Python এ function হচ্ছে Program এর এমন একটা code block যা একটা নির্দিষ্ট কার্য সম্পাদনের এবং তা বার বার ব্যবহারের জন্যে ব্যবহৃত হয়। অর্থাৎ function এর মধ্যে এমন কিছু Instruction বা নির্দেশাবলী থাকে যা function ব্যবহারকারী থেকে এক বা একাধিক input নিয়ে এক বা একাধিক output বা result রিটার্ন করার জন্য ব্যবহৃত হয়। তবে অনেক সময় ইনপুট ছাড়াও আমরা আউটপুট রিটার্ন করতে পারি।
ফাঙ্কশনের মাধ্যমে প্রোগ্রামের যে অংশগুলো বার বার আসে সেগুলোকে আমরা পুনরায় ব্যবহারযোগ্য করতে পারি ।
পাইথনে ফাংশনকে অনেকটা আমরা একটা ছোট্ট মেশিনের সাথে তুলনা করতে পারি, অর্থাৎ একবার মেশিনটি তৈরি করবো আর বার বার ব্যবহার করে কিছু একটা কাজ করব বা জিনিষ তৈরি করবো। কিছু তৈরি করতে হলে মেশিনে কিছু ইনপুট দিতে হতে পারে। আবার কিভাবে তৈরি করবে সেটাও মেশিনের মধ্যে যন্ত্রপাতি বসিয়ে সেটআপ করতে হবে। এভাবে বাস্তবে একটা মেশিন তৈরি করাকেই প্রোগ্রামের মধ্যে ফাংশন ডিফাইন করা বলা যেতে পারে।
পাইথনে সাধারণত, program page লোড হওয়ার সাথে সাথেই ডিক্লেয়ার করা function execute হয়না, যতক্ষণ না function কে call করা না হয়।
পাইথনে function কত প্রকার ?
দুই প্রকার :
- Python Pre-built function বা Python language কর্তৃক পূর্ব নির্ধারিত বিভিন্ন library function বা library ছাড়া function
- User/Programmer defined function বা Programmer কর্তৃক নির্ধারিত function
Python Function কিভাবে লিখতে হয়?
- পাইথনে ফাংশন ডিক্লেয়ার করার জন্য def কি-ওয়ার্ডটি দিয়ে শুরু করতে হবে।
- def কি-ওয়ার্ডটির পর ফাঙ্কশনের নামটি letter অথবা underscore দিয়ে শুরু করতে হয়।
- ফাঙ্কশনের নামের শেষে একজোড়া প্রথম বন্ধনী () এরপর একটি colon (:) দিতে হবে।
- ফাংশনকে কল করার বা ব্যবহার করার আগেই সেই ফাংশনকে প্রোগ্রামে ডিফাইন করতে হবে।
- “””docstring””” অর্থাৎ function এর মধ্যে function এর documentation লেখার জন্য ব্যবহৃত হয়। তবে এটা অপশনাল ।
- ফাংশন থেকে যেকোনো ভ্যালু রিটার্ন দেওয়ার জন্য “return” keyword টি ব্যবহার করতে পারি । তবে এটি অপশনাল
- পাইথনে function Case sensitive অর্থাৎ একই নামে কোনো ফাঙ্কশন lowercase এবং uppercase এর কারণে আলাদা function হিসেবে বিবেচিত হবে।
Web Development, Data Science and Big Data Course with Python, MongoDB, MySQL and Django
পাইথনে function লেখার Syntax কি ?
def function_name(parameters): """docstring""" statement(s)
চলুন syntax অনুসারে একটা function তৈরী করে ফেলি :
def greet(name):
"""This function greets to
the person passed in as
parameter"""
print("Hello, " + name + ". Good morning!");
def Greet(name):
"""This function Greets to
the person passed in as
parameter"""
print("Hello, " + name + ". Good morning!");
Greet("Masud");
greet("Sohel");
def greet(name):
"""This function greets to
the person passed in as
parameter"""
print("Hello, " + name + ". Good morning!");
def Greet(name):
"""This function Greets to
the person passed in as
parameter"""
print("Hello, " + name + ". Good morning!");
Greet("Masud");
greet("Sohel");
Python Function এ Docstrings কি?
Function Header এর পরে দুই পাশে তিনটি করে double quote (“””) অথবা single quote (”’) এর মধ্যে অবস্থিত string টিকে docstring বলা হয়। এটা মূলতঃ documentation string এর সংক্ষিপ্ত রূপ। এটি ফাঙ্কশনের সংক্ষিপ্ত ডকুমেন্টেশন লিখার জন্য ব্যবহৃত হয়।
যদিও এটি অপশনাল, তবে প্রোগ্রামিং এ ডকুমেন্টেশন লেখা একটি Good Programming Practice । অনেক সময় এমনও হতে পারে , আপনি আপনার ফাঙ্কশন টি কেন লিখেছেন তা আপনি মনে করতে পারছেন না, এই ধরণের সিচুয়েশন থেকে পরিত্রান পেতে সর্বদা আপনার কোড গুলো ডকুমেন্ট করুন।
ফাঙ্কশনের মধ্যে অবস্থিত কে প্রিন্ট করার জন্য আপনি __doc__ key word টি ব্যবহার করতে পারেন। এক্ষেত্রে syntax টি হবে নিম্নরুপঃ
function_nameOrclass_name.__doc__
এবার নিচের উদাহরণটি দেখুন :
def greet(name):
"""
This function greets to
the person passed in as
a parameter
"""
print("Hello, " + name + ". Good morning!")
print(greet.__doc__)
def greet(name):
"""
This function greets to
the person passed in as
a parameter
"""
print("Hello, " + name + ". Good morning!")
print(greet.__doc__)
Python Function এ return statement কিভাবে কাজ করে?
Python Function এ return statement একটি function এর কাজ শেষ বুঝাতে অথবা সেই function থেকে বের হতে ব্যবহৃত হয়। এবং ঐ Python function টি যেখান থেকে call করা হয়েছিল সেখানে ফিরে যেতে ব্যবহৃত হয়।
Function return এর Syntax
return [expression_list]
চলুন একটা উদাহরণ দেখে নেয়া যাক :
def absolute_value(num):
"""This function returns the absolute
value of the entered number"""
if num >= 0:
return num
else:
return -num
print(absolute_value(2))
print(absolute_value(-4))
def absolute_value(num):
"""This function returns the absolute
value of the entered number"""
if num >= 0:
return num
else:
return -num
print(absolute_value(2))
print(absolute_value(-4))
Web Development, Data Science and Big Data Course with Python, MongoDB, MySQL and Django
Python Function এর মধ্যে Parameter কি এবং argument কি ?
function declaration অথবা define এর সময় parentheses এর মধ্যে ব্যবহৃত একেকটি variable কে একেকটি function parameter বলা হয়। একই ভাবে function calling এর সময় parentheses এর মধ্যে ব্যবহৃত একেকটি variable কে একেকটি function argument বলা হয়।function parameter এবং arguments কিভাবে কাজ করে তা বাজার জন্য নিচের ছবিটি লক্ষ্য করুন :
চলুন function parameter এবং arguments দিয়ে একটা function define এবং call করি।
def getSum(num1, num2):
sum = num1 + num2;
print("Sum of the two numbers ",num1," and ",num2," is : ", sum);
getSum(10, 20);
def getSum(num1, num2):
sum = num1 + num2;
print("Sum of the two numbers ",num1," and ",num2," is : ", sum);
getSum(10, 20);
Python Function এর arguments গুলোকে কয় ভাবে receive বা গ্রহণ করা যায়?
পাইথনে দুই ভাবে argument গুলোকে receive বা গ্রহণ করা যায় :
- সরাসরি function এর ভিন্ন ভিন্ন Parameter দিয়ে ভিন্ন ভিন্ন argument গুলো রিসিভ করা যায়।
- function এর একটা নির্দিষ্ট Parameter দিয়ে সবগুলো argument গুলো রিসিভ করা যায়।
এবার চলুন একটা উদাহরণের মাধ্যমে দেখা যাক কিভাবে সরাসরি function এর ভিন্ন ভিন্ন Parameter দিয়ে ভিন্ন ভিন্ন argument গুলো রিসিভ করা যায়:
def getSum(num1, num2):
sum = num1 + num2;
print("Sum of the two numbers ",num1," and ",num2," is : ", sum);
getSum(10, 20);
def getSum(num1, num2):
sum = num1 + num2;
print("Sum of the two numbers ",num1," and ",num2," is : ", sum);
getSum(10, 20);
লক্ষ্য করুন উপরের উদাহরণে আমরা num1 এবং num2 parameter এর জন্য দুটি আলাদা Argument যথাক্রমে 10 এবং 20 পাঠিয়েছি, যদি কম অথবা বেশি পাঠাই তাহলে নিচের মতো error প্রদর্শন করবে:
def getSum(num1, num2): sum = num1 + num2; print("Sum of the two numbers ",num1," and ",num2," is : ", sum); getSum(10, 20,30);
আবার যদি কম পাঠান, তাহলে নিচের মতো error আসবে:
Python Function এ Keyword Arguments কি?
Python Function এ আপনি যখন প্যারামিটার এর নাম ধরেও argument pass করতে পারেন। আর এই ব্যাপারটিকে বলা হয় Python Keyword Arguments. চলুন একটা উদাহরণে বুঝে নেয়া যাক:
def greet(name,msg): """ This function greets to the person passed in as a parameter """ print("Hello, " + name +" "+ msg) # 2 keyword arguments greet(name = "Moin",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Saiful") #1 positional, 1 keyword argument greet("Rasel", msg = "How do you do?")
তবে এক্ষেত্রে সমস্যা হচ্ছে সবগুলো প্যারামিটার এর নাম ধরেই পাঠাতে হয়, আবার সুবিধা হয় আপনি চাইলে প্যারামিটার swaping করতে পারবেন। লক্ষ্য করুন লাইন নম্বর ১৫ তে আমরা দ্বিতীয় প্যারামিটার এর ভ্যালু প্রথমে পাঠিয়েছি।
তাহলে আমরা আমরা দেখতে পাচ্ছি, আমরা একটি function call চলাকালীন keyword argument গুলোর সাথে argument এর positional কে মিশ্রিত করতে পারি। কিন্তু আমাদের মনে রাখতে হবে যে keyword argument অবশ্যই positional argument গুলোকে ক্রমধারা অনুসরণ করতে হবে।
keyword argument গুলোর পরে যদি কোনো positional argument থাকে , তাহলে ইন্টারপ্রেটর আপনাকে error প্রদর্শন করবে। ঠিক নিচের মতো :
def greet(name,msg): """ This function greets to the person passed in as a parameter """ print("Hello, " + name +" "+ msg) greet(name="Shorif","How do you do?")
উপরের কোডটি আপনাকে নিচের মতকরে error দেখাবে।
Python Function এর একটা নির্দিষ্ট Parameter দিয়ে সবগুলো argument গুলো রিসিভ করার নিয়ম :
পাইথনে function এর একটা নির্দিষ্ট Parameter দিয়ে সবগুলো argument গুলো রিসিভ করতে হলে আপনাকে ফাঙ্কশনের parameter এর সামনে একটা “*” star দিতে হবে। চলুন একটা উদাহরণে বুঝে নেয়া যাক:
def greet(*names):
"""This function greets all
the person in the names tuple."""
# names is a tuple with arguments
for name in names:
print("Hello",name)
greet("Monir","Minhaz","Iqbal","Sharif")
def greet(*names):
"""This function greets all
the person in the names tuple."""
# names is a tuple with arguments
for name in names:
print("Hello",name)
greet("Monir","Minhaz","Iqbal","Sharif")
Web Development, Data Science and Big Data Course with Python, MongoDB, MySQL and Django
Python Module
মডিউল হচ্ছে কিছু কোডের সমষ্টি যেখানে বেশ কিছু ফাংশন, ভ্যারিয়েবল বা ডাটা থাকে এবং যেগুলোকে অ্যাক্সেস করে প্রয়োজনে আরেকটি পাইথন প্রোগ্রামে ব্যবহার করা যায়। পাইথনের অনেক অনেক বিল্ট-ইন মডিউল আছে যেগুলোতে অনেক অনেক প্রয়োজনীয় ফাংশন যুক্ত করাই আছে। নিজেদের জন্য কোন প্রোগ্রাম লেখার সময় চাইলে সেই মডিউল গুলো থেকে উক্ত ফিচার গুলো ব্যবহার করা যায়।
নতুন একটি প্রোগ্রামে এরকম কোন মডিউল ব্যবহার করতে চাইলে প্রথমেই সেটিকে import করে নিতে হবে। import MODULE_NAME এভাবে। এবার এই স্টেটমেন্টের নিচে MODULE_NAME.VAR এভাবে উক্ত মডিউলের ফাংশন বা ভ্যারিয়েবলকে অ্যাক্সেস করা যাবে। একটি উদাহরণ দেখি –
import random
randNum = random.randint(1, 100)
print(randNum)
import random
randNum = random.randint(1, 100)
print(randNum)
উপরের প্রোগ্রামে randNum নামের ভ্যারিয়েবলে আমরা একটি Random Number ষ্টোর করতে চেয়েছি। যে Random নাম্বারটি 1 থেকে 100 এর মধ্যে যেকোনো একটি নম্বর প্রিন্ট করবে । কিন্তু আমরা নিজেরা সেই Random Number তৈরির ফাংশন লেখার প্রয়োজন নেই। বরং আমরা পাইথনের একটি Built In মডিউল random কে Import করে নিয়েছি এবং এর মধ্যে আগেই Define করে রাখা randint ফাংশনকে ব্যবহার করে Random Number পাচ্ছি। এ প্রোগ্রামের আউটপুট এক এক বার এক এক রকম আসবে কিন্তু অবশ্যই এমন একটি ভ্যালু প্রিন্ট হবে যার মান ১ থেকে ১০০ এর মধ্যে।
Specific Module Function Import
আরও একভাবে পাইথনের Module গুলো Import করা যায়। যদি আমাদের কোন একটি মডিউলের নির্দিষ্ট কিছু জিনিষ দরকার হয় তাহলে শুধুমাত্র সেগুলোকে Import করা যায়। যেমন নিচের উদাহরণটি –
from math import pi, sqrt
print(pi)
print(sqrt(25))
from math import pi, sqrt
print(pi)
print(sqrt(25))
উপরের উদাহরণে আমরা math মডিউল থেকে শুধুমাত্র pi কন্সট্যান্টটি এবং sqrt ফাংশনটিকে ইম্পোর্ট করেছি। আর তাই, এই দুটোকে আমরা ব্যবহার করতে পারছি আমাদের প্রোগ্রামে।
Python Module Function Name Aliasing
এখন ধরুন sqrt নামটা আপনার পছন্দ হচ্ছে না। আপনি চাচ্ছেন square root বের করার ফাংশনের নাম আরেকটু সুন্দর হলে ভালো হয়। সেটাও করতে পারেন নিচের মত করে –
from math import sqrt as square_root
print(square_root(25))
from math import sqrt as square_root
print(square_root(25))
পাইথনে Variable Scope কি?
পাইথনে আপনি আপনার সমস্ত কোড জুড়ে যেকোনো জায়গায় Variable Declare বা ঘোষণা করতে পারেন। কোনো Variable যদি আপনি function এর ভিতরে ঘোষণা করেন, তাহলে ঐ Variable এর ব্যবহার Function এর মধ্যেই সীমাবদ্ধ রাখতে হবে। পাইথনে এইটাকে বলা হয় Local Scope, আবার যদি কোনো Variable ফাঙ্কশনের বাহিরে ঘোষণা করেন। তাহলে ঐ Variable সমস্ত কোড জুড়ে ব্যবহার করতে পারবেন এমনকি Funciton এর ভিতরেও ব্যবহার করতে পারবেন।
পাইথনে Variable Scope দুই ধরনের :
- local
- global
প্রথমে চলুন পাইথনে variable এর global scope এর উদহারণ দেখা যাক:
x = 10
def myFunc():
print("Value inside function:",x)
myFunc()
x = 10
def myFunc():
print("Value inside function:",x)
myFunc()
লক্ষ্য করুন: আমাদের variable ফাঙ্কশনের বাহিরে ডিক্লেয়ার করা তারপর ও এটা ফাঙ্কশনের ভিতরে ব্যবহার করা গেছে , এবং ফলাফল ও আসছে।
এবার চলুন পাইথনে variable এর local scope এর উদহারণ দেখা যাক:
def myFunc(): x = 10 print("Value inside function:",x) myFunc() print("Value outside function:",x)
Output
তবে আপনি চাইলে variable কে ফাঙ্কশনের মধ্যে global ডিক্লেয়ার করে , ফাঙ্কশনের বাহিরে variable কে ব্যবহার করতে পারেন। চলুন উদাহরণ দিয়ে বুঝে নেয়া যাক:
def myFunc():
global x
x=20
print("Value inside function:",x)
myFunc()
print("Value outside function:",x)
def myFunc():
global x
x=20
print("Value inside function:",x)
myFunc()
print("Value outside function:",x)
Python Function গুলোর মধ্যে Anonymous এবং lambda function কি?
Anonymous শব্দের অর্থ হচ্ছে নাম বিহীন বা বেনামী, আর anonymous function মানে হচ্ছে নাম বিহীন function বা বেনামী function, সুতরাং পাইথনে যখন কোনো function declare বা ঘোষণা করা হয়, কিন্তু function টির কোনো নাম থাকেনা, পাইথনে সেই function কে anonymous function বলে। আর এই anonymous ফাঙ্কশনকেই আবার lambda function বলে।
সাধারণতঃ পাইথনে function declare করা হয় def কীওয়ার্ড ব্যবহার করে, কিন্তু পাইথনে anonymous ফাংশনগুলি lambda অপারেটর ইউজ করে পাইথনে এক লাইনের lambda ফাংশন লিখতে হয় । lambda এর পর স্পেস দিয়ে Argument দিতে হয়। তারপর কোলন “:” চিহ্ন দিয়ে অ্যারিথমেটিক এক্সপ্রেশন দিতে হয়। lamda ফাংশনকে আপনি চাইলে একটা নাম দেয়ার জন্যএকে যেকোন ভ্যারিয়েবলে অ্যাসাইন করতে পারবেন।
Web Development, Data Science and Big Data Course with Python, MongoDB, MySQL and Django
Python Function গুলোর মধ্যে Lambda/anonymous ফাঙ্কশনের সিনট্যাক্স কি?
lambda arguments: expression
এবার চলুন একটা উদাহরণ দিয়ে বুঝে নেয়া যাক:
# Program to show the use of lambda functions
double = lambda x: x * 2
# Output: 10
print(double(5))
print(lambda x: x * 2)
# Program to show the use of lambda functions
double = lambda x: x * 2
# Output: 10
print(double(5))
print(lambda x: x * 2)
শেষ লাইনে আমরা ফাংশনটাকে কোন ভ্যারিয়েবলে অ্যাসাইন না করেই আমাদের কাজটা সরাসরি করেছি। আসলে Lambda ফাঙ্কশনের সুবিধাটাই এখানে। অনেক সময় শুধু একলাইনের একটা ফাঙ্কশন তৈরির জন্য ফাংশনকে def দিয়ে পয়দা করা অনর্থক মনে হয় (যেমন: যখন আপনি একটা ফাংশনকে আরেকটা ফাংশনের আর্গুমেন্ট হিসাবে পাঠানোর দরকার হয়) তখন Lambda ব্যবহার করতে হয়।
উপরের ফাঙ্কশনটি নাম যুক্ত অবস্থা ঠিক এই রকম ছিল :
def double(x): return x * 2 print(double(5))
আরেকটা উদাহরণ দেখা যাক:
def def_func(lamb, arg1, arg2):
return lamb(arg1, arg2)
print(def_func(lambda a, b : a + b, 10, 20))
def def_func(lamb, arg1, arg2):
return lamb(arg1, arg2)
print(def_func(lambda a, b : a + b, 10, 20))
Python এ Recursion Function কি?
function যখন নিজেই নিজেকে কল করে বা যখন function নিজের মধ্যেই নিজেকে কল করে , Python অথবা যেকোনো Programming Language এর পরিভাষায় একে বলা হয় Recursive Function বা Recursion. নিচের উদাহরণ দেখুন
def recursion(a): if (a<=10): print(a) recursion(a + 1) print(recursion(5))