تقنية

setstate في بايثون: هل يعيد السحب من النقطة المحفوظة؟

حفظ حالة بعد سحب واحد
نقطة محفوظة. [1] [2]

الحالة المحفوظة تحدد نقطة العودة. [1] [2]

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

نعم؛ setstate يستعيد الحالة التي التقطها getstate. [1] [2]

  • ننشئ Random(17) ونسحب مرة. [1] [2]
  • نحفظ الحالة بعد هذا السحب. [1] [2]
  • نسحب ثلاث قيم إلى a. [1] [2]
  • نستعيد الحالة ثم نسحب ثلاثًا إلى b؛ المقارنة True. [1] [2]
  • اختبرنا 3.12.14 دون مشاركة المولد بين خيوط. [1] [2]

المثال

from random import Random
r=Random(17)
r.random()
s=r.getstate()
a=[r.random() for _ in range(3)]
r.setstate(s)
b=[r.random() for _ in range(3)]
print(a==b)

[1] [2]

نقطة العودة

المصدر هنا يستعيد الحالة بعد السحب الأول، لا بداية البذرة. تتكرر القيم التالية؛ قائمة a لا تتغير. [1] [2]

استعادة الحالة وتكرار ثلاث قيم
التسلسل يتكرر. [1] [2]

النطاق

التكرار لا يثبت الاستقلال الإحصائي. لا نعمم عبر الإصدارات أو مولد مخصص. طريقتا الحالة في SystemRandom ترفعان NotImplementedError. ليس مولدنا للأمن. [1] [2]

المراجع

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

للتوسع: بحث عن لغات البرمجة

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