پایتون چیست و چرا از آن استفاده می‌شود؟

پایتون یک زبان برنامه‌نویسی سطح بالا، شی‌گرا و مفسری است که برای توسعه وب، پردازش داده‌ها، یادگیری ماشین و بسیاری از کاربردهای دیگر استفاده می‌شود. این زبان به دلیل سادگی، خوانایی و کتابخانه‌های گسترده‌اش بسیار محبوب است.

تفاوت بین لیست و تاپل در پایتون چیست؟

لیست‌ها (Lists) و تاپل‌ها (Tuples) هر دو ساختارهای داده‌ای در پایتون هستند، اما تفاوت‌هایی دارند:

  • لیست‌ها قابل تغییر (mutable) هستند، به این معنی که می‌توانند بعد از تعریف تغییر کنند.
  • تاپل‌ها غیرقابل تغییر (immutable) هستند، یعنی پس از تعریف، نمی‌توانند تغییر کنند.
  • لیست‌ها معمولاً برای داده‌هایی که نیاز به تغییر دارند استفاده می‌شوند، در حالی که تاپل‌ها بیشتر برای داده‌هایی که ثابت هستند، مناسب هستند.


چگونه یک متغیر در پایتون تعریف می‌شود؟

برای تعریف یک متغیر در پایتون، کافی است نام متغیر را بنویسید و مقداری را به آن اختصاص دهید. به عنوان مثال:

x = 10

در اینجا، متغیر x تعریف شده است و مقدار 10 به آن اختصاص داده شده است.

دستور شرطی if در پایتون چگونه کار می‌کند؟

دستور if در پایتون برای اجرای کدی استفاده می‌شود که وابسته به یک شرط خاص است. اگر شرط درست (True) باشد، بلوک کد اجرا می‌شود. به مثال زیر توجه کنید:


x = 5
if x > 3:
 print("x بزرگتر از 3 است")

در اینجا اگر مقدار x بیشتر از 3 باشد، متن "x بزرگتر از 3 است" چاپ خواهد شد.

نحوه استفاده از حلقه for در پایتون چگونه است؟

حلقه for در پایتون برای تکرار روی یک توالی (مانند لیست، رشته یا دامنه) استفاده می‌شود. به عنوان مثال:


for i in range(5):
 print(i)

این حلقه اعداد 0 تا 4 را به ترتیب چاپ می‌کند.

تفاوت بین لیست و مجموعه (set) در پایتون چیست؟

لیست‌ها (Lists) و مجموعه‌ها (Sets) هر دو برای ذخیره مجموعه‌ای از داده‌ها استفاده می‌شوند، اما تفاوت‌هایی دارند:

  • لیست‌ها مرتب (ordered) هستند، اما مجموعه‌ها نامرتب (unordered) هستند.
  • لیست‌ها می‌توانند مقادیر تکراری داشته باشند، اما مجموعه‌ها فقط مقادیر یکتا (unique) را ذخیره می‌کنند.
  • در مجموعه‌ها عملیات جستجو سریع‌تر از لیست‌ها انجام می‌شود، زیرا مجموعه‌ها از ساختار داده‌ای هش استفاده می‌کنند.


تابع lambda چیست و چگونه استفاده می‌شود؟

تابع lambda در پایتون یک تابع ناشناس و کوتاه است که معمولاً برای انجام عملیات ساده و سریع استفاده می‌شود. این تابع می‌تواند هر تعداد آرگومان بگیرد اما فقط یک عبارت را برمی‌گرداند. مثال:


add = lambda x, y: x + y
print(add(5, 3)) # خروجی: 8

در اینجا lambda یک تابع ساده ایجاد می‌کند که دو عدد را با هم جمع می‌کند.

مفهوم self در کلاس‌ها چیست؟

در پایتون، self به شیئی اشاره می‌کند که متد کلاس روی آن اعمال می‌شود. این آرگومان به طور خودکار به متدهای نمونه پاس داده می‌شود و به متدها اجازه می‌دهد به متغیرها و متدهای شیء دسترسی پیدا کنند. مثال:


class MyClass:
 def __init__(self, name):
 self.name = name
 
 def greet(self):
 return f"Hello, {self.name}!"

obj = MyClass("Alice")
print(obj.greet()) # خروجی: Hello, Alice!

چگونه یک کلاس جدید در پایتون تعریف می‌شود؟

برای تعریف یک کلاس جدید در پایتون از کلمه کلیدی class استفاده می‌شود. در اینجا یک مثال ساده آورده شده است:


class MyClass:
 def __init__(self, name):
 self.name = name
 
 def greet(self):
 return f"Hello, {self.name}!"

obj = MyClass("Bob")
print(obj.greet()) # خروجی: Hello, Bob!

این کلاس دارای یک متغیر نمونه name و یک متد greet است.

تفاوت بین is و == در پایتون چیست؟

عملگر == برای مقایسه مقادیر دو شیء استفاده می‌شود و بررسی می‌کند که آیا مقادیر آن‌ها برابر هستند یا نه. اما عملگر is برای بررسی هویت دو شیء استفاده می‌شود، یعنی بررسی می‌کند که آیا دو متغیر به یک شیء در حافظه اشاره می‌کنند یا نه. مثال:


a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a == b) # خروجی: True (مقدارها برابرند)
print(a is b) # خروجی: False (اشاره به شیء متفاوت)
print(a is c) # خروجی: True (اشاره به همان شیء)

چگونه یک فایل در پایتون باز و خوانده می‌شود؟

برای باز کردن و خواندن یک فایل در پایتون از تابع open استفاده می‌شود. حالت پیش‌فرض 'r' برای خواندن است. مثال:


with open("example.txt", "r") as file:
 content = file.read()
 print(content)

در اینجا از ساختار with استفاده شده که به صورت خودکار فایل را پس از اتمام عملیات می‌بندد.

روش‌های مدیریت استثناها در پایتون چیست؟

برای مدیریت استثناها در پایتون از بلوک‌های try, except, else و finally استفاده می‌شود. مثال:


try:
 x = 10 / 0
except ZeroDivisionError as e:
 print("خطا: تقسیم بر صفر")
else:
 print("عملیات موفق بود")
finally:
 print("پایان عملیات")

در اینجا:

  • try: کدی که ممکن است خطا ایجاد کند.
  • except: مدیریت خطا.
  • else: اجرا می‌شود اگر هیچ خطایی رخ ندهد.
  • finally: همیشه اجرا می‌شود، چه خطا رخ دهد چه نه.


مفهوم دیکشنری در پایتون چیست؟

دیکشنری (Dictionary) در پایتون یک ساختار داده‌ای است که مقادیر را به صورت جفت کلید-مقدار (key-value) ذخیره می‌کند. هر کلید باید یکتا باشد و از نوع غیرقابل تغییر (immutable) باشد، در حالی که مقادیر می‌توانند هر نوعی باشند. مثال:


my_dict = {"name": "Alice", "age": 25, "city": "Paris"}
print(my_dict["name"]) # خروجی: Alice

در اینجا، "name" یک کلید و "Alice" مقدار متناظر آن است.

چگونه یک کد در پایتون به طور غیرهمزمان اجرا می‌شود؟

برای اجرای غیرهمزمان کد در پایتون از کتابخانه asyncio استفاده می‌شود. کلمات کلیدی async و await برای تعریف توابع غیرهمزمان و مدیریت وظایف استفاده می‌شوند. مثال:


import asyncio

async def say_hello():
 print("Hello")
 await asyncio.sleep(1)
 print("World")

asyncio.run(say_hello())

این کد به صورت غیرهمزمان اجرا می‌شود و برای یک ثانیه بین دو چاپ صبر می‌کند.

چه تفاوتی بین متدهای instance و متدهای class وجود دارد؟

متدهای instance و class در پایتون برای اهداف مختلفی استفاده می‌شوند:

  • متدهای instance: به نمونه (instance) خاصی از کلاس وابسته هستند و به طور خودکار آرگومان self را دریافت می‌کنند. این متدها می‌توانند به متغیرها و متدهای نمونه دسترسی داشته باشند.
  • متدهای class: به کل کلاس وابسته هستند و از کلمه کلیدی @classmethod برای تعریف آن‌ها استفاده می‌شود. این متدها به طور خودکار آرگومان cls (اشاره به خود کلاس) را دریافت می‌کنند و معمولاً برای عملیات مربوط به سطح کلاس استفاده می‌شوند.


مثال:


class MyClass:
 class_variable = "I am a class variable"
 
 def __init__(self, name):
 self.name = name # متغیر نمونه
 
 def instance_method(self):
 return f"This is an instance method for {self.name}"
 
 @classmethod
 def class_method(cls):
 return f"This is a class method and {cls.class_variable}"

