পাইথন if x is not None
নাকি if not x is None
?
টিএলডিআর: বাইটকোড সংকলক তাদের উভয়কে পার্স করে x is not None
- তাই পাঠ্যতার জন্য, ব্যবহারের জন্য if x is not None
।
সুপাঠ্যতা
আমরা পাইথন ব্যবহার করি কারণ আমরা মানব পাঠযোগ্যতা, ব্যবহারযোগ্যতা এবং কর্মক্ষমতা দ্বারা প্রোগ্রামিংয়ের বিভিন্ন দৃষ্টান্তের নির্ভুলতার মতো বিষয়গুলিকে গুরুত্ব দিয়ে থাকি।
পাইথন পাঠযোগ্যতার জন্য বিশেষত এই প্রসঙ্গে উপযুক্ত করে।
বাইটকোড পার্সিং এবং সংকলন
not
বেঁধে আরও স্বাস্থ্যহীন চেয়ে is
, তাই এখানে কোন যৌক্তিক পার্থক্য নেই। ডকুমেন্টেশন দেখুন :
অবজেক্ট আইডেন্টিটির জন্য অপারেটর is
এবং is not
পরীক্ষা: x is y
সত্য যদি x এবং y একই বস্তু হয় true x is not y
বিপরীত সত্যের মান দেয়।
is not
বিশেষভাবে পাইথন এ জন্য প্রদান করা হয় ব্যাকরণ ভাষার জন্য একটি পাঠযোগ্যতা উন্নতি হিসাবে:
comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
এবং তাই এটি পাশাপাশি ব্যাকরণের একক উপাদান।
অবশ্যই, এটি একই পার্স করা হয় না:
>>> import ast
>>> ast.dump(ast.parse('x is not None').body[0].value)
"Compare(left=Name(id='x', ctx=Load()), ops=[IsNot()], comparators=[Name(id='None', ctx=Load())])"
>>> ast.dump(ast.parse('not x is None').body[0].value)
"UnaryOp(op=Not(), operand=Compare(left=Name(id='x', ctx=Load()), ops=[Is()], comparators=[Name(id='None', ctx=Load())]))"
কিন্তু তারপর বাইট কম্পাইলার আসলে অনুবাদ করবে not ... is
করার is not
:
>>> import dis
>>> dis.dis(lambda x, y: x is not y)
1 0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 COMPARE_OP 9 (is not)
9 RETURN_VALUE
>>> dis.dis(lambda x, y: not x is y)
1 0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 COMPARE_OP 9 (is not)
9 RETURN_VALUE
সুতরাং পাঠযোগ্যতার স্বার্থে এবং ভাষাটি যেমন ইচ্ছা তেমনভাবে ব্যবহার করার জন্য দয়া করে ব্যবহার করুন is not
।
এটি ব্যবহার না করা বুদ্ধিমানের কাজ নয়।
is not
এটি নিজের অধিকারে অপারেটর। লাইক!=
। যদি আপনি চানnot x is None
তাহলে আপনার কাছে ব্যবহার করা উচিৎnot a == b
উপরa != b
।