σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academyالمسارات
Ctrl K
AO
+1.2k متعلّم
تسجيل الدخولانضم ↗
المسارات
AO
+1.2k متعلّم
تسجيل الدخول
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
مسار Python›الوحدة 1 · أساسيات Python للمحللين الكميين›الموضوع 1.13·~30 دمبتدئ

الصفوف وفك التعبئة

الموضع في المسارالوحدة 1 من 11 · الموضوع 13 من 33
1.13 الصفوف وفك التعبئة
—درجة المختبر— / 100إجمالي XP—التتابع—

مجموعة ثابتة من القيم

الصف (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 نقطة
المستكشف · lab-13-1
▾ lab-13-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-13-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

هل تريد إعادة ضبط هذا الموضوع؟

سيعود كل ما في lab-13-1 إلى الملفات الابتدائية وستُمسح الطرفية. ستفقد حلّك الحالي ولا يمكن التراجع عن ذلك.

سيُعاد ضبطه
  • main.py ← الشيفرة الابتدائية
  • سجل الطرفية ومخرجات الاختبارات
  • التغييرات غير المُرسلة
سيُحتفظ به
  • أفضل درجة في المختبر
  • نقاط XP والتتابع
  • تقدّم المحاضرة والملاحظات

سجّل الدخول لتشغيل الكود الخاص بك.

قراءة كل المحاضرات مجانية. أنشئ حسابًا أو سجّل الدخول لتشغيل الكود وتنفيذ الاختبارات وتسليم هذا المختبر.

  • بيئة تطوير داخل المتصفح مع طرفية bash — لا حاجة لتثبيت أي شيء
  • تصحيح فوري ونقاط خبرة ومكانك في المسار
إنشاء حسابتسجيل الدخول
أو
المتابعة عبر GitHub