পাইথনে নাল বস্তু?


উত্তর:


1625

পাইথনে, 'নাল' অবজেক্টটি সিঙ্গলটন None

"অদ্বিতীয়তা" এর জন্য জিনিসগুলি পরীক্ষা করার সর্বোত্তম উপায় হ'ল পরিচয় অপারেটরটি ব্যবহার করা is:

if foo is None:
    ...

125
egg is Noneওভার বাছাইয়ের কারণ egg == None: পরবর্তীটি ওভারলোড হওয়া যাবে এবং কোনওটির সাথে বৈধ বস্তুর তুলনা করার সময় ভেঙে পড়ার সম্ভাবনা রয়েছে (এটি কীভাবে কার্যকর হয় তার উপর নির্ভর করে, তবে আপনি সবাইকে বিবেচনায় না নিয়ে কারও সাথে তুলনা করা আশা করেন না, আপনি কি?) , isসর্বদা একই কাজ করে।

94
পাইথন ডিজাইনাররা কেন কেবল "নাল" বেছে নিলেন। শুধু আলাদা হতে হবে আপনি না! ;)
বিদার

35
@ বিদার 'কিছুই নেই' কোনও জিনিসের অভাব নয় (যেমন 'নাল' হ'ল নাল রেফারেন্স), এটি একটি আসল অবজেক্ট। 'ননটাইপ' ব্যতীত অন্য কোনও ধরণের কোনও জিনিসের জন্য আপনি কখনই 'নন' অবজেক্ট পাবেন না। এটি কোনও ভাষা ধারণাও নয় .. এটি পাইথনের ভাষায় নির্মিত হয়নি, এটি পাইথনের স্ট্যান্ডার্ড লাইব্রেরির অংশ।
কোনওটি

11
@ naught101 এটি কোনও উদ্দেশ্য করে না; পয়েন্টার কোন ধারণা আছে। আপনি যদি সিটিপস লাইব্রেরি ব্যবহার করছেন তবে ঠিকানা শূন্যের প্রতিশব্দ হিসাবে কোনওটিই ব্যবহার করা হবে না তবে এখনও 'নাল রেফারেন্স' এর কোনও ভাষা ধারণা নেই। পাইথনে, আপনি সর্বদা কোনও না কোনও বস্তুর রেফারেন্স রেখেছিলেন, এমনকি যদি সেই বস্তুটি কোনও না হয়। আমি সন্দেহ করি এটি ভাষাটি ব্যাপকভাবে সরল করে।
রাশিও

5
'বিলিয়ন ডলারের ভুল' ব্যাখ্যা করে দুর্দান্ত উপস্থাপনাটি হ'ল নাল রেফ: ইনকিউকিউ / উপস্থাপনা / … নাল পরিবর্তে অন্যান্য বিকল্পগুলি হ'ল বিকল্পসমূহ, বা হতে পারে (কাস্টম) প্রকার।
মাইকেল ট্রাউ

133

None, পাইথনের নাল?

কোন ব্যাপার nullপাইথন মধ্যে, পরিবর্তে আছে None। যেমন ইতিমধ্যে বলা হয়েছে পরীক্ষার সর্বাধিক সঠিক উপায় যা Noneমান হিসাবে কিছু দেওয়া হয়েছে তা হ'ল isপরিচয় অপারেটর, যা পরীক্ষা করে যে দুটি ভেরিয়েবল একই বস্তুকে বোঝায় to

>>> foo is None
True
>>> foo = 'bar' 
>>> foo is None
False

অধিকার

আছে এবং শুধুমাত্র এক হতে পারে None

Noneক্লাসের একমাত্র উদাহরণ এবং সেই ক্লাসটি NoneTypeইনস্ট্যান্ট করার জন্য আরও যে কোনও প্রচেষ্টা হ'ল একই বস্তুটি ফিরে আসবে, যা Noneএকটি সিঙ্গলটন করে। পাইথনে আগত নবীরা প্রায়শই ত্রুটি বার্তাগুলি দেখতে পান NoneTypeযা এটি কী এবং তা অবাক করে। এটি আমার ব্যক্তিগত মত যে এই বার্তাগুলি কেবল নাম Noneদ্বারা উল্লেখ করতে পারে কারণ আমরা শীঘ্রই দেখতে পাচ্ছি, Noneঅস্পষ্টতার খুব কম জায়গা ছেড়ে যায়। সুতরাং আপনি যদি TypeErrorএমন কোনও বার্তা দেখেন যা উল্লেখ করে যে এটি NoneTypeকরতে পারে না বা এটি করতে পারে না, কেবলমাত্র জেনে রাখুন যে এটি কেবল এটিই Noneএমনভাবে ব্যবহৃত হচ্ছে যা এটি করতে পারে না।

এছাড়াও, Noneপাইথন শুরু করার সাথে সাথে এটি মডিউল, শ্রেণি বা ফাংশনে হোক না কেন এটি যে কোনও জায়গা থেকে ব্যবহারের জন্য উপলব্ধ। NoneTypeবিপরীতে নয়, Noneএর ক্লাসের জন্য জিজ্ঞাসা করে আপনার প্রথমে এটির একটি রেফারেন্স পাওয়া দরকার ।

>>> NoneType
NameError: name 'NoneType' is not defined
>>> type(None)
NoneType

আপনি Noneপাইথনের পরিচয় ফাংশনটির স্বতন্ত্রতা পরীক্ষা করতে পারেন id()। এটি কোনও অবজেক্টকে নির্ধারিত অনন্য নম্বর প্রদান করে, প্রতিটি বস্তুর একটি থাকে। যদি দুটি ভেরিয়েবলের আইডি একই হয় তবে তারা বাস্তবে একই বস্তুর দিকে নির্দেশ করে।

>>> NoneType = type(None)
>>> id(None)
10748000
>>> my_none = NoneType()
>>> id(my_none)
10748000
>>> another_none = NoneType()
>>> id(another_none)
10748000
>>> def function_that_does_nothing(): pass
>>> return_value = function_that_does_nothing()
>>> id(return_value)
10748000

None ওভাররাইট করা যায় না

পাইথনের অনেক পুরানো সংস্করণে (২.৪ এর আগে) পুনরায় সাইন করা সম্ভব হয়েছিল None, তবে আর নয়। এমনকি কোনও শ্রেণি বৈশিষ্ট্য হিসাবে বা কোনও ফাংশনের সীমানায় নয়।

# In Python 2.7
>>> class SomeClass(object):
...     def my_fnc(self):
...             self.None = 'foo'
SyntaxError: cannot assign to None
>>> def my_fnc():
        None = 'foo'
SyntaxError: cannot assign to None

# In Python 3.5
>>> class SomeClass:
...     def my_fnc(self):
...             self.None = 'foo'
SyntaxError: invalid syntax
>>> def my_fnc():
        None = 'foo'
SyntaxError: cannot assign to keyword

সুতরাং এটি ধরে নেওয়া নিরাপদ যে সমস্ত Noneতথ্যসূত্র একই রকম। কোনও "রীতি" নেই None

অপারেটর Noneব্যবহারের জন্য পরীক্ষা করাis

কোড লেখার সময় আপনি এই জাতীয় অদ্বিতীয়তার জন্য পরীক্ষা করার জন্য প্রলুব্ধ হতে পারেন:

if value==None:
    pass

অথবা এই মত মিথ্যা জন্য পরীক্ষা

if not value:
    pass

এর প্রভাবগুলি এবং আপনার স্পষ্ট হওয়া কেন প্রায়ই ভাল ধারণা হয় তা বুঝতে হবে।

কেস 1: একটি মান হয় কিনা তা পরীক্ষা করা None

কেন এই কাজ

value is None

বরং

value==None

প্রথমটি এর সমতুল্য:

id(value)==id(None)

যদিও অভিব্যক্তিটি value==Noneবাস্তবে এটি প্রয়োগ করা হয়

value.__eq__(None)

মানটি যদি সত্যিই হয় Noneতবে আপনি যা প্রত্যাশা করেছিলেন তা পাবেন।

>>> nothing = function_that_does_nothing()
>>> nothing.__eq__(None)
True

বেশিরভাগ সাধারণ ক্ষেত্রে ফলাফলটি একই রকম হয় তবে __eq__()পদ্ধতিটি এমন একটি দরজা খোলে যা নির্ভুলতার কোনও গ্যারান্টি দেয়, কারণ এটি একটি শ্রেণিতে বিশেষ আচরণ প্রদানের জন্য ওভাররাইড করা যেতে পারে।

এই শ্রেণি বিবেচনা করুন।

>>> class Empty(object):
...     def __eq__(self, other):
...         return not other

তাই আপনি যদি এটি ব্যবহার করে দেখুন Noneএবং এটি কাজ করে

>>> empty = Empty()
>>> empty==None
True

তবে তারপরে এটি খালি স্ট্রিংয়েও কাজ করে

>>> empty==''
True

এবং এখনো

>>> ''==None
False
>>> empty is None
False

কেস ২: Noneবুলিয়ান হিসাবে ব্যবহার করা

নিম্নলিখিত দুটি পরীক্ষা

if value:
    # do something

if not value:
    # do something

আসলে হিসাবে মূল্যায়ন করা হয়

if bool(value):
    # do something

if not bool(value):
    # do something

Noneএটি একটি "মিথ্যা", যার অর্থ একটি বুলিয়ানকে কাস্ট করা হলে এটি ফিরে আসবে Falseএবং notঅপারেটর প্রয়োগ করা হলে এটি ফিরে আসবে True। তবে লক্ষ করুন যে এটি কোনও সম্পত্তি নয় NoneFalseনিজের পাশাপাশি , সম্পত্তি খালি তালিকা, টিপলস, সেট, ডিক্টস, স্ট্রিং, পাশাপাশি 0 দ্বারা ভাগ করে নেওয়া হয়েছে এবং ক্লাস থেকে আসা সমস্ত বস্তু যা __bool__()ম্যাজিক পদ্ধতিতে ফিরে আসার জন্য প্রয়োগ করে False

>>> bool(None)
False
>>> not None
True

>>> bool([])
False
>>> not []
True

>>> class MyFalsey(object):
...     def __bool__(self):
...         return False
>>> f = MyFalsey()
>>> bool(f)
False
>>> not f
True

সুতরাং নিম্নলিখিত পদ্ধতিতে ভেরিয়েবলগুলির জন্য পরীক্ষা করার সময়, আপনি কী পরীক্ষা করছেন বা বাদ দিচ্ছেন সে সম্পর্কে অতিরিক্ত সচেতন হন:

def some_function(value=None):
    if not value:
        value = init_value()

উপরের দিকে, init_value()যখন মানটি নির্দিষ্টভাবে সেট করা থাকে তখন আপনি কল করতে চেয়েছিলেন None, বা আপনি যে কোনও মান সেট করেছেন 0, বা খালি স্ট্রিং, বা একটি খালি তালিকাটিও আরম্ভের সূচনা করতে হবে? যেমন আমি বলেছি, মনোযোগ দিন। যেহেতু প্রায়শই পাইথনের স্পষ্টতই বিষয়টি অন্তর্নিহিতের থেকে ভাল

None প্রস্তুতিতে

None সিগন্যাল মান হিসাবে ব্যবহৃত

Noneপাইথনে একটি বিশেষ মর্যাদা রয়েছে। এটি একটি প্রিয় বেসলাইন মান কারণ অনেক অ্যালগরিদম এটিকে ব্যতিক্রমী মান হিসাবে বিবেচনা করে। এ জাতীয় পরিস্থিতিতে এটি একটি পতাকা হিসাবে ব্যবহার করে সিগন্যাল করতে পারে যে কোনও শর্তের জন্য কিছু বিশেষ হ্যান্ডলিং প্রয়োজন (যেমন একটি ডিফল্ট মান নির্ধারণ)।

আপনি Noneকোনও ফাংশনের কীওয়ার্ড আর্গুমেন্টগুলিকে বরাদ্দ করতে পারেন এবং তারপরে এটি স্পষ্টভাবে পরীক্ষা করতে পারেন।

def my_function(value, param=None):
    if param is None:
        # do something outrageous!

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

value = getattr(some_obj, 'some_attribute', None)
if value is None:
    # do something spectacular!

অ-বিদ্যমান কীটি অ্যাক্সেস করার চেষ্টা করার সময় ডিফল্টরূপে একটি অভিধানের get()পদ্ধতি ফিরে আসে None:

>>> some_dict = {}
>>> value = some_dict.get('foo')
>>> value is None
True

আপনি যদি সাবস্ক্রিপ্ট স্বরলিপি ব্যবহার করে এটি অ্যাক্সেস করার চেষ্টা করেন তবে একটি KeyErrorউত্থাপিত হবে

>>> value = some_dict['foo']
KeyError: 'foo'

অনুরূপভাবে যদি আপনি কোনও অ-বিদ্যমান আইটেম পপ করার চেষ্টা করেন

>>> value = some_dict.pop('foo')
KeyError: 'foo'

যা আপনি সাধারণত সেট করা একটি ডিফল্ট মান দিয়ে দমন করতে পারেন None

value = some_dict.pop('foo', None)
if value is None:
    # booom!

None পতাকা এবং বৈধ মান উভয় হিসাবে ব্যবহৃত

উপরোক্ত বর্ণিত Noneপ্রয়োগগুলি প্রয়োগের প্রয়োগ যখন এটি একটি বৈধ মান হিসাবে বিবেচনা করা হয় না, তবে আরও বিশেষ কিছু করার সংকেতের মতো। এমন পরিস্থিতি রয়েছে যেখানে মাঝে মাঝে এটি Noneকোথা থেকে এসেছে তা জেনে রাখা গুরুত্বপূর্ণ কারণ এটি একটি সংকেত হিসাবে ব্যবহৃত হলেও এটি ডেটার অংশও হতে পারে।

আপনি যখন কোনও অ্যাট্রিবিউটটির বৈশিষ্ট্যটির জন্য getattr(some_obj, 'attribute_name', None)ফিরে আসার সাথে জিজ্ঞাসা করছেন তখন আপনাকে Noneবলবে না যে আপনি যে বৈশিষ্ট্যটি অ্যাক্সেস করার চেষ্টা করছেন সেটি সেট করা হয়েছে Noneবা এটি কোনওভাবে অবজেক্ট থেকে অনুপস্থিত ছিল। অভিধান যেমন কোনও কী থেকে অ্যাক্সেস করার সময় একই অবস্থা some_dict.get('some_key'), আপনি জানেন না যে some_dict['some_key']অনুপস্থিত বা এটি সবেমাত্র সেট করা আছে None। আপনার যদি সেই তথ্যের প্রয়োজন হয় তবে এটিকে হ্যান্ডেল করার স্বাভাবিক উপায় হ'ল কোনও try/exceptনির্মাণের মধ্যে থেকে অ্যাট্রিবিউট বা কীটি সরাসরি অ্যাক্সেস করার চেষ্টা করা :

try:
    # equivalent to getattr() without specifying a default
    # value = getattr(some_obj, 'some_attribute')
    value = some_obj.some_attribute
    # now you handle `None` the data here
    if value is None:
        # do something here because the attribute was set to None
except AttributeError:
    # we're now hanling the exceptional situation from here.
    # We could assign None as a default value if required.
    value = None 
    # In addition, since we now know that some_obj doesn't have the
    # attribute 'some_attribute' we could do something about that.
    log_something(some_obj)

একইভাবে ডিকের সাথে:

try:
    value = some_dict['some_key']
    if value is None:
        # do something here because 'some_key' is set to None
except KeyError:
    # set a default 
    value = None
    # and do something because 'some_key' was missing
    # from the dict.
    log_something(some_dict)

উপরোক্ত দুটি উদাহরণ দেখায় যে কীভাবে অবজেক্ট এবং ডিকশনারি কেসগুলি পরিচালনা করতে হয়, ফাংশনগুলি সম্পর্কে কী বলা যায়? একই জিনিস, তবে আমরা সেই প্রান্তে ডাবল অ্যাসিরিস্টস কীওয়ার্ড আর্গুমেন্টটি ব্যবহার করি:

def my_function(**kwargs):
    try:
        value = kwargs['some_key'] 
        if value is None:
            # do something because 'some_key' is explicitly 
            # set to None
    except KeyError:
        # we assign the default
        value = None
        # and since it's not coming from the caller.
        log_something('did not receive "some_key"')

None শুধুমাত্র একটি বৈধ মান হিসাবে ব্যবহৃত

যদি আপনি দেখতে পান যে পতাকাগুলি এবং ডেটার try/exceptমধ্যে পার্থক্য করার জন্য আপনার কোডটি উপরের প্যাটার্ন দিয়ে খালি রয়েছে তবে কেবলমাত্র অন্য পরীক্ষার মানটি ব্যবহার করুন। এমন একটি প্যাটার্ন রয়েছে যেখানে বৈধ মানগুলির সেটের বাইরে থাকা কোনও মান একটি ডেটা স্ট্রাকচারে ডেটার অংশ হিসাবে সন্নিবেশ করা হয় এবং বিশেষ শর্তগুলি (যেমন সীমানা, রাজ্য, ইত্যাদি) নিয়ন্ত্রণ এবং পরীক্ষা করতে ব্যবহৃত হয়। এই জাতীয় মানকে একটি সেন্ডিনেল বলা হয় এবং এটি সিগন্যাল হিসাবে ব্যবহার করার পথে ব্যবহার করা যেতে পারে । পাইথনে সেন্ডিনেল তৈরি করা তুচ্ছ।NoneNoneNone

undefined = object()

undefinedবস্তুর উপরে অনন্য এবং আরো অনেক কিছু একটি প্রোগ্রাম সুদ হতে পারে না, এটা এইভাবে জন্য একটি চমৎকার প্রতিস্থাপন এর Noneএকটি পতাকা। কিছু সতর্কতা প্রয়োগ করা হয়, কোডের পরে সে সম্পর্কে আরও।

ফাংশন সহ

def my_function(value, param1=undefined, param2=undefined):
    if param1 is undefined:
        # we know nothing was passed to it, not even None
        log_something('param1 was missing')
        param1 = None


    if param2 is undefined:
        # we got nothing here either
        log_something('param2 was missing')
        param2 = None

ডিক দিয়ে

value = some_dict.get('some_key', undefined)
if value is None:
    log_something("'some_key' was set to None")

if value is undefined:
    # we know that the dict didn't have 'some_key'
    log_something("'some_key' was not set at all")
    value = None

একটি বস্তু সঙ্গে

value = getattr(obj, 'some_attribute', undefined) 
if value is None:
    log_something("'obj.some_attribute' was set to None")
if value is undefined:
    # we know that there's no obj.some_attribute
    log_something("no 'some_attribute' set on obj")
    value = None

যেমনটি আমি আগে উল্লেখ করেছি কাস্টম সেন্ডিনেলগুলি কিছু ক্যাভ্যাট নিয়ে আসে। প্রথমত, তারা কীওয়ার্ড নয় None, তাই অজগর তাদের সুরক্ষা দেয় না। আপনি নিজের undefinedউপরের যে কোনও সময় যে কোনও সময় এটি সংজ্ঞায়িত মডিউলে যে কোনও জায়গায় ওভাররাইট করতে পারেন , সুতরাং কীভাবে আপনি তাদের প্রকাশ ও ব্যবহার করতে পারেন সে সম্পর্কে সতর্কতা অবলম্বন করুন। এরপরে, ফিরে আসা উদাহরণটি object()কোনও সিঙ্গলটন নয়, যদি আপনি এই কলটি 10 ​​বার করেন তবে আপনি 10 টি বিভিন্ন বস্তু পেয়ে যাবেন। অবশেষে, একটি প্রেরণেলীর ব্যবহার অত্যন্ত আইডিসিঙ্ক্র্যাটিক। কোনও সেন্ডিনেল এটি ব্যবহৃত গ্রন্থাগারের সাথে সুনির্দিষ্ট এবং যেমন এর ব্যাপ্তিটি সাধারণত গ্রন্থাগারের অভ্যন্তরের মধ্যে সীমাবদ্ধ থাকে। এটি "ফুটো" আউট করা উচিত নয়। বাহ্যিক কোডগুলি কেবল এটি সম্পর্কে সচেতন হওয়া উচিত, যদি তাদের উদ্দেশ্য গ্রন্থাগারের এপিআই প্রসারিত বা পরিপূরক করা হয়।


কি সম্পর্কে: কিছুই == জিনিস?
hkBst

@hkBst আমি আপনার প্রশ্নটি অনুমান করছি যে পাইথন কীভাবে সাম্যকে মূল্যায়ন করে about এই স্ট্যাকওভারফ্লোটি
মাইকেল একোকা

আহ, তাই আইআইইউসি যা সাধারণত এখনও কলিং জিনিস শেষ করে দেয় __ eq__? সেক্ষেত্রে আমি আমার পরামর্শ প্রত্যাহার করি।
hkBst

@ মিশেলএকোকা এই চিত্তাকর্ষক এবং দরকারী তথ্যের জন্য আপনি উত্সটি ভাগ করতে পারেন।
অনিধ্য ভট্টনগর

মানসম্মত চর্চা. আপনি মাধ্যমে যাচ্ছি থেকে এটা কিছু নির্দেশ জানতে পারেন পাইথন টিউটোরিয়াল , কিন্তু জনপ্রিয় প্রকল্প 'সোর্স কোড পড়া দ্রুত নিজেকে মধ্যে চুবান আমার এক নম্বর উপদেশ কথ্য পাইথন
মাইকেল একোকা

67

এটিকে অন্যান্য ভাষাগুলির মতো নਾਲ বলা হয় না, তবে None। এই অবজেক্টের সবসময় কেবলমাত্র একটি উদাহরণ রয়েছে, তাই আপনি চাইলে x is Noneপরিবর্তে (পরিচয় তুলনা) এর সাথে সমতার জন্য পরীক্ষা x == Noneকরতে পারেন।


25
আমি পুনঃ-ইনস্ট্যান্ট করে পাইথন ভাঙ্গার একটি উপায় খুঁজতে যাচ্ছি None। তারপরে যারা স্মার্ট লোকেরা তাদের তুলনা করেছেন NoneTypeতারা সবাই বিজয়ী হবেন!
জেনেক্সার

28

পাইথন, একটি মান অভাবে প্রতিনিধিত্ব করার আপনি ব্যবহার করতে পারেন কোনটি মান ( types.NoneType.None অবজেক্টের জন্য) এবং "" (অথবা lên (0) == ) স্ট্রিং জন্য। অতএব:

if yourObject is None:  # if yourObject == None:
    ...

if yourString == "":  # if yourString.len() == 0:
    ...

"==" এবং "এর" মধ্যে পার্থক্য সম্পর্কে, "==" ব্যবহার করে অবজেক্টের পরিচয়ের জন্য পরীক্ষা করা যথেষ্ট হওয়া উচিত। তবে অপারেশনটি "যেহেতু" অবজেক্ট আইডেন্টিটি অপারেশন হিসাবে সংজ্ঞায়িত করা হয়েছে, তাই সম্ভবত এটি "==" না বলে এটি ব্যবহার করা আরও সঠিক। এমনকি গতির পার্থক্য আছে কিনা তা নিশ্চিত নয়।

যাইহোক, আপনি এক নজরে দেখতে পারেন:


8
আমি যতদূর জানি, (0 == মিথ্যা) প্রতিটি প্রোগ্রামিং ভাষায় সত্য দেয়। এর কারণ এটি মিথ্যা 0 এবং "সত্য" হিসাবে কোডে কোড করা হয় যা 0 হয় না, তবে যাইহোক, দয়া করে এটি "অপারেটর" অপারেটর "==" একের মতো নয়। এটি জাভাতে "==" এবং "সমান" এর মধ্যে কমবেশি একই পার্থক্য। অপারেটরটি সত্যই, দুটি ওবিজেেক্টস একই (একই উদাহরণ এবং একই বিষয় নয়) তা পরীক্ষা করে!
পাওলো রোভেলি

12
পাওলো, এফওয়াইআই, (0 == মিথ্যা) প্রতিটি প্রোগ্রামিং ভাষায় সত্য ফিরে আসে না। একটি দ্রুত পাল্টা উদাহরণ স্কেলা হবে, যেখানে (0 == মিথ্যা) মিথ্যা প্রত্যাবর্তন করে এবং আমি নিশ্চিত যে স্কেলা একমাত্র প্রোগ্রামিং ভাষা নয় যা কোনও বুলিয়ান সাথে তুলনা করার সময় মিথ্যা ফিরিয়ে দেয়।
রব উইল্টন

2
ঠিক আছে বুঝেছি! তারপরে, বেশিরভাগ প্রোগ্রামিং ভাষায় বলি।
পাওলো রোভেলি

3
জাভাস্ক্রিপ্টে, 0 == falseরিটার্নের কারণটি trueহ'ল ডাবল-ইকুয়াল অপারেটর টাইপের জবরদস্তি করে। ট্রিপল-ইক্যুয়াল অপারেটরের সাথে, তবে 0 === falseফেরত দেয় false, কারণ 'সংখ্যা' এবং 'বুলিয়ান' বিভিন্ন ধরণের।
জে.কেদেব

1
@ পাওলো রোভেলি, লুয়া, রুবি এবং ক্লোজারে 0 জনকে trueশর্ত হিসাবে বিবেচনা করা হয়। মরিচা এবং গো, 0এবং false বিভিন্ন ধরণের যা সমতার জন্য তুলনা করা যায় না।
স্কুটার-ডাঙ্গাল

0

নাল একটি বিশেষ অবজেক্টের মতো:

>>>type(None)
<class 'NoneType'>

কোনও বস্তু 'ননটাইপ' শ্রেণিতে রয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন:

>>>variable = None
>>>variable is None
True

পাইথন ডক্সে আরও তথ্য পাওয়া যায়


-1

প্রতি সত্য মান পরীক্ষামূলক , 'কিছুই নয়' সরাসরি মিথ্যা হিসাবে পরীক্ষা তাই সহজ অভিব্যক্তি চলা হবে:

if not foo:

3
না, তা হবে না। এই অভিব্যক্তিটি কোনও মিথ্যা মানের Trueজন্য ফিরে আসবে , শুধু নয় । None
insert_name_here

সত্য, এবং সরল "যদি foo না হয়:" মূল প্রশ্নটির সঠিক উত্তর দেয় না, যেমনটি বলা হয়েছে। যাইহোক, পাইথনটি গতিশীলভাবে টাইপ করা হয় এবং সিনট্যাক্স প্রোটোকল হ্রাস করার জন্য আমন্ত্রণ জানায় তাই সহজ, অনুরূপ নির্মাণগুলি বিবেচনা করা আমার পক্ষে এটি বৈধ বলে মনে হয়।
আর্টিজের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.