obj = MyClass("Alice")
print(obj.instance_method()) # خروجی: This is an instance method for Alice
print(MyClass.class_method()) # خروجی: This is a class method and I am a class variable

مفهوم جنریتورها در پایتون چیست؟

جنریتورها (Generators) در پایتون نوعی تابع هستند که به جای بازگرداندن همه مقادیر به طور همزمان، مقادیر را به صورت تدریجی و در هنگام نیاز تولید می‌کنند. جنریتورها از کلمه کلیدی yield استفاده می‌کنند. مثال:


def my_generator():
 yield 1
 yield 2
 yield 3

gen = my_generator()
for value in gen:
 print(value)

خروجی:
1
2
3

این روش حافظه کمتری نسبت به لیست‌ها استفاده می‌کند، زیرا مقادیر در صورت نیاز تولید می‌شوند.

نحوه استفاده از ماژول math در پایتون چگونه است؟

ماژول math شامل توابع و ثابت‌های ریاضی است که برای انجام محاسبات پیشرفته استفاده می‌شود. مثال:


import math

# محاسبه جذر
print(math.sqrt(16)) # خروجی: 4.0

# مقدار عدد پی
print(math.pi) # خروجی: 3.141592653589793

# محاسبه سینوس زاویه
print(math.sin(math.radians(90))) # خروجی: 1.0

فرق تابع map() و filter() چیست؟

توابع map() و filter() هر دو توابعی هستند که روی توالی‌ها (مانند لیست) اعمال می‌شوند، اما کاربرد متفاوتی دارند:

  • map(): یک تابع را روی تمام عناصر یک توالی اعمال می‌کند و یک شیء جدید تولید می‌کند که مقادیر تغییر یافته را شامل می‌شود. مثال:
    
    numbers = [1, 2, 3, 4]
    squared = map(lambda x: x**2, numbers)
    print(list(squared)) # خروجی: [1, 4, 9, 16]
     
  • filter(): فقط عناصری از توالی را برمی‌گرداند که شرط خاصی را برآورده کنند. مثال:
    
    numbers = [1, 2, 3, 4]
    even = filter(lambda x: x % 2 == 0, numbers)
    print(list(even)) # خروجی: [2, 4]
     


چگونه داده‌ها را از یک API در پایتون دریافت می‌کنید؟

برای دریافت داده‌ها از یک API در پایتون معمولاً از ماژول requests استفاده می‌شود. ابتدا یک درخواست HTTP به API ارسال می‌شود و سپس داده‌ها دریافت می‌شوند. مثال:


import requests

response = requests.get("https://api.example.com/data")
if response.status_code == 200:
 data = response.json() # تبدیل پاسخ JSON به دیکشنری پایتون
 print(data)
else:
 print(f"خطا: {response.status_code}")

چه تفاوتی بین range() و xrange() در پایتون 2 وجود دارد؟

در پایتون 2:

  • range(): یک لیست کامل از اعداد تولید می‌کند و آن را در حافظه ذخیره می‌کند.
  • xrange(): یک شیء ژنراتور تولید می‌کند که اعداد را به صورت تدریجی و در هنگام نیاز تولید می‌کند و از حافظه کمتری استفاده می‌کند.

مثال:


# range()
nums = range(5)
print(nums) # خروجی: [0, 1, 2, 3, 4]

# xrange()
nums = xrange(5)
for num in nums:
 print(num) # اعداد 0 تا 4 را چاپ می‌کند

در پایتون 3، تنها range() وجود دارد که مانند xrange() عمل می‌کند و حافظه کمتری مصرف می‌کند.

پایتون چگونه از مدیریت حافظه استفاده می‌کند؟

پایتون از یک سیستم مدیریت حافظه خودکار استفاده می‌کند که شامل موارد زیر است:

  • مدیریت حافظه پویا: اشیاء در حافظه هنگام اجرا تخصیص داده می‌شوند.
  • Garbage Collection (زباله‌روب): اشیائی که دیگر استفاده نمی‌شوند به طور خودکار شناسایی و از حافظه آزاد می‌شوند.
  • Reference Counting: پایتون برای هر شیء تعداد ارجاعات به آن را نگه می‌دارد. اگر این تعداد به صفر برسد، شیء حذف می‌شود.

مثال برای ایجاد یک شیء و حذف آن:


import gc

x = [1, 2, 3] # تخصیص حافظه
del x # حذف مرجع
gc.collect() # اجرای دستی Garbage Collection

مفهوم Decorators در پایتون چیست؟

Decorators در پایتون توابعی هستند که برای تغییر یا گسترش رفتار توابع یا کلاس‌های دیگر استفاده می‌شوند. آن‌ها به صورت توابعی تعریف می‌شوند که یک تابع را به عنوان ورودی گرفته و یک تابع یا شیء جدید بازمی‌گردانند. مثال:


def my_decorator(func):
 def wrapper():
 print("قبل از اجرای تابع")
 func()
 print("بعد از اجرای تابع")
 return wrapper

@my_decorator
def say_hello():
 print("سلام!")

say_hello()

خروجی:
قبل از اجرای تابع
سلام!
بعد از اجرای تابع

چگونه از threading در پایتون استفاده می‌کنید؟

ماژول threading در پایتون برای اجرای کدها به صورت موازی در چندین رشته (Thread) استفاده می‌شود. مثال:


import threading
import time

def print_numbers():
 for i in range(5):
 print(i)
 time.sleep(1)

# ایجاد و شروع یک Thread
thread = threading.Thread(target=print_numbers)
thread.start()

# اجرای کد اصلی
print("در حال اجرا در رشته اصلی")

در اینجا، تابع print_numbers در یک رشته جداگانه اجرا می‌شود، در حالی که کد اصلی به اجرا ادامه می‌دهد.

تفاوت بین تابع global و nonlocal چیست؟

توابع global و nonlocal برای مدیریت متغیرها در سطوح مختلف حوزه‌های (scope) پایتون استفاده می‌شوند:

  • global: برای تعریف و استفاده از متغیرهایی که در حوزه سراسری (global) تعریف شده‌اند.
  • nonlocal: برای استفاده از متغیرهایی که در حوزه غیرمحلی (enclosing) اما نه سراسری تعریف شده‌اند.

مثال:


# استفاده از global
x = 10
def modify_global():
 global x
 x = 20
modify_global()
print(x) # خروجی: 20

# استفاده از nonlocal
def outer_function():
 y = 5
 def inner_function():
 nonlocal y
 y = 10
 inner_function()
 print(y)

outer_function() # خروجی: 10

در اینجا:

  • global متغیر x را در حوزه سراسری تغییر می‌دهد.
  • nonlocal متغیر y را در حوزه خارجی outer_function تغییر می‌دهد.


چگونه می‌توانید نوع داده یک متغیر را در پایتون تغییر دهید؟

برای تغییر نوع داده یک متغیر در پایتون، می‌توانید از توابع داخلی مانند int()، float()، str() و ... استفاده کنید. مثال:


x = "123" # نوع اولیه: رشته
y = int(x) # تبدیل به عدد صحیح
z = float(x) # تبدیل به عدد اعشاری
print(type(y)) # خروجی: 
print(type(z)) # خروجی: 

چگونه از دستورات شرطی در لیست‌ها استفاده می‌شود؟

دستورات شرطی می‌توانند در لیست‌ها با استفاده از List Comprehensions استفاده شوند. مثال:


numbers = [1, 2, 3, 4, 5]
even_numbers = [n for n in numbers if n % 2 == 0]
print(even_numbers) # خروجی: [2, 4]

در اینجا، شرط if n % 2 == 0 تنها اعداد زوج را به لیست جدید اضافه می‌کند.

نحوه استفاده از دیکشنری‌ها برای جستجو در پایتون چیست؟

در دیکشنری‌ها می‌توانید از کلیدها برای جستجو و دسترسی به مقادیر استفاده کنید. مثال:


my_dict = {"name": "Alice", "age": 25, "city": "Paris"}
print(my_dict["name"]) # خروجی: Alice

# استفاده از get() برای جلوگیری از خطا
print(my_dict.get("job", "مقداری وجود ندارد")) # خروجی: مقداری وجود ندارد

در اینجا:

  • my_dict["name"] مقدار متناظر با کلید "name" را برمی‌گرداند.
  • get() امن‌تر است، زیرا در صورت عدم وجود کلید، مقدار پیش‌فرض برمی‌گرداند.


تابع zip() در پایتون چیست؟

تابع zip() دو یا چند لیست یا توالی را با هم ترکیب می‌کند و یک شیء قابل تکرار از جفت‌های متناظر برمی‌گرداند. مثال:


list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
zipped = zip(list1, list2)
print(list(zipped)) # خروجی: [(1, 'a'), (2, 'b'), (3, 'c')]

