تقنية

cast في بايثون: لماذا تقبل c بايتًا وترفضه B؟

عرض B يرفض bytes؛ يبقى الأصل 4 و12.
قيمة مرفوضة.

صيغة العرض تحدد نوع القيمة المقبولة عند الإسناد. [1]

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

في المثال، B تقبل عددًا، وc تقبل bytes بطول واحد. [1]

  • صيغة العرض تحدد نوع القيمة المقبولة عند الإسناد. [1]
  • العرضان في المثال قابلان للكتابة؛ cast لا تنسخ مخزن البايتات. [1]
  • مثال مؤلف على CPython 3.12.14: b=bytearray([4,12])؛ v=memoryview(b) بصيغة B؛ c=v.cast("c"). [1]
  • v[0]=bytes([9]) ترفع TypeError وتبقي [4,12]؛ c[0]=bytes([9]) تنجح، فتتغير b إلى [9,12]. [1]
  • تحكم: أعد المثال بأصل جديد؛ v[0]=9 يعطي [9,12] أيضًا؛ الفرق السابق في نوع القيمة. [1]

نوع القيمة

صيغة العرض تحدد نوع القيمة المقبولة عند الإسناد. [1]

عرضان قابلان للكتابة

العرضان في المثال قابلان للكتابة؛ cast لا تنسخ مخزن البايتات. [1]

صيغة لكل عرض

مثال مؤلف على CPython 3.12.14: b=bytearray([4,12])؛ v=memoryview(b) بصيغة B؛ c=v.cast("c"). [1]

v[0]=bytes([9]) -> TypeError [1]

عرض c يقبل البايت، فيصبح الأصل 9 و12.
تغير الأصل.

إسناد وتحكم

v[0]=bytes([9]) ترفع TypeError وتبقي [4,12]؛ c[0]=bytes([9]) تنجح، فتتغير b إلى [9,12]. [1]

c[0]=bytes([9]); list(b) -> [9,12] [1]

تحكم: أعد المثال بأصل جديد؛ v[0]=9 يعطي [9,12] أيضًا؛ الفرق السابق في نوع القيمة. [1]

المراجع

  1. Python — memoryview.cast

للتوسع: لغات البرمجة.

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