با سلام و درود
چند روز پیش من نقش جدیدی رو به عنوان مهندس داده شروع کردم که چندان توش موفق نبودم.
خیلی از کسانی که این نقشو بازی میکنن تا حالا کدهای زیادی زدن ولی تا حالا سوالای زیرم به گوششون نخورده :))))))
این سوال خیلی مهم است، اگر تقلبی در کار است این این در اول سطر بنویسید!
- لیست ها قابل تغییر هستند.
- تاپل ها تغییر ناپذیر هستند.
- لیست ها نظم دارند، آنها توالی مرتب شده ای هستن به طور معمول از همان نوع ابجکت. یعنی: 0 1 2.
["Morteza", "Ahmad", "Eli"]
- تاپل ها ساختار دارند. انواع مختلفی از داده ها در هر شاخص وجود دارد. یعنی: رکورد بانک اطلاعاتی در حافظه.
(2, "Ahmad", "2020–04–27") #(تاریخ, نام, آیدی)
این is هویت را بررسی می کند و == برابری را بررسی می کند.
a = [1,2,3] b = a c = [1,2,3] print(a == b) #True print(a == c) #True print(a is b) #True print(a is c) #False
خب دکوراتور اینه که بتونیم از طریق یک تابع، کارکرد یک تابع دیگه رو تغییر بدیم و یا بهتر بگیم که یه تابع رو گسترش بدیم.
تصور کنید تابع ۱ رو دارید و تابع ۲ … حالا میخواید از طریق تابع ۱، کاری بکنید که تابع ۲ کارهای بیشتری رو انجام بده.
def func1(): print("Hello Morteza!") def func2(func1): print('--------------------') func1() print('--------------------') func2(func1)
تابع range در زبان پایتون یک بازه از اعداد صحیح از start تا end-1 بر میگرداند و در صورتی که start ذکر نشود، بصورت پیشفرض 0 است . step نیز مشخص میکند که فاصلهی اعدادی از هم چقدر باشد و بصورت پیشفرض 1 هست.
for i in range(9): print(i) #[0 1 2 3 4 5 6 7 8]
for i in range(0, 11, 2): print(i) #[0 2 4 6 8 10]
class Car : def init(self, color, speed): self.color = color self.speed = speedcar = Car('red','100mph') car.speed #'100mph'
نوع Static پارامتر ورودی قبول نمی کند و حتی Access Modifier هم نمی پذیرد. اما Instance برعکس اینه.
هدف از این سوال این است که ببینند آیا می فهمید که همه فانکشنها مثل ابجکتها هستند.
def func(): print('Im a function') func #function main.func>func() # Im a function
نقشه لیستی از مقادیر برگشتی را از اعمال یک تابع به هر عنصر در یک توالی باز می گرداند.
def add_three(x): return x + 3li = [1,2,3][i for i in map(add_three, li)] #[4, 5, 6]
ای بابا! خیلی پیچیدست...
دنباله یک تابع رو کاهش میده و دنباله رو تکرار میکنه. در هر تکرار هر دو عنصر فعلی و خروجی از عنصر قبلی به عملکرد منتقل می شن و در پایان یک مقدار واحد بازگردانده می شود.
from functools import reducedef add_three(x,y): return x + yli = [1,2,3,5]reduce(add_three, li) #11
کار فیلتر مانند معنیشه. اعداد از فیلتر عبور میکنن و براساس این true یا false برگشت داده میشه.
def add_three(x): if x % 2 == 0: return True else: return Falseli = [1,2,3,4,5,6,7,8][i for i in filter(add_three, li)] #[2, 4, 6, 8]
در بالا اعداد زوج جدا شده اند توسط این تابع.
ابجکتهای غیرقابل تغییر مانند رشته ها، اعداد و تاپلها قابل فراخوانی هستند. هیچ وقت ابجکتها در خارج از فانکشنها قابل تغییر نیستن به این مثال توجه کنید که برای متغیر داخل فانکشن در بلوک دیگر حافظه ذخیره میشه:
name = 'chr'def add_chars(s): s += 'is' print(s) add_chars(name) #chria print(name) #chr
چه سوالایی :/
با استفاده از تابع reverse
به راحتی:
'cat' * 3 #'catcatcat' [1,2,3] * 2 #[1, 2, 3, 1, 2, 3]
این نحوه دسترسی به متدها و امکان آپدیت آبجکت متعلق به آنها است. در این مثال با استفاده از __init__() کاری میکنیم که رنگ رو در ابتدا بتونیم ست کنیم:
class Shirt: def init(self, color): self.color = color s = Shirt('yellow') s.color #'yellow'
a = [1,2] b = [3,4,5] a + b #[1, 2, 3, 4, 5]
بقیه سوالات در پست بعدی...