تابع zip() تا زمانی که کوتاه‌ترین لیست تمام شود، کار می‌کند.

چگونه در پایتون یک متغیر ثابت تعریف می‌کنید؟

در پایتون متغیرهای ثابت به طور رسمی وجود ندارند، اما معمولاً برای تعریف آن‌ها از نام‌های بزرگ (که در کنوانسیون‌های پایتون به عنوان ثابت‌ها شناخته می‌شوند) استفاده می‌شود. همچنین، می‌توانید از ماژول const برای پیاده‌سازی متغیرهای ثابت استفاده کنید، هرچند که این به طور پیش‌فرض در پایتون وجود ندارد. مثال:


MY_CONSTANT = 100 # متغیر ثابت با نام بزرگ
# توصیه می‌شود که به آن تغییر ندهید

مفهوم وراثت (Inheritance) در پایتون چیست؟

وراثت (Inheritance) به این معناست که یک کلاس می‌تواند ویژگی‌ها و رفتارهای یک کلاس دیگر را به ارث ببرد. این ویژگی در پایتون به شما این امکان را می‌دهد که کد را دوباره استفاده کرده و از کلاس‌های پایه برای ایجاد کلاس‌های جدید استفاده کنید. مثال:


class Animal:
 def speak(self):
 print("Animal speaks")

class Dog(Animal):
 def speak(self):
 print("Woof!")

my_dog = Dog()
my_dog.speak() # خروجی: Woof!

در اینجا، Dog از کلاس Animal وراثت می‌کند و می‌تواند متد speak را دوباره تعریف کند.

متد __init__ در کلاس‌ها چه کاربردی دارد؟

متد __init__ در پایتون یک متد ویژه است که هنگام ایجاد یک شیء جدید از کلاس به طور خودکار فراخوانی می‌شود. این متد معمولاً برای مقداردهی اولیه به ویژگی‌های شیء استفاده می‌شود. مثال:


class Person:
 def __init__(self, name, age):
 self.name = name
 self.age = age

person1 = Person("Alice", 30)
print(person1.name) # خروجی: Alice
print(person1.age) # خروجی: 30

در اینجا، __init__ برای مقداردهی به ویژگی‌های name و age هنگام ایجاد شیء استفاده می‌شود.

تفاوت بین deepcopy و shallow copy چیست؟

تفاوت بین deepcopy و shallow copy به نحوه کپی‌کردن اشیاء پیچیده مانند لیست‌ها یا دیکشنری‌ها مربوط می‌شود:

  • shallow copy: تنها سطح اول داده‌ها را کپی می‌کند. این بدین معنی است که اگر در داخل شیء کپی شده تغییراتی اعمال شود که به اشیاء داخلی اشاره می‌کند، این تغییرات در شیء اصلی نیز تأثیر خواهد گذاشت.
  • deepcopy: یک کپی عمیق از شیء ایجاد می‌کند، به این معنی که تمام اشیاء داخلی نیز به طور جداگانه کپی می‌شوند، و بنابراین تغییرات در کپی تأثیری بر شیء اصلی نخواهد داشت.

مثال:


import copy

# Shallow copy
original = [[1, 2], [3, 4]]
shallow_copy = copy.copy(original)
shallow_copy[0][0] = 100
print(original) # خروجی: [[100, 2], [3, 4]]

# Deep copy
deep_copy = copy.deepcopy(original)
deep_copy[0][0] = 200
print(original) # خروجی: [[100, 2], [3, 4]]
print(deep_copy) # خروجی: [[200, 2], [3, 4]]

در اینجا:

  • shallow_copy تغییرات در شیء اصلی را تحت تأثیر قرار می‌دهد.
  • deep_copy به طور مستقل از شیء اصلی کپی شده و تغییرات روی کپی تأثیری ندارد.


چگونه می‌توان از کلاس‌های انتزاعی در پایتون استفاده کرد؟

کلاس‌های انتزاعی در پایتون با استفاده از ماژول abc و متد ABC تعریف می‌شوند. این کلاس‌ها برای تعریف واسط‌ها یا طرح‌های عمومی برای کلاس‌های فرزند استفاده می‌شوند. کلاس‌های انتزاعی نمی‌توانند به طور مستقیم شیء ایجاد کنند، بلکه کلاس‌های فرزند باید متدهای انتزاعی را پیاده‌سازی کنند. مثال:


from abc import ABC, abstractmethod

class Animal(ABC):
 @abstractmethod
 def speak(self):
 pass

class Dog(Animal):
 def speak(self):
 print("Woof!")

my_dog = Dog()
my_dog.speak() # خروجی: Woof!

در اینجا، کلاس Animal یک کلاس انتزاعی است و متد speak باید در کلاس Dog پیاده‌سازی شود.

مفهوم yield در پایتون چیست؟

در پایتون، yield برای تبدیل یک تابع به یک ژنراتور (Generator) استفاده می‌شود. این تابع به جای بازگشت یک مقدار، به طور پیوسته مقادیر را در حین اجرای خود تولید می‌کند. زمانی که تابع yield فراخوانی می‌شود، وضعیت تابع حفظ می‌شود و اجرا از همان نقطه ادامه می‌یابد. مثال:


def my_generator():
 yield 1
 yield 2
 yield 3

gen = my_generator()
for value in gen:
 print(value)

خروجی:
1
2
3

در اینجا، my_generator مقادیر 1، 2 و 3 را به صورت پیوسته بازمی‌گرداند.

نحوه کار با ماژول os برای مدیریت فایل‌ها چیست؟

ماژول os در پایتون برای تعامل با سیستم‌عامل و مدیریت فایل‌ها استفاده می‌شود. این ماژول قابلیت‌هایی مانند ایجاد، حذف و تغییر نام فایل‌ها و دایرکتوری‌ها را فراهم می‌کند. مثال:


import os

# ایجاد یک دایرکتوری
os.mkdir("my_directory")

# تغییر نام فایل
os.rename("old_name.txt", "new_name.txt")

# حذف یک فایل
os.remove("my_file.txt")

# لیست کردن فایل‌ها در یک دایرکتوری
files = os.listdir(".")
print(files)

پایتون چگونه مدیریت استثنا (exceptions) را انجام می‌دهد؟

پایتون از ساختار try، except، else و finally برای مدیریت استثناها استفاده می‌کند. در این ساختار، کد داخل بلوک try اجرا می‌شود و اگر استثنایی رخ دهد، کد داخل بلوک except اجرا می‌شود. بلوک else در صورت عدم وقوع استثنا و بلوک finally همیشه اجرا می‌شود. مثال:


try:
 x = 10 / 0 # ایجاد استثنا
except ZeroDivisionError:
 print("تقسیم بر صفر!")
else:
 print("هیچ استثنایی رخ نداد.")
finally:
 print("این همیشه اجرا می‌شود.")

خروجی:
تقسیم بر صفر!
این همیشه اجرا می‌شود.

در اینجا، خطای ZeroDivisionError توسط بلوک except مدیریت می‌شود و بلوک finally همیشه اجرا می‌شود.

چگونه می‌توانید یک برنامه پایتون را از خط فرمان اجرا کنید؟

برای اجرای یک برنامه پایتون از خط فرمان، ابتدا باید به دایرکتوری که فایل پایتون در آن قرار دارد بروید و سپس دستور زیر را وارد کنید:


python your_script.py

در اینجا، your_script.py نام فایل پایتون شما است. اگر از پایتون 3 استفاده می‌کنید و پایتون 2 نیز نصب است، ممکن است نیاز به استفاده از python3 به جای python داشته باشید:


python3 your_script.py

تفاوت بین پایتون 2 و 3 چیست؟

پایتون 2 و پایتون 3 تفاوت‌های زیادی دارند که شامل موارد زیر می‌شود:

  • چاپ: در پایتون 2، دستور print یک دستور است، اما در پایتون 3، print() یک تابع است.
  • تقسیم اعداد: در پایتون 2، تقسیم دو عدد صحیح یک عدد صحیح خواهد بود (مثال: 3 / 2 = 1)، اما در پایتون 3، تقسیم دقیقاً یک عدد اعشاری خواهد بود (مثال: 3 / 2 = 1.5).
  • Unicode: در پایتون 3، تمام رشته‌ها به طور پیش‌فرض Unicode هستند، در حالی که در پایتون 2، باید از پیشوند u استفاده کرد.

به طور کلی، پایتون 3 ویژگی‌های بهبود یافته و پشتیبانی از انواع داده جدید را ارائه می‌دهد و پشتیبانی از پایتون 2 از سال 2020 پایان یافته است.

چگونه یک محیط مجازی (virtual environment) در پایتون ایجاد می‌شود؟

