تقنية

run_path في بايثون: هل اسم التنفيذ الافتراضي __main__؟

الاسم الافتراضي run_path ومقارنة main كاذبة مع إسناد واحد
الاسم الافتراضي مع تنفيذ الملف. [1] [2]

نفحص اسم التنفيذ. [1] [2]

الخلاصة السريعة

لا؛ الافتراضي <run_path>. [1] [2]

  • نستخدم ملف مصدر مؤقتًا. [1] [2]
  • مع run_name=None تكون مقارنة الاسم بـ __main__ كاذبة. [1] [2]
  • مع run_name="__main__" تكون صحيحة. [1] [2]
  • الإسناد a=1 ينفذ في الحالتين. [1] [2]
  • اختبرنا 3.12.14 بالتتابع؛ ليست بيئة معزولة. [1] [2]

المثال

import runpy as r,tempfile as t
from pathlib import Path
with t.TemporaryDirectory() as d:
 p=Path(d)/'x.py'
 s="a=1\n"
 s+="b=__name__=='__main__'"
 p.write_text(s)
 for n in (None,'__main__'):
  g=r.run_path(str(p),run_name=n)
  print(g['a'],g['b'])

[1] [2]

المخرجان 1 False ثم 1 True. [1] [2]

الاسم والتنفيذ

القيمة المعادة قاموس متغيرات الملف. تغيير الاسم يغير المقارنة، لكنه لا يمنع تنفيذ الإسناد السابق لها. [1] [2]

الاسم الصريح main والمقارنة صحيحة مع إسناد واحد
الملف نفسه باسم صريح. [1] [2]

النطاق

ملف مصدر فقط. runpy تنفذ في العملية الحالية؛ لا تفترض عزل الآثار أو سلامة التنفيذ المتزامن. [1] [2]

المراجع

  1. Python: runpy
  2. CPython 3.12.14: runpy.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.