سؤال

يقوم Python بتكييف السلسلة حيث أتوقع أن أفعل الضرب الرقمي، ولا أعرف لماذا.

>>> print('%d' % 2 * 4)
2222
>>> print('%d' % (2 * 4))
8

حتى تجبر النوع إلى عدد صحيح لا يفعل شيئا. (أدرك أن هذا أمر زائد، لكنه فحص أحمق بالنسبة لي:

 >>> print('%d' % int(2) * int(4))
 2222

من الواضح أنني حل مشكلتي (إضافة الأقواس يفعل ذلك) ولكن ما الذي يحدث هنا؟ إذا كان هذا مجرد Quirk، يجب أن أتذكر ذلك، فلا بأس بذلك، لكنني أفضل فهم المنطق وراء ذلك.

هل كانت مفيدة؟

المحلول

أنت تواجه أسبقية المشغل.

في بيثون % لديه نفس الأسبقية كما * لذلك غادروا اليسار إلى اليمين.

لذا،

print('%d' % 2 * 4)

بالضبط مثل،

print( ('%d' % 2) * 4)

ها هي بيثون جدول الأسبقية.

نظرا لأنه من الصعب تذكر قواعد الأسبقية للمشغل، ويمكن أن تكون القواعد خفية، فغالبا ما يكون من الأفضل ببساطة استخدام الأقواس الصريحة عند تسخين المشغلين المتعددين في تعبير.

نصائح أخرى

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

عندما اكتب:

>>> print '%d' % 2 * 4
2222

اتضح أنه إذا كنت قد حددت الأسبقية بهذه الطريقة:

>>> print ('%d' % 2) * 4
2222
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top