برای ایجاد یک محیط مجازی در پایتون، از ابزار venv استفاده می‌شود. دستور زیر را برای ایجاد یک محیط مجازی جدید وارد کنید:


python -m venv myenv

در اینجا، myenv نام محیط مجازی شما است. پس از ایجاد محیط مجازی، برای فعال کردن آن از دستور زیر استفاده کنید:


# در ویندوز:
myenv\Scripts\activate

# در لینوکس یا مک:
source myenv/bin/activate

برای غیرفعال کردن محیط مجازی از دستور deactivate استفاده کنید:


deactivate

استفاده از بسته‌های خارجی در پایتون چگونه است؟

برای استفاده از بسته‌های خارجی در پایتون، می‌توانید از ابزار pip استفاده کنید. برای نصب یک بسته جدید، دستور زیر را وارد کنید:


pip install package_name

برای مثال، برای نصب بسته requests، دستور زیر را وارد می‌کنید:


pip install requests

برای مشاهده بسته‌های نصب‌شده، از دستور زیر استفاده کنید:


pip list

همچنین می‌توانید از فایل requirements.txt برای نصب مجموعه‌ای از بسته‌ها استفاده کنید:


pip install -r requirements.txt

تفاوت بین open() و with open() چیست؟

هر دو روش open() و with open() برای باز کردن فایل‌ها در پایتون استفاده می‌شوند، اما تفاوت اصلی در نحوه مدیریت منابع است:

  • open(): این روش فایل را باز می‌کند و شما باید خودتان فایل را بسته (close) کنید. اگر فراموش کنید که فایل را ببندید، ممکن است منابع به درستی آزاد نشوند.
  • with open(): این روش از مدیریت زمینه (context management) استفاده می‌کند. با استفاده از with، پس از اتمام عملیات بر روی فایل، فایل به طور خودکار بسته می‌شود، حتی اگر خطایی در هنگام پردازش رخ دهد.

مثال:


# open()
f = open('file.txt', 'r')
content = f.read()
f.close() # نیاز به بستن دستی فایل

# with open()
with open('file.txt', 'r') as f:
 content = f.read() # فایل به طور خودکار بسته می‌شود پس از اتمام عملیات

چگونه متغیرهای محیطی (environment variables) را در پایتون می‌خوانید؟

برای خواندن متغیرهای محیطی در پایتون می‌توانید از ماژول os استفاده کنید. برای دریافت مقدار یک متغیر محیطی خاص از تابع os.environ.get() استفاده می‌شود. مثال:


import os

# خواندن متغیر محیطی
value = os.environ.get('MY_ENV_VARIABLE')
print(value)

اگر متغیر محیطی مورد نظر وجود نداشته باشد، get() مقدار None را باز می‌گرداند، مگر اینکه مقدار پیش‌فرضی تعیین کنید.

ویژگی‌های اصلی زبان پایتون چیست؟

پایتون یک زبان برنامه‌نویسی سطح بالا با ویژگی‌های منحصر به فرد است که شامل موارد زیر می‌شود:

  • سینتکس ساده و خوانا: پایتون سینتکسی ساده و نزدیک به زبان طبیعی دارد که آن را برای مبتدیان مناسب می‌کند.
  • کتابخانه‌های غنی: پایتون دارای مجموعه بزرگی از کتابخانه‌ها و فریمورک‌ها است که کار با انواع مختلفی از برنامه‌ها را آسان می‌سازد.
  • چندمنظوره: پایتون می‌تواند برای توسعه وب، داده‌کاوی، یادگیری ماشین، اتوماسیون، برنامه‌های دسکتاپ و غیره استفاده شود.
  • پشتیبانی از شی‌گرایی و برنامه‌نویسی تابعی: پایتون از هر دو رویکرد شی‌گرایی و برنامه‌نویسی تابعی پشتیبانی می‌کند.
  • مدیریت خودکار حافظه: پایتون از جمع‌آوری زباله (garbage collection) برای مدیریت حافظه استفاده می‌کند.

چگونه از فریمورک Flask در پایتون استفاده می‌کنید؟

Flask یک فریمورک وب سبک برای پایتون است که برای ایجاد وب‌سایت‌ها و API‌ها استفاده می‌شود. برای استفاده از Flask، ابتدا باید آن را نصب کنید:


pip install flask

پس از نصب، می‌توانید یک اپلیکیشن ساده با استفاده از Flask ایجاد کنید:


from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
 return 'Hello, World!'

if __name__ == '__main__':
 app.run(debug=True)

در اینجا، Flask یک اپلیکیشن وب ایجاد می‌کند که به درخواست‌ها در مسیر / پاسخ می‌دهد و عبارت "Hello, World!" را برمی‌گرداند. پس از اجرای این کد، شما می‌توانید با مراجعه به http://127.0.0.1:5000 در مرورگر، صفحه وب را مشاهده کنید.

نحوه پیاده‌سازی الگوریتم‌های جستجو در پایتون چیست؟

در پایتون می‌توان الگوریتم‌های جستجو مانند جستجوی خطی و باینری را پیاده‌سازی کرد. در جستجوی خطی، هر عنصر لیست به ترتیب بررسی می‌شود، اما در جستجوی باینری لیست باید مرتب باشد و جستجو به صورت تقسیم و غلبه (divide and conquer) انجام می‌شود.

جستجوی خطی:


def linear_search(arr, target):
 for i in range(len(arr)):
 if arr[i] == target:
 return i # بازگشت اندیس
 return -1 # عنصر یافت نشد

arr = [1, 2, 3, 4, 5]
print(linear_search(arr, 3)) # خروجی: 2

جستجوی باینری:


def binary_search(arr, target):
 low = 0
 high = len(arr) - 1
 while low <= high:
 mid = (low + high) // 2
 if arr[mid] == target:
 return mid
 elif arr[mid] < target:
 low = mid + 1
 else:
 high = mid - 1
 return -1 # عنصر یافت نشد

arr = [1, 2, 3, 4, 5]
print(binary_search(arr, 3)) # خروجی: 2

مفهوم دستورات continue و break در حلقه‌ها چیست؟

دستورات continue و break در پایتون برای کنترل جریان اجرای حلقه‌ها استفاده می‌شوند:

  • continue: این دستور باعث می‌شود که اجرای حلقه به تکرار بعدی منتقل شود و کدهای بعدی درون حلقه نادیده گرفته شوند.
  • break: این دستور باعث می‌شود که حلقه به طور کامل خاتمه یابد و اجرای برنامه به بیرون از حلقه منتقل شود.

مثال:


for i in range(5):
 if i == 2:
 continue # از چاپ 2 صرف‌نظر می‌کند
 if i == 4:
 break # حلقه را متوقف می‌کند
 print(i)

خروجی:
0
1
3

چگونه داده‌های رشته‌ای را در پایتون قالب‌بندی می‌کنید؟

در پایتون می‌توان داده‌های رشته‌ای را با استفاده از روش‌های مختلف قالب‌بندی کرد:

  • استفاده از f-strings (پایتون 3.6 و بالاتر):
  • 
    name = "Alice"
    age = 25
    print(f"My name is {name} and I am {age} years old.")
    
  • استفاده از str.format():
  • 
    name = "Alice"
    age = 25
    print("My name is {} and I am {} years old.".format(name, age))
    
  • استفاده از عملگر %:
  • 
    name = "Alice"
    age = 25
    print("My name is %s and I am %d years old." % (name, age))
    

چگونه از ماژول datetime برای کار با تاریخ و زمان استفاده می‌کنید؟

ماژول datetime در پایتون برای کار با تاریخ و زمان استفاده می‌شود. برای کار با تاریخ و زمان می‌توانید از کلاس‌های datetime و date استفاده کنید:


import datetime

# دریافت تاریخ و زمان فعلی
now = datetime.datetime.now()
print("Current date and time:", now)

# دریافت فقط تاریخ
today = datetime.date.today()
print("Today's date:", today)

# ایجاد یک تاریخ خاص
custom_date = datetime.date(2024, 12, 25)
print("Custom date:", custom_date)

# قالب‌بندی تاریخ
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print("Formatted date:", formatted_date)

نحوه نوشتن تست‌های واحد (unit tests) در پایتون چیست؟

برای نوشتن تست‌های واحد در پایتون می‌توان از ماژول unittest استفاده کرد. این ماژول به شما اجازه می‌دهد تا تست‌هایی برای بررسی صحت عملکرد کد بنویسید.

مثال:


import unittest

def add(a, b):
 return a + b

class TestMathFunctions(unittest.TestCase):
 def test_add(self):
 self.assertEqual(add(2, 3), 5) # تست جمع دو عدد
 self.assertEqual(add(-1, 1), 0) # تست جمع با اعداد منفی

