"এক্স ওয়াইতে নেই" বা "এক্সে y নয়"


97

সদস্যতার জন্য পরীক্ষা করার সময়, আমরা ব্যবহার করতে পারি:

x not in y

বা বিকল্পভাবে:

not x in y

এই অভিব্যক্তি উপর নির্ভর করে অনেক সম্ভব প্রেক্ষিতে হতে পারে xএবং y। এটি একটি স্ট্রিং চেক, তালিকার সদস্যতা, ডিক কী অস্তিত্বের উদাহরণস্বরূপ হতে পারে।

  • দুটি রূপ কি সর্বদা সমান?
  • পছন্দসই বাক্য গঠন আছে কি?

উত্তর:


112

তারা সর্বদা একই ফলাফল দেয়।

প্রকৃতপক্ষে, not 'ham' in 'spam and eggs'"ইন" অপারেশন না করে এবং পরে ফলাফলটিকে উপেক্ষা করার পরিবর্তে একক "অপারেশন" নয়, পরিচালনা করার জন্য বিশেষ কেস হিসাবে উপস্থিত বলে মনে হয়:

>>> import dis

>>> def notin():
    'ham' not in 'spam and eggs'
>>> dis.dis(notin)
  2           0 LOAD_CONST               1 ('ham')
              3 LOAD_CONST               2 ('spam and eggs')
              6 COMPARE_OP               7 (not in)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE    

>>> def not_in():
    not 'ham' in 'spam and eggs'
>>> dis.dis(not_in)
  2           0 LOAD_CONST               1 ('ham')
              3 LOAD_CONST               2 ('spam and eggs')
              6 COMPARE_OP               7 (not in)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE    

>>> def not__in():
    not ('ham' in 'spam and eggs')
>>> dis.dis(not__in)
  2           0 LOAD_CONST               1 ('ham')
              3 LOAD_CONST               2 ('spam and eggs')
              6 COMPARE_OP               7 (not in)
              9 POP_TOP             
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE        

>>> def noteq():
    not 'ham' == 'spam and eggs'
>>> dis.dis(noteq)
  2           0 LOAD_CONST               1 ('ham')
              3 LOAD_CONST               2 ('spam and eggs')
              6 COMPARE_OP               2 (==)
              9 UNARY_NOT           
             10 POP_TOP             
             11 LOAD_CONST               0 (None)
             14 RETURN_VALUE      

আমি প্রথমে ভেবেছিলাম যে তারা সর্বদা একই ফল দিয়েছে তবে এটি notকেবল নিজের চেয়ে কম নিম্নমানের লজিকাল নেগেটিশন অপারেটর, যা a in bঅন্য যে কোনও বুলিয়ান অভিব্যক্তির মতো সহজেই প্রয়োগ করা যেতে পারে , not inসেখানে সুবিধার্থে এবং স্বচ্ছতার জন্য আলাদা অপারেটর ছিল ।

উপরের বিচ্ছিন্নতা প্রকাশ করছিল! দেখে মনে হচ্ছে যে notস্পষ্টতই একটি লজিকাল নেগেটিশন অপারেটর হলেও ফর্মটি not a in bএকটি বিশেষ কেসযুক্ত যাতে এটি প্রকৃতপক্ষে সাধারণ অপারেটরটি ব্যবহার করে না। এটি not a in bআক্ষরিক হিসাবে একই অভিব্যক্তি তৈরি করে a not in b, কেবল একটি অভিব্যক্তি নয় যা একই মান হিসাবে ফলাফল করে।


4
মনে রাখবেন যে এটি কেবল একটি বাস্তবায়ন বিশদ। এমনকি not x in xsদস্তাবেজগুলিতে একটি উল্লেখও পাই না ।
ফ্যান্ট0 মি

4
@ ফ্যান্ট0 মি অবিলম্বে; পথ আপনি মনে অনুমিত করছি not x in xsহয় not (x in xs)। তবে সত্য যে এটি একই বাইটকোডকে x not in xsখুব স্পষ্টভাবে পার্স করার মাধ্যমে বাস্তবায়িত হয়েছিল তা প্রমাণ করে যে তাদের অবশ্যই সর্বদা অভিন্ন হতে হবে, not x == yবনামের মতো বিষয়গুলির বিপরীতে x != yযা একই ফলস্বরূপ দেওয়া উচিত , তবে তা করতে হবে না (বাস্তবায়নের উপর নির্ভর করে) __eq__এবং __ne__জড়িত)।
বেন

12
আপনি সিপিথন পিফহোল অপটিমাইজেশনে চলেছেন ; একটি সংকলন-সময় অপ্টিমাইজেশন যা জাইথন ​​এবং আয়রন পাইথনের মতো অন্যান্য পাইথন বাস্তবায়নগুলি উপেক্ষা বা অনুলিপি করতে মুক্ত (এটি ভাষা স্পেসিফিকেশনের অংশ নয়)।
মার্টিজন পিটারস

16

  1. না, কোন পার্থক্য নেই।

    অপারেটরটির not inবিপরীত সত্য মানটি সংজ্ঞায়িত করা হয় in

    - পাইথন ডকুমেন্টেশন

  2. আমি ধরে নিচ্ছি যে not inতারা পছন্দসই কারণ এটি আরও সুস্পষ্ট এবং তারা এটির জন্য একটি বিশেষ কেস যুক্ত করেছে।


8

এগুলির অর্থ একরকম, তবে পাইকোডেস্টাইল পাইথন স্টাইল গাইড চেকার (পূর্বে পেপ 8 নামে পরিচিত) নিয়ম E713not inঅপারেটরটিকে পছন্দ করে :

E713: সদস্যপদ জন্য পরীক্ষা করা উচিত not in

আরও দেখুন "পাইথন if x is not Noneবা if not x is None?" শৈলীর একটি খুব অনুরূপ পছন্দ জন্য।


3

অন্যরা ইতিমধ্যে এটি খুব স্পষ্ট করে দিয়ে গিয়েছে যে দুটি বিবৃতিটি বেশ নিম্ন স্তরের সমতুল্য।

যাইহোক, আমি মনে করি না যে কেউ এখনও যথেষ্ট জোর দিয়েছে যেহেতু এটি আপনার পছন্দ পছন্দ করে ফেলেছে, আপনার উচিত

আপনার কোডটি যতটা সম্ভব পঠনযোগ্য করে তুলুন এমন ফর্মটি চয়ন করুন।

এবং কারও কাছে যতটা সম্ভব পঠনযোগ্য নয় , এমনকি এটি অবশ্যই লক্ষ্য রাখার জন্য একটি দুর্দান্ত জিনিস। না, নিশ্চিত কোড যতটা সম্ভব পাঠযোগ্য হয় আপনাকে , যেহেতু আপনি এক কে সম্ভবত পরে এই কোডে ফিরে আসা এবং এটা পড়তে চেষ্টা করা হয়।


4
আপনি যদি একটি বড় দলে বা এমন কোডে কাজ করছেন যা কিছু সময়ের জন্য অচ্ছুত হওয়ার সম্ভাবনা রয়েছে তবে অন্য কারও এটি বজায় রাখার সম্ভাবনা বেশি।
টমি হার্বার্ট


1

কৃত্রিমভাবে তারা একই বক্তব্য। আমি তাড়াতাড়ি বলতে চাই যে 'ham' not in 'spam and eggs'পরিষ্কার অভিপ্রায় জানায় , তবে আমি এমন কোড এবং পরিস্থিতি দেখেছি যাতে not 'ham' in 'spam and eggs'অন্যগুলির চেয়ে পরিষ্কার অর্থ বোঝায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.