“কোনটিই নয়” এবং “== কিছুই নয়” এর মধ্যে পার্থক্য কী?


324

আমি সম্প্রতি এই বাক্য গঠনটি পেরিয়ে এসেছি, আমি পার্থক্য সম্পর্কে অসচেতন।

কেউ যদি আমাকে পার্থক্য বলতে পারে তবে আমি এটির প্রশংসা করব।



1
এটা কি তোমার প্রশ্নের উত্তর? "==" এবং "এর" এর মধ্যে কি পার্থক্য রয়েছে?
জুন

এটি অস্পষ্ট নয় যদি এই প্রশ্নটি isবনাম সম্পর্কে ==, বা ঠিক Noneকী এবং কীভাবে আচরণের মধ্যে উভয় প্রেক্ষাপটে ভিন্নতা রয়েছে ( প্রকৃতির কারণ এখানে আমি এখানে এসেছি) সম্পর্কে) অস্পষ্টতা এবং ওপি প্রতিক্রিয়াগুলির অভাবের ভিত্তিতে ... আমি আশ্চর্য হয়েছি যে এটির অনেকগুলি উত্সাহ রয়েছে। আমি ... মানে ... প্রশ্নটি এমনকি আসল
প্রশ্নেও

উত্তর:


291

উত্তরটি এখানে ব্যাখ্যা করা হয়েছে

উদ্ধৃতি থেকে:

একটি শ্রেণি যে কোনওভাবেই তার তুলনা তুলনা বাস্তবায়িত করতে পারে, এবং এটি কোনওটির বিপরীতে তুলনা করা বেছে নিতে পারে যার অর্থ কিছু নেই (যা আসলে বোঝায়; যদি কেউ আপনাকে স্ক্র্যাচ থেকে নন অবজেক্টটি বাস্তবায়ন করতে বলে, অন্যথায় কীভাবে আপনি এটি তুলনা করতে পারবেন? নিজের বিরুদ্ধে?)।

ব্যবহারিকভাবে বলতে গেলে, কাস্টম তুলনা অপারেটরগুলি বিরল বলে খুব বেশি পার্থক্য নেই। তবে আপনার is Noneসাধারণ নিয়ম হিসাবে ব্যবহার করা উচিত ।


57
এছাড়াও, :) এর is Noneচেয়ে কিছুটা কম (~ 50%) দ্রুত== None
নাস বানভ

26
@ মায়ুসুফ ৩: >>> সময়কাল T টাইমার ('কিছুই নয় কিছুই')। সময়কাল () | 0.225 | >>> টাইমাইট.টাইমার ('কিছুই নয় == কিছুই নয়')। সময়কাল () | 0.328
নাস বনভ

9
@ মায়ুসুফ ৩ এর জন্য আপনার সত্যিকারের কোনও প্রমাণের দরকার নেই। isমূলত, পূর্ণসংখ্যার তুলনা যখন ==কেবলমাত্র রেফারেন্সগুলি সমাধান করে তা নয় তবে মূল্যবোধগুলির তুলনা করা হয় যা মিলতে পারে না।
পাইজুসন

4
"এর" পক্ষে একটি। যখন কোনও ভেরিয়েবল হয় হয় কিছুই নয় বা এমন কিছু হতে পারে যার সাথে কোনওটিরই অর্থপূর্ণ তুলনা হয় না। উদাহরণস্বরূপ, একটি চলক একটি numpy.array বা কিছুই না (আমার নির্দিষ্ট ক্ষেত্রে) হতে পারে।
Jblasco

3
@ টিমলডউইনস্কি যা বলছেন তাতে আমি যুক্ত করতে চাই: প্রথমত, কেউ যদি কাউকেই একটি বিশেষ কেস হিসাবে তৈরি করার জন্য সমতা অপারেটরটিকে অগ্রাহ্য করা পছন্দ করে, তবে আমরা তাদের অন্যথায় কেন বলতে চাই? দ্বিতীয়ত, "এখানে একটি হওয়া উচিত - এবং এটি করার পক্ষে কেবলমাত্র একটি - স্পষ্ট উপায়" " এবং কোনও কিছুর সমান কিনা তা যাচাই করার সুস্পষ্ট উপায় হ'ল সাম্যতা অপারেটর।
যুবাল

162
class Foo:
    def __eq__(self,other):
        return True
foo=Foo()

print(foo==None)
# True

print(foo is None)
# False

একটি ভাল উদাহরণ দিয়ে বুঝতে এত সহজ, এর জন্য ধন্যবাদ!
বসজ

56

এই ক্ষেত্রে, তারা একই রকম। Noneএটি একটি সিঙ্গলটন অবজেক্ট (কেবলমাত্র একটিতে উপস্থিত রয়েছে None)।

is বস্তুটি একই বস্তু কিনা তা পরীক্ষা করে দেখা যায়, যখন == কেবল তারা সমতুল্য কিনা তা পরীক্ষা করে।

উদাহরণ স্বরূপ:

p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent

তবে যেহেতু কেবলমাত্র একজন রয়েছে None, সেগুলি সর্বদা একই isথাকবে এবং সত্য ফিরে আসবে।

p = None
q = None
p is q # True because they are both pointing to the same "None"

17
এই উত্তরটি নীচে বেন Hoffstein এর উত্তরে ব্যাখ্যা, সঠিক নয় stackoverflow.com/questions/3257919/is-none-vs-none/... । এমনকি নিজস্ব কাস্টম সমতা অপারেটর সহ কিছু শ্রেণীর উদাহরণ না হলেও x == Noneমূল্যায়ন করতে Trueপারে । xNone
সর্বোচ্চ

5

আপনি যদি অদ্ভুত ব্যবহার করেন,

if np.zeros(3)==None: pass

নম্পি যখন উপাদানটির সাথে তুলনা করে তখন আপনাকে ত্রুটি দেবে


3

আপনি কারও সাথে তুলনা করছেন তার উপর এটি নির্ভর করে। কিছু শ্রেণিতে কাস্টম তুলনা পদ্ধতি রয়েছে যা == Noneথেকে পৃথকভাবে আচরণ করে is None

বিশেষত আউটপুট a == None এমনকি বুলিয়ান হতে হবে না !! - বাগের ঘন ঘন কারণ।

নির্দিষ্ট উদাহরণের জন্য একটি নির্লজ্জ অ্যারে নিন যেখানে ==তুলনাটি প্রাথমিকভাবে প্রয়োগ করা হয়:

import numpy as np
a = np.zeros(3) # now a is array([0., 0., 0.])
a == None #compares elementwise, outputs array([False, False, False]), i.e. not boolean!!!
a is None #compares object to object, outputs False
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.