if __name__ == '__main__':
 unittest.main()

برای اجرای تست‌ها کافیست اسکریپت را اجرا کنید. اگر همه تست‌ها موفقیت‌آمیز باشند، هیچ خطایی نمایش داده نمی‌شود.

تفاوت بین تابع sorted() و متد sort() در پایتون چیست؟

هر دو روش sorted() و sort() برای مرتب‌سازی داده‌ها در پایتون استفاده می‌شوند، اما تفاوت‌هایی دارند:

  • sorted(): یک تابع است که یک کپی مرتب‌شده از داده‌ها را بازمی‌گرداند و اصل داده‌ها دست‌نخورده باقی می‌ماند.
  • sort(): یک متد است که مستقیماً روی شیء لیست اعمال می‌شود و داده‌های اصلی را تغییر می‌دهد (هیچ مقداری بازنمی‌گرداند).

مثال:


# استفاده از sorted()
arr = [3, 1, 2]
sorted_arr = sorted(arr)
print(sorted_arr) # خروجی: [1, 2, 3]
print(arr) # خروجی: [3, 1, 2] (داده‌های اصلی تغییر نکرده‌اند)

# استفاده از sort()
arr = [3, 1, 2]
arr.sort()
print(arr) # خروجی: [1, 2, 3]

مفهوم assert در پایتون چیست؟

دستور assert در پایتون برای انجام چک‌های درستی (debugging) و اعتبارسنجی در طول اجرای برنامه استفاده می‌شود. اگر شرطی که بعد از assert آمده است False باشد، یک استثنا (AssertionError) ایجاد می‌کند.

مثال:


x = 10
assert x > 5 # این شرط برقرار است، پس هیچ خطایی ایجاد نمی‌شود
assert x < 5 # این شرط برقرار نیست، بنابراین AssertionError ایجاد می‌شود

چگونه متغیرهای محلی و سراسری (global) را مدیریت می‌کنید؟

در پایتون، متغیرهای محلی در داخل یک تابع تعریف می‌شوند و فقط در آن تابع معتبر هستند، در حالی که متغیرهای سراسری در خارج از توابع تعریف می‌شوند و در تمام برنامه قابل دسترسی هستند.

برای دسترسی به متغیرهای سراسری در داخل یک تابع، می‌توانید از کلمه کلیدی global استفاده کنید.

مثال:


x = 5 # متغیر سراسری

def my_function():
 global x
 x = 10 # تغییر متغیر سراسری

my_function()
print(x) # خروجی: 10

چه زمانی از تابع eval() در پایتون استفاده می‌شود؟

تابع eval() در پایتون برای ارزیابی و اجرای یک عبارت پایتون به صورت داینامیک استفاده می‌شود. این تابع رشته‌های متنی که شامل کد پایتون هستند را اجرا می‌کند.

مثال:


x = 5
result = eval('x + 10')
print(result) # خروجی: 15

استفاده از eval() ممکن است خطرناک باشد، چرا که می‌تواند کدهای خطرناک را اجرا کند. بنابراین، از آن باید با احتیاط استفاده کرد.

تفاوت بین لیست و صف (queue) در پایتون چیست؟

لیست‌ها و صف‌ها هر دو برای ذخیره داده‌ها در پایتون استفاده می‌شوند، اما تفاوت‌هایی دارند:

  • لیست: لیست‌ها داده‌ها را به طور مرتب ذخیره می‌کنند و از آن‌ها می‌توان برای دسترسی تصادفی به عناصر استفاده کرد. عملیات افزودن و حذف عناصر در انتهای لیست سریع است، اما حذف از ابتدای لیست کند است.
  • صف (queue): صف‌ها معمولاً به صورت FIFO (اولین ورودی، اولین خروجی) عمل می‌کنند. برای پیاده‌سازی صف‌ها می‌توان از ماژول collections.deque استفاده کرد که عملیات افزودن و حذف عناصر از هر دو طرف صف را با سرعت ثابت انجام می‌دهد.

مثال صف با استفاده از deque:


from collections import deque

queue = deque([1, 2, 3])
queue.append(4) # افزودن به انتها
queue.popleft() # حذف از ابتدا
print(queue) # خروجی: deque([2, 3, 4])

مفهوم استثناهای سفارشی در پایتون چیست؟

در پایتون، می‌توان استثناهای سفارشی ایجاد کرد تا خطاهای خاصی که در برنامه رخ می‌دهند را مدیریت کرد. برای ایجاد استثنای سفارشی باید یک کلاس جدید تعریف کرده و از کلاس Exception ارث‌بری کنید.

مثال:


class MyCustomError(Exception):
 pass

try:
 raise MyCustomError("This is a custom error!")
except MyCustomError as e:
 print(e) # خروجی: This is a custom error!

چگونه می‌توان از functools در پایتون استفاده کرد؟

ماژول functools در پایتون شامل ابزارهایی برای کار با توابع است. برخی از مهم‌ترین توابع این ماژول عبارتند از:

  • partial: برای ایجاد نسخه‌های جزئی از توابع استفاده می‌شود.
  • lru_cache: برای کش کردن نتایج یک تابع و بهبود کارایی استفاده می‌شود.

مثال استفاده از partial:


from functools import partial

def power(base, exponent):
 return base ** exponent

cube = partial(power, exponent=3)
print(cube(2)) # خروجی: 8

ویژگی‌های بسته collections در پایتون چیست؟

بسته collections در پایتون شامل انواع داده‌ای خاص است که عملکردهایی را بهبود می‌بخشد. مهم‌ترین ویژگی‌های این بسته عبارتند از:

  • Counter: برای شمارش تعداد تکرارهای عناصر استفاده می‌شود.
  • deque: یک لیست دو طرفه است که به شما این امکان را می‌دهد تا به طور کارآمد از هر دو طرف به داده‌ها دسترسی داشته باشید.
  • namedtuple: برای ایجاد یک ساختار داده مشابه به کلاس، اما با حافظه و کارایی بهینه‌تر.

مثال استفاده از Counter:


from collections import Counter

data = ['a', 'b', 'c', 'a', 'b', 'a']
counter = Counter(data)
print(counter) # خروجی: Counter({'a': 3, 'b': 2, 'c': 1})

چگونه از تابع reduce() در پایتون استفاده می‌شود؟

تابع reduce() از ماژول functools برای انجام عمل تجمعی روی یک لیست یا هر شیء قابل تکرار استفاده می‌شود. این تابع به صورت پیوسته دو عنصر را از ورودی می‌گیرد و با استفاده از یک تابع، آن‌ها را با هم ترکیب می‌کند.

مثال:


from functools import reduce

data = [1, 2, 3, 4]
result = reduce(lambda x, y: x * y, data)
print(result) # خروجی: 24

نحوه استفاده از ماژول sqlite در پایتون برای کار با پایگاه داده چیست؟

ماژول sqlite در پایتون برای کار با پایگاه داده‌های SQLite استفاده می‌شود که یک پایگاه داده سبک و بدون نیاز به سرور است. برای استفاده از این ماژول باید ابتدا پایگاه داده را باز کرده و سپس دستورات SQL را برای عملیات‌های مختلف اجرا کنید.

مثال:


import sqlite3

# اتصال به پایگاه داده
conn = sqlite3.connect('example.db')

# ایجاد یک جدول
conn.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')

# وارد کردن داده‌ها
conn.execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")

# خواندن داده‌ها
cursor = conn.execute("SELECT * FROM users")
for row in cursor:
 print(row)

# بستن اتصال
conn.commit()
conn.close()

چه زمانی باید از ساختار داده‌های deque استفاده کنید؟

ساختار داده deque (لیست دو طرفه) برای مواقعی که نیاز به دسترسی و تغییر داده‌ها از هر دو طرف لیست دارید، مناسب است. این ساختار داده به دلیل عملکرد بهتر در عملیات‌هایی مانند افزودن و حذف عناصر از ابتدا و انتهای لیست، نسبت به لیست‌های معمولی پایتون عملکرد بهتری دارد.

مثال استفاده از deque برای صف:


from collections import deque

queue = deque([1, 2, 3])
queue.append(4) # افزودن به انتها
queue.appendleft(0) # افزودن به ابتداء
queue.pop() # حذف از انتها
queue.popleft() # حذف از ابتدا
print(queue) # خروجی: deque([2, 3])

ویژگی‌های ماژول itertools در پایتون چیست؟

ماژول itertools مجموعه‌ای از توابع مفید برای انجام عملیات‌های مختلف روی اشیاء قابل تکرار است. برخی از ویژگی‌های این ماژول شامل:

  • count: تولید یک شمارش بی‌نهایت از اعداد.
  • cycle: تکرار بی‌پایان یک شیء قابل تکرار.
  • repeat: تکرار یک مقدار ثابت به تعداد مشخص.
  • combinations و permutations: تولید ترکیب‌ها و ترتیب‌های مختلف از عناصر.

