سؤال

أنا جديد نسبيًا على Python والترميز. لقد كنت بخير حتى صادفت "لا شيء":

variable = None                          
while variable != "":                    
    print("Why does this loop start?")

على الرغم من أنه يبدو بسيطًا ، لا يمكنني فهم سبب بدء الحلقة أعلاه. كيف هو None تختلف عن سلسلة فارغة؟ اعتقدت أنهما تم تقييمهما على كاذب.

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

المحلول

كلاهما يقيمون False لكن هذا لا يعني أنهم نفس الشيء.

None هي قيمة منفصلة ولها نوعها الخاص. سلسلة فارغة هي سلسلة بدون محتويات:

>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False

نصائح أخرى

رقم، None هو فقط نفس الشيء مثل None بحد ذاتها. الأوتار الفارغة ليست نفس الشيء:

>>> None == ""
False

None هي قيمة خاصة مفردة (لا يوجد سوى نسخة واحدة منها في جلسة بيثون) تدل على "الفراغ" ، أو عدم وجود قيمة "مناسبة". على هذا النحو علَم أو الإشارة القيمة؛ يستخدم Python ذلك عن طريق الاتفاقية للإشارة إلى أن العملية لم ترد أي شيء ، على سبيل المثال.

كلاهما None والسلسلة الفارغة تعتبر خاطئة في سياق منطقي:

>>> bool(None)
False
>>> bool("")
False

كما هي جميع الحاويات الفارغة (مثل tuple الفارغ أو القائمة أو المجموعة) و Numeric 0 (سواء كان ذلك صحيحًا أو نقطة عائمة أو رقم معقد). أن تعتبر كاذبة لا تجعلها متساوية ، ولكن.

إذا كنت تريد الاختبار أي القيمة الخاطئة ، استخدم:

while not variable:

كما not يفسر المعامل في سياق منطقي ويعيد القيمة العكسية:

>>> not ""
True
>>> not None
True
>>> not "not empty"
False

كلاهما يقيم على خطأ ، ولكن يختلفان عند استخدامه في المقارنة

if not None:
    print "Always true"
if not "":
    print "Always true"
if bool(None) == bool(""):
    print "Always true"
if None == "":
    pass
    #always false
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top