مجموعة ثابتة من القيم
الصف (tuple) يشبه قائمة لا تتغير بعد إنشائها. تنشئه بالفواصل، وعادةً بين قوسين: ("AAPL", 184.25, 184.5). وهو مناسب لسجل صغير لأجزائه معانٍ ثابتة، كعرض سعر واحد أو صفقة واحدة. تقرأه بالفهرس مثل القائمة، لكن الإسناد إلى موضع يرفع TypeError. الصف ذو العنصر الواحد يحتاج فاصلة أخيرة (5,) لأن (5) مجرد الرقم 5.
quote = ("AAPL", 184.25, 184.5)
# Reading works like a list
print(quote[0], len(quote)) # AAPL 3
# Changing does not
try:
quote[1] = 185.0
except TypeError as error:
print("tuples are fixed:", error)
# One item needs a trailing comma
print(type((5,)), type((5))) # <class 'tuple'> <class 'int'>فكّ الحزم: أعطِ كل جزء اسمًا
فكّ الحزم (unpacking) يُسند أجزاء الصف (أو أي متتالية) إلى عدة أسماء دفعة واحدة: symbol, bid, ask = quote. يجب أن يطابق عدد الأسماء عدد العناصر وإلا رفعت بايثون ValueError. مقارنةً بـquote[0] وquote[1] وquote[2] تقول الأسماء ما معنى كل جزء، لذا فإن الفك أوضح عادةً من الفهرسة. ويعطي أيضًا التبديل الكلاسيكي بلا متغير مؤقت: a, b = b, a.
# Unpack a quote into named parts
quote = ("AAPL", 184.25, 184.5)
symbol, bid, ask = quote
print(symbol, round(ask - bid, 2)) # AAPL 0.25
# Swap two values without a temporary
bid, ask = ask, bid
print(bid, ask) # 184.5 184.25
# The count must match
try:
symbol, bid = quote
except ValueError as error:
print("wrong count:", error)أخذ الباقي باستخدام *
ضع * قبل اسم واحد ليجمع كل ما تبقّى في قائمة: first, *rest = prices أو first, *middle, last = prices. يُسمح باسم واحد فقط بنجمة، وتحتاج الأسماء العادية إلى عنصر لكل منها. استخدم _ لجزء لا تحتاجه، مثل first, *_, last = prices.
# * collects what is left, as a list
prices = [184.0, 185.0, 183.2, 186.1]
first, *rest = prices
print(first, rest) # 184.0 [185.0, 183.2, 186.1]
first, *_, last = prices
print(first, last) # 184.0 186.1فكّ الحزم في الحلقات والإرجاع والترتيب
يعمل فكّ الحزم أينما أُسند اسم: في حلقة for (for symbol, price in quotes) وفي الاشتقاقات وعلى نتيجة دالة تُرجع عدة قيم بـreturn a, b، وهي في الحقيقة تُرجع صفًا واحدًا. وتُقارَن الصفوف عنصرًا بعنصر: الأول مع الأول ثم، عند التعادل، الثاني مع الثاني، لذا فترتيب قائمة صفوف (price, symbol) يكون بالسعر ويُفضّ التعادل بالرمز.
# Return several values, unpack them in the caller
def spread_and_mid(bid, ask):
return ask - bid, (bid + ask) / 2
spread, mid = spread_and_mid(184.25, 184.5)
print(spread, mid) # 0.25 184.375
# Tuples sort by the first item, then the second
quotes = [("AAPL", 184.5), ("MSFT", 410.2), ("GOOG", 171.0)]
by_price = sorted((price, symbol) for symbol, price in quotes)
print(by_price) # [(171.0, 'GOOG'), (184.5, 'AAPL'), (410.2, 'MSFT')]
for price, symbol in by_price:
print(symbol, price)(symbol, bid, ask). واستخدم القائمة عندما تكون لديك عناصر كثيرة متشابهة وقد تضيف بعضها أو تحذفه. وبما أن الصف لا يتغير فيمكن استخدامه حيث لا تصلح القائمة، مثل مفتاح في قاموس، وهو موضوع قادم قريبًا.(a, b, c): مجموعة ثابتة؛ تُقرأ ولا تُعدَّل.x, y = pair: فكّ الحزم إلى أسماء؛ يجب أن يتطابق العدد.first, *rest = items: الاسم ذو النجمة يجمع الباقي في قائمة.
التالي: القواميس، التي تبحث عن القيم باسم بدلًا من موضع.
المختبر: ما الذي يُقيَّم
- فكّ عرض سعر باستخدام
quote_stats25 نقطة - خذ الطرفين باستخدام
first_last25 نقطة - رتّب عروض الأسعار بحسب السعر باستخدام
ranked25 نقطة - اعثر على أرخص منصة باستخدام
best_ask25 نقطة