مثال:


import itertools

# شمارش بی‌نهایت از اعداد
counter = itertools.count(10)
for i in range(5):
 print(next(counter)) # خروجی: 10, 11, 12, 13, 14

# ترکیب‌های دو عنصری از لیست
combs = itertools.combinations([1, 2, 3], 2)
for comb in combs:
 print(comb) # خروجی: (1, 2), (1, 3), (2, 3)

چگونه از فریمورک Django برای توسعه وب در پایتون استفاده می‌کنید؟

فریمورک Django یک فریمورک سطح بالا برای توسعه وب در پایتون است که امکانات زیادی برای ساخت برنامه‌های وب فراهم می‌کند. برای استفاده از Django، ابتدا باید آن را نصب کرده و سپس پروژه جدیدی بسازید.

مراحل اولیه:

  1. نصب Django: pip install django
  2. ایجاد پروژه: django-admin startproject mysite
  3. ایجاد اپلیکیشن: python manage.py startapp myapp
  4. ایجاد مدل‌ها، نماها و URLها و تنظیمات لازم برای توسعه برنامه.

مثال ساده برای نمایش یک صفحه:


# views.py
from django.http import HttpResponse

def home(request):
 return HttpResponse("Hello, Django!")

# urls.py
from django.urls import path
from . import views

urlpatterns = [
 path('', views.home, name='home'),
]

مفهوم multiprocessing در پایتون چیست؟

ماژول multiprocessing در پایتون برای انجام پردازش‌های همزمان (parallel) استفاده می‌شود. این ماژول به شما امکان می‌دهد که چندین پردازش را به طور همزمان اجرا کنید و از قدرت چند هسته‌ای پردازنده‌ها بهره‌برداری کنید.

مثال:


import multiprocessing

def worker(num):
 print(f'Worker {num}')

if __name__ == "__main__":
 processes = []
 for i in range(5):
 p = multiprocessing.Process(target=worker, args=(i,))
 processes.append(p)
 p.start()

 for p in processes:
 p.join()

چگونه می‌توان از ماژول subprocess برای اجرای دستورات سیستم استفاده کرد؟

ماژول subprocess در پایتون برای اجرای دستورات سیستم و برنامه‌های خارجی استفاده می‌شود. این ماژول به شما امکان می‌دهد تا فرایندهای خارجی را از داخل پایتون اجرا کرده و خروجی آن‌ها را دریافت کنید.

مثال:


import subprocess

# اجرای دستور سیستم
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)

چگونه یک API RESTful با پایتون بسازید؟

برای ساخت یک API RESTful با پایتون می‌توانید از فریمورک‌هایی مانند Flask یا Django استفاده کنید. در اینجا نحوه استفاده از Flask برای ساخت یک API ساده آورده شده است:

مثال با Flask:


from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api', methods=['GET'])
def api():
 return jsonify({"message": "Hello, World!"})

if __name__ == '__main__':
 app.run(debug=True)

نحوه تعامل با فایل‌های CSV در پایتون چگونه است؟

برای کار با فایل‌های CSV در پایتون می‌توانید از ماژول csv استفاده کنید. این ماژول امکان خواندن، نوشتن و ویرایش فایل‌های CSV را به شما می‌دهد.

مثال:


import csv

# خواندن فایل CSV
with open('data.csv', mode='r') as file:
 csv_reader = csv.reader(file)
 for row in csv_reader:
 print(row)

# نوشتن در فایل CSV
with open('data.csv', mode='w', newline='') as file:
 csv_writer = csv.writer(file)
 csv_writer.writerow(['Name', 'Age'])
 csv_writer.writerow(['Alice', 30])
 csv_writer.writerow(['Bob', 25])

کاربردهای تابع join() در پایتون چیست؟

تابع join() در پایتون برای ترکیب رشته‌های موجود در یک لیست یا مجموعه استفاده می‌شود و آن‌ها را با یک جداکننده خاص به هم متصل می‌کند.

مثال:


words = ['Hello', 'world', 'Python']
result = ' '.join(words) # اتصال کلمات با فاصله
print(result) # خروجی: Hello world Python

مفهوم classmethod در پایتون چیست؟

یک classmethod متدی است که به جای یک شیء از کلاس، به خود کلاس ارجاع دارد. این متد معمولاً برای ایجاد یا تغییر ویژگی‌های کلاس استفاده می‌شود.

مثال:


class MyClass:
 class_variable = 0

 @classmethod
 def increment_class_variable(cls):
 cls.class_variable += 1

# فراخوانی متد کلاس
MyClass.increment_class_variable()
print(MyClass.class_variable) # خروجی: 1

تفاوت بین تابع len() و size() چیست؟

در پایتون، تابع len() برای به‌دست آوردن طول (تعداد عناصر) یک شیء قابل شمارش (مثل لیست‌ها، رشته‌ها و دیکشنری‌ها) استفاده می‌شود. در حالی که size() تابعی نیست که به طور پیش‌فرض در پایتون وجود داشته باشد. این تابع ممکن است در کتابخانه‌های خاص مانند numpy برای کار با آرایه‌ها استفاده شود.

مثال:


# len() برای لیست
lst = [1, 2, 3]
print(len(lst)) # خروجی: 3

# size() در numpy
import numpy as np
arr = np.array([1, 2, 3])
print(arr.size) # خروجی: 3

چگونه می‌توانید یک مقدار را از رشته به عدد تبدیل کنید؟

برای تبدیل یک رشته به عدد در پایتون می‌توانید از توابع int() یا float() استفاده کنید. این توابع رشته‌هایی که قابل تبدیل به عدد صحیح یا اعشاری هستند را به نوع‌های مناسب تبدیل می‌کنند.

مثال:


string_num = "42"
int_num = int(string_num) # تبدیل به عدد صحیح
float_num = float(string_num) # تبدیل به عدد اعشاری

print(int_num) # خروجی: 42
print(float_num) # خروجی: 42.0

مفهوم operator module در پایتون چیست؟

ماژول operator در پایتون شامل توابعی است که معادل اپراتورهای مختلف (مانند جمع، تفریق، ضرب و ...) هستند. این توابع به شما امکان می‌دهند تا از اپراتورها به صورت برنامه‌نویسی استفاده کنید و در عملیات‌های مختلف به کار ببرید.

مثال:


import operator

# استفاده از operator برای جمع
result = operator.add(2, 3)
print(result) # خروجی: 5

# استفاده از operator برای مقایسه
result = operator.gt(5, 3)
print(result) # خروجی: True

چگونه یک اپلیکیشن پایتون را در سیستم‌عامل‌های مختلف اجرا کنید؟

برای اجرای یک اپلیکیشن پایتون در سیستم‌عامل‌های مختلف، کافیست از دستور python یا python3 در خط فرمان استفاده کنید. شما باید مطمئن شوید که پایتون روی سیستم نصب شده و از نسخه مناسب استفاده می‌کنید.

مثال برای اجرای اپلیکیشن پایتون:


python my_script.py

نحوه خواندن و نوشتن داده‌ها در فایل‌های JSON در پایتون چگونه است؟

برای خواندن و نوشتن داده‌ها در فایل‌های JSON در پایتون می‌توانید از ماژول json استفاده کنید. این ماژول به شما امکان می‌دهد که داده‌ها را به فرمت JSON تبدیل کرده و یا از آن تبدیل کنید.

مثال:


import json

# نوشتن در فایل JSON
data = {'name': 'Alice', 'age': 30}
with open('data.json', 'w') as f:
 json.dump(data, f)

# خواندن از فایل JSON
with open('data.json', 'r') as f:
 data = json.load(f)
print(data) # خروجی: {'name': 'Alice', 'age': 30}

تفاوت بین range() و list() چیست؟

تابع range() یک شیء قابل تکرار ایجاد می‌کند که نمایانگر یک دنباله از اعداد است، در حالی که list() یک لیست از عناصر می‌سازد. range() حافظه کمتری مصرف می‌کند زیرا تنها هنگام تکرار مقادیر را تولید می‌کند، اما list() همه عناصر را در حافظه ذخیره می‌کند.

مثال:


# range() فقط دنباله‌ای از اعداد را تولید می‌کند
r = range(5)
for i in r:
 print(i) # خروجی: 0, 1, 2, 3, 4

# list() لیستی از اعداد می‌سازد
lst = list(range(5))
print(lst) # خروجی: [0, 1, 2, 3, 4]

چگونه می‌توانید از پایتون برای پردازش داده‌های بزرگ استفاده کنید؟

