۷
توابع در پایتون 📞
یاد میگیریم چطور کدهامون رو modular کنیم!
تعریف و فراخوانی توابع
توابع بلوکهای کدی هستند که میتونیم چندین بار ازشون استفاده کنیم:
تعریف تابع ساده
# تعریف تابع
def greet():
print("سلام!")
print("خوش آمدید به دنیای پایتون")
# فراخوانی تابع
greet()
greet()
# تابع با پارامتر
def greet_name(name):
print(f"سلام {name}!")
print("خوش آمدید!")
greet_name("علی")
greet_name("سارا")
# تابع با چند پارامتر
def introduce(name, age):
print(f"من {name} هستم و {age} سال دارم")
introduce("رضا", 25)
مقدار بازگشتی (return)
توابع میتونن مقادیری رو برگردونن که در محاسبات بعدی استفاده بشن:
توابع با مقدار بازگشتی
# تابع با return
def add(a, b):
result = a + b
return result
sum_result = add(5, 3)
print(sum_result) # 8
# میتوان مستقیم return کرد
def multiply(a, b):
return a * b
product = multiply(4, 5)
print(product) # 20
# توابع میتوانند چندین مقدار برگردانند
def calculate(a, b):
sum = a + b
difference = a - b
product = a * b
return sum, difference, product
results = calculate(10, 5)
print(results) # (15, 5, 50)
# unpacking نتیجه
s, d, p = calculate(10, 5)
print(f"جمع: {s}, تفاضل: {d}, ضرب: {p}")
پارامترهای پیشفرض و keyword
پایتون قابلیتهای پیشرفتهای برای پارامترها داره:
پارامترهای پیشرفته
# پارامترهای پیشفرض
def greet(name, message="سلام"):
print(f"{message} {name}!")
greet("علی") # سلام علی!
greet("سارا", "درود") # درود سارا!
# پارامترهای keyword
def create_person(name, age, city):
print(f"نام: {name}, سن: {age}, شهر: {city}")
create_person(age=25, city="تهران", name="رضا")
# پارامترهای arbitrary (تعداد متغیر)
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
print(sum_numbers(1, 2, 3)) # 6
print(sum_numbers(1, 2, 3, 4, 5)) # 15
# پارامترهای keyword arbitrary
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="سارا", age=22, city="مشهد")
Scope (حوزه دید) متغیرها
متغیرها بسته به جایی که تعریف میشن، scope مختلفی دارن:
انواع scope
# Global scope
x = 10
def test_scope():
# Local scope
y = 20
print("Inside function:", x, y) # میتواند به global دسترسی داشته باشد
# تغییر global با استفاده از global
global z
z = 30
test_scope()
print("Outside function:", x, z) # 10, 30
# print(y) # Error! y فقط در تابع وجود دارد
# nonlocal برای nested functions
def outer():
count = 0
def inner():
nonlocal count # به متغیر outer function دسترسی دارد
count += 1
return count
return inner
counter = outer()
print(counter()) # 1
print(counter()) # 2
تمرین! 🧠
تابعی بنویسید که یک عدد بگیرد و بررسی کند که آیا عدد اول است یا نه. سپس از این تابع استفاده کنید و تمام اعداد اول بین 1 تا 100 را پیدا کنید.
جواب تمرین
def is_prime(n):
"""بررسی میکند که عدد اول است یا نه"""
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# پیدا کردن اعداد اول بین 1 تا 100
prime_numbers = []
for num in range(1, 101):
if is_prime(num):
prime_numbers.append(num)
print("اعداد اول بین 1 تا 100:")
print(prime_numbers)