tgoop.com/pythonlearnme/185
Last Update:
✔️ کلاس zip
ببینید zip یک کلاس هست که میاد به عنوان پارامتر های ورودی خودش، iterable
(یا iterable
هایی) رو به صورت postional argument
میگیره و یک zip object
به ما برمیگردونه!
شاید بگید iterable
چیه؟ iterable
میشه چیزی که شما توی پایتون بتونی مثلا روش for
بزنی و به اصطلاح iterate
کنی! مثل چی؟ مثل list - str - tuple و ...
خوب حالا این zip چطوری کار میکنه 🤔
این کلاس میاد و از iterable
هایی که بهش داده شده، به تعداد اون Iterable
ها (فرض کنیم n
تا) tuple (هایی) به سایز n
برامون yield
میکنه! حالا اعضای اون tuple که سایزش n
هست (یعنی n
تا عضو داره) چی هستن؟ zip میاد و اولین عضو رو از اولین iterable
و دومین عضو رو از دومین iterable
و همینطوری تا آخر میگیره! این تا کی ادامه داره؟ تا زمانی که اعضای کوتاه ترین iterable
تمام بشه!
نکته مهم ❗️
کلاس zip هم مثل filter و map و ... یک lazy iterator
هست، یعنی چی؟ یعنی جواب رو درجا برای ما محاسبه نمیکنه و هر بار که روش next زده بشه، به ما یک چیزی yield میکنه.
مثال 🧪
names = [الان هر بار که روی z ما
"Ali",
"Mohsen",
"Hassan",
]
last_names = [
"Hassanzadeh",
"Mohammadi",
]
z = zip(names, last_names)
next
بزنیم به ما یک tuple به سایز 2 میده (چرا 2 ؟ چون 2 تا iterable
بهش دادیم)>>> next(z)به همین صورت میتونید به لیست، ست و ... این
('Ali', 'Hassanzadeh')
zip object
رو تبدیل کنید:>>> list(z)چرا هر tuple دوتا عضو بیشتر نداره؟ چون همونطور که بالا گفتم تعداد به اندازه کوتاه ترین
[('Ali', 'Hassanzadeh'), ('Mohsen', 'Mohammadi')]
iterable
هست که در اینجا last_names
کوتاه تر هست و فقط 2 عضو داره!پس
signature
کلی کلاس zip به شکل زیر هست (از پایتون 3.10 پارامتر strict
بهش اضافه شده که توضیحش میدم)zip(*iterables, strict=False) —> zip objectخوب ی نکته میمونه، اینکه از پایتون 3.10 به این کلاس یک پارامتری اضافه شده به اسم
strict
! کارش چیه؟ مقدارش به صورت پیشفرض False
هست، ولی زمانی که شما اون رو True کنید، چک میکنه که همه iterable
هایی که بهش دادید آیا طول یکسان دارند یا نه و اگر این شرایط برقرار نبود یک خطای ValueError
به شما میده! مثال:names = [خروجی:
"Ali",
"Mohsen",
"Hassan",
]
last_names = [
"Hassanzadeh",
"Mohammadi",
]
print(list(zip(names, last_names, strict=True)))
ValueError: zip() argument 2 is shorter than argument 1
#builtinsBY 🧑💻PythonDev🧑💻
Share with your friend now:
tgoop.com/pythonlearnme/185