برای پردازش داده‌های بزرگ در پایتون می‌توانید از کتابخانه‌هایی مانند pandas برای تجزیه و تحلیل داده‌ها، numpy برای عملیات‌های عددی و dask برای پردازش موازی داده‌های بزرگ استفاده کنید. همچنین می‌توانید از generator ها برای کاهش مصرف حافظه و پردازش داده‌ها به صورت قطعه‌قطعه استفاده کنید.

مثال:


import pandas as pd

# بارگذاری داده‌های بزرگ به صورت قطعه‌قطعه
for chunk in pd.read_csv('large_data.csv', chunksize=1000):
 process(chunk) # پردازش هر بخش از داده‌ها

مفهوم متدهای __str__ و __repr__ در پایتون چیست؟

متد __str__ برای ارائه یک رشته قابل‌فهم برای کاربران از شیء استفاده می‌شود، در حالی که __repr__ یک نمایش رسمی‌تر از شیء برای استفاده در محیط‌های تعاملی یا برای ساخت رشته‌هایی که می‌توانند دوباره به شیء تبدیل شوند، استفاده می‌شود.

مثال:


class MyClass:
 def __str__(self):
 return "این یک شیء از MyClass است"
 
 def __repr__(self):
 return "MyClass()"

obj = MyClass()
print(str(obj)) # خروجی: این یک شیء از MyClass است
print(repr(obj)) # خروجی: MyClass()

نحوه استفاده از پکیج requests برای ارسال درخواست HTTP در پایتون چگونه است؟

برای ارسال درخواست HTTP در پایتون می‌توانید از پکیج requests استفاده کنید. این پکیج ارسال درخواست‌های GET، POST و سایر انواع درخواست‌ها را ساده می‌کند.

مثال:


import requests

# ارسال درخواست GET
response = requests.get('https://api.example.com/data')
print(response.status_code)
print(response.json())

# ارسال درخواست POST
data = {'key': 'value'}
response = requests.post('https://api.example.com/submit', data=data)
print(response.status_code)

چگونه داده‌ها را با استفاده از تابع filter() فیلتر می‌کنید؟

تابع filter() برای فیلتر کردن داده‌ها با استفاده از یک تابع و یک iterable به کار می‌رود. این تابع هر مقدار را از iterable که نتیجه True را برمی‌گرداند، انتخاب می‌کند.

مثال:


numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # خروجی: [2, 4, 6]

چگونه از ماژول csv برای پردازش فایل‌های CSV استفاده می‌کنید؟

ماژول csv برای خواندن و نوشتن داده‌ها به و از فایل‌های CSV استفاده می‌شود. با استفاده از این ماژول می‌توانید داده‌ها را به راحتی مدیریت کنید.

مثال:


import csv

# خواندن داده‌ها از فایل CSV
with open('data.csv', mode='r') as file:
 csv_reader = csv.reader(file)
 for row in csv_reader:
 print(row)

# نوشتن داده‌ها به فایل CSV
with open('data.csv', mode='w', newline='') as file:
 csv_writer = csv.writer(file)
 csv_writer.writerow(['Name', 'Age'])
 csv_writer.writerow(['Alice', 30])
 csv_writer.writerow(['Bob', 25])

مفهوم staticmethod در پایتون چیست؟

یک staticmethod متدی است که به هیچ‌یک از ویژگی‌های شیء یا کلاس دسترسی ندارد و می‌تواند بدون نیاز به نمونه‌سازی از کلاس، فراخوانی شود. این متد برای عملیات‌هایی که به کلاس وابسته نیستند استفاده می‌شود.

مثال:


class MyClass:
 @staticmethod
 def greet(name):
 print(f"Hello, {name}!")

# فراخوانی متد استاتیک بدون نمونه‌سازی از کلاس
MyClass.greet('Alice') # خروجی: Hello, Alice!

چگونه از پایتون برای پردازش داده‌های تصویری استفاده می‌کنید؟

برای پردازش داده‌های تصویری در پایتون می‌توانید از کتابخانه‌هایی مانند Pillow برای ویرایش تصاویر، OpenCV برای پردازش تصاویر و ویدئوها و matplotlib برای نمایش تصاویر استفاده کنید.

مثال:


from PIL import Image

# بارگذاری و نمایش تصویر
image = Image.open('image.jpg')
image.show()

# تغییر اندازه تصویر
resized_image = image.resize((100, 100))
resized_image.save('resized_image.jpg')

تفاوت بین frozenset و set چیست؟

تفاوت اصلی این است که frozenset یک مجموعه غیرقابل تغییر (immutable) است، در حالی که set قابل تغییر است. بنابراین نمی‌توانید عناصر یک frozenset را اضافه یا حذف کنید، اما در set این امکان وجود دارد.

مثال:


# set قابل تغییر است
s = {1, 2, 3}
s.add(4)
s.remove(2)

# frozenset غیرقابل تغییر است
fs = frozenset([1, 2, 3])
# fs.add(4) # این خط خطا می‌دهد

مفهوم __call__ در پایتون چیست؟

متد __call__ به شما این امکان را می‌دهد که یک شیء از کلاس خود را به عنوان یک تابع فراخوانی کنید. این متد به طور خودکار زمانی که شیء مانند یک تابع فراخوانی می‌شود، اجرا می‌شود.

مثال:


class MyClass:
 def __call__(self, x):
 print(f"Called with {x}")

obj = MyClass()
obj(10) # خروجی: Called with 10

چگونه می‌توانید از پایتون برای توسعه بازی‌های ویدیویی استفاده کنید؟

برای توسعه بازی‌های ویدیویی با پایتون می‌توانید از کتابخانه‌هایی مانند pygame استفاده کنید. این کتابخانه ابزارهای مورد نیاز برای ایجاد بازی‌های 2D را فراهم می‌آورد، از جمله پردازش ورودی‌های کاربر، مدیریت تصاویر و صدا، و شبیه‌سازی فیزیک.

مثال:


import pygame

# راه‌اندازی بازی
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

# اجرای بازی
running = True
while running:
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
 running = False

 screen.fill((0, 0, 0))
 pygame.display.flip()
 clock.tick(60)

pygame.quit()

نحوه کار با ورودی‌های کاربر در پایتون چگونه است؟

برای دریافت ورودی از کاربر در پایتون می‌توانید از تابع input() استفاده کنید. این تابع به شما امکان می‌دهد که از کاربر داده‌هایی مثل رشته یا عدد دریافت کنید.

مثال:


name = input("Enter your name: ")
age = input("Enter your age: ")

# تبدیل رشته به عدد
age = int(age)
print(f"Hello, {name}! You are {age} years old.")

چه کاربردهایی برای ماژول random در پایتون وجود دارد؟

ماژول random در پایتون برای تولید اعداد تصادفی و انجام عملیات تصادفی مانند انتخاب تصادفی از یک لیست، شافل کردن آیتم‌ها، و تولید اعداد در محدوده خاص استفاده می‌شود.

مثال:


import random

# انتخاب تصادفی از یک لیست
choices = ['apple', 'banana', 'cherry']
random_choice = random.choice(choices)
print(random_choice)

# شافل کردن آیتم‌ها
random.shuffle(choices)
print(choices)

# تولید یک عدد تصادفی در بازه
random_number = random.randint(1, 100)
print(random_number)

چگونه از پایتون برای پردازش داده‌های علمی استفاده می‌کنید؟

برای پردازش داده‌های علمی در پایتون می‌توانید از کتابخانه‌هایی مانند numpy برای عملیات‌های ریاضی، scipy برای محاسبات علمی پیچیده، matplotlib برای ترسیم نمودارها، و pandas برای تجزیه و تحلیل داده‌ها استفاده کنید.

مثال:


import numpy as np
import matplotlib.pyplot as plt

# ایجاد یک آرایه numpy
x = np.linspace(0, 10, 100)
y = np.sin(x)

# ترسیم نمودار
plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Sine Wave')
plt.show()

مفهوم type() و isinstance() چیست؟

تابع type() برای بازگرداندن نوع یک شیء استفاده می‌شود، در حالی که isinstance() برای بررسی اینکه آیا یک شیء از یک کلاس خاص یا زیرکلاس آن است، به کار می‌رود.

مثال:


x = 5
print(type(x)) # خروجی: 

# استفاده از isinstance
print(isinstance(x, int)) # خروجی: True
print(isinstance(x, str)) # خروجی: False

تفاوت بین کدهای سینک و آسنک در پایتون چیست؟

کد سینک (همگام) به این معناست که دستورات به ترتیب و منتظر اتمام هر کدام اجرا می‌شوند. در حالی که کد آسنک (غیرهمگام) به این معناست که دستورات می‌توانند همزمان اجرا شوند و هیچ‌کدام منتظر دیگری نمی‌ماند، که باعث افزایش سرعت عملکرد برنامه می‌شود.

مثال از کد آسنک:


import asyncio

async def say_hello():
 print("Hello")

async def main():
 await say_hello()

asyncio.run(main())

چگونه یک دیکشنری را در پایتون فشرده‌سازی می‌کنید؟

برای فشرده‌سازی دیکشنری در پایتون می‌توانید از روش‌هایی مانند dict comprehension یا تبدیل آن به یک فرمت فشرده مانند JSON استفاده کنید.

مثال:


# فشرده‌سازی دیکشنری با استفاده از dict comprehension
original_dict = {'a': 1, 'b': 2, 'c': 3}
compressed_dict = {k: v for k, v in original_dict.items() if v > 1}
print(compressed_dict) # خروجی: {'b': 2, 'c': 3}

مفهوم متدهای __del__ و __new__ چیست؟

متد __del__ برای انجام عملیات تمیزکاری قبل از حذف یک شیء استفاده می‌شود، در حالی که __new__ مسئول ایجاد و بازگشت یک شیء جدید از کلاس است (معمولاً در کدهای Singleton یا متغیرهای شیء تکی به کار می‌رود).

مثال:


class MyClass:
 def __new__(cls):
 print("Creating instance")
 return super().__new__(cls)

 def __del__(self):
 print("Deleting instance")

# ایجاد شیء
obj = MyClass()

# حذف شیء
del obj

چگونه از ماژول logging در پایتون برای ثبت رویدادها استفاده می‌کنید؟

ماژول logging در پایتون برای ثبت پیام‌های مربوط به اجرای برنامه (مانند خطاها یا اطلاعات مفید) استفاده می‌شود. این پیام‌ها می‌توانند در فایل‌ها یا کنسول نمایش داده شوند و به برنامه‌نویس کمک کنند تا خطاها را شناسایی کند.

مثال:


import logging

# تنظیمات logging
logging.basicConfig(level=logging.INFO)

# ثبت رویدادها
logging.debug("این یک پیام debug است")
logging.info("این یک پیام info است")
logging.warning("این یک پیام warning است")
logging.error("این یک پیام error است")
logging.critical("این یک پیام critical است")

نحوه استفاده از ماژول unittest برای نوشتن تست‌های واحد در پایتون چگونه است؟

ماژول unittest در پایتون برای نوشتن و اجرای تست‌های واحد (unit tests) استفاده می‌شود. شما می‌توانید کلاس‌هایی برای گروه‌بندی تست‌ها و متدهایی برای آزمودن عملکردهای خاص در نظر بگیرید.

مثال:


import unittest

def add(a, b):
 return a + b

class TestMathOperations(unittest.TestCase):
 def test_add(self):
 self.assertEqual(add(2, 3), 5)

if __name__ == '__main__':
 unittest.main()

تفاوت بین os.system() و subprocess.call() چیست؟

هر دو os.system() و subprocess.call() برای اجرای دستورات سیستم استفاده می‌شوند، اما تفاوت‌های مهمی دارند:

  • os.system() برای اجرای دستورات سیستم در یک شل جدید استفاده می‌شود، اما دسترسی کمتری به ورودی و خروجی فرایند دارد.
  • subprocess.call() کنترل بیشتری روی فرایند اجرا می‌دهد، اجازه می‌دهد که ورودی/خروجی را تنظیم کنید و می‌توانید خروجی فرایند را دریافت کنید.

مثال:


import os
import subprocess

# استفاده از os.system()
os.system('echo "Hello, World!"')

# استفاده از subprocess.call()
subprocess.call(['echo', 'Hello, World!'])

چگونه از متغیرهای محیطی در پایتون برای ذخیره مقادیر حساس استفاده می‌کنید؟

برای ذخیره مقادیر حساس مانند پسوردها یا کلیدهای API، می‌توانید از متغیرهای محیطی استفاده کنید. پایتون به شما این امکان را می‌دهد که از ماژول os برای دسترسی به این متغیرها استفاده کنید.

مثال:


import os

# دسترسی به متغیر محیطی
api_key = os.getenv('API_KEY')
print(f"API Key: {api_key}")

ویژگی‌های کلیدی ماژول asyncio در پایتون چیست؟

ماژول asyncio در پایتون برای برنامه‌نویسی غیرهمگام (asynchronous programming) طراحی شده است. از ویژگی‌های کلیدی آن می‌توان به پشتیبانی از عملیات‌های ورودی/خروجی غیرهمگام، تسک‌ها (tasks)، و همکاری با سایر ماژول‌های آسنک اشاره کرد.

مثال:


import asyncio

async def hello():
 print("Hello")
 await asyncio.sleep(1)
 print("World")

asyncio.run(hello())

تفاوت بین شیوه‌های استفاده از متغیرها در پایتون 2 و 3 چیست؟

در پایتون 2، متغیرها به طور پیش‌فرض به صورت global قابل دسترسی هستند، اما در پایتون 3، استفاده از متغیرهای global یا nonlocal نیاز به اعلام صریح دارد. علاوه بر این، پایتون 3 انواع داده جدید و امکانات بهتری برای مدیریت حافظه و پردازش داده‌ها دارد.

چگونه یک اپلیکیشن پایتون را برای تولید آماده می‌کنید؟

برای آماده‌سازی اپلیکیشن پایتون برای تولید، باید مطمئن شوید که کد شما بهینه است، وابستگی‌ها به درستی نصب شده‌اند، تست‌ها اجرا شده‌اند، و امنیت برنامه در نظر گرفته شده است. برای این منظور از ابزارهایی مانند pip برای مدیریت بسته‌ها و gunicorn یا uWSGI برای اجرای اپلیکیشن در محیط‌های تولیدی استفاده می‌شود.

مثال:


# نصب بسته‌ها
pip install -r requirements.txt

# اجرای اپلیکیشن
gunicorn myapp:app

کاربردهای مختلف فریمورک‌های پایتون مانند Flask و Django چیست؟

فریمورک‌های Flask و Django برای توسعه وب استفاده می‌شوند. Flask یک فریمورک سبک است که انعطاف‌پذیری بالایی برای توسعه اپلیکیشن‌های ساده یا پیچیده دارد، در حالی که Django یک فریمورک کامل است که بسیاری از ویژگی‌های از پیش ساخته شده را برای توسعه سریع اپلیکیشن‌های وب فراهم می‌آورد.

مثال Flask:


from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
 return "Hello, World!"

if __name__ == '__main__':
 app.run()

مثال Django:


# در Django، ابتدا باید یک پروژه و برنامه بسازید و سپس آن را اجرا کنید.
django-admin startproject myproject
cd myproject
python manage.py runserver

چگونه می‌توان از تکنیک‌های بهینه‌سازی حافظه در پایتون استفاده کرد؟

برای بهینه‌سازی حافظه در پایتون، می‌توان از چندین تکنیک و روش استفاده کرد که به کاهش مصرف حافظه و بهبود عملکرد برنامه کمک می‌کند. برخی از این تکنیک‌ها عبارتند از:

  • استفاده از ساختارهای داده بهینه: انتخاب صحیح ساختارهای داده می‌تواند مصرف حافظه را کاهش دهد. به عنوان مثال، استفاده از tuple به جای list برای داده‌های ثابت می‌تواند حافظه کمتری مصرف کند.
  • استفاده از ژنراتورها: ژنراتورها به جای ذخیره کل داده‌ها در حافظه، به صورت lazy داده‌ها را تولید می‌کنند که باعث کاهش مصرف حافظه می‌شود. به جای استفاده از list از generator استفاده کنید.
  • استفاده از del برای آزادسازی حافظه: با استفاده از دستور del می‌توانید متغیرهای غیر ضروری را از حافظه حذف کنید.
  • استفاده از ماژول gc برای جمع‌آوری زباله‌ها: ماژول gc (جمع‌آوری زباله‌ها) به شما کمک می‌کند که حافظه استفاده نشده را آزاد کنید.
  • استفاده از __slots__ در کلاس‌ها: با استفاده از __slots__ می‌توانید محدودیت‌هایی برای ویژگی‌های کلاس ایجاد کنید تا حافظه مصرفی کاهش یابد.

مثال:


# استفاده از ژنراتور به جای لیست
def generate_numbers():
 for i in range(1000000):
 yield i

gen = generate_numbers() # این حافظه کمی مصرف می‌کند
print(next(gen)) # داده‌ها تنها زمانی که نیاز است تولید می‌شوند

# استفاده از __slots__ در کلاس
class MyClass:
 __slots__ = ['a', 'b'] # این باعث می‌شود حافظه کمتری برای شیء مصرف شود
 def __init__(self, a, b):
 self.a = a
 self.b = b