පයිතන්හි ඇති ශුන්‍ය වස්තුව ගැන සඳහන් කිරීම


1212

පයිතන්හි ඇති ශුන්‍ය වස්තුවට මා යොමු කරන්නේ කෙසේද?

Answers:


1652

පයිතන්හි, 'ශූන්‍ය' වස්තුව සිංගල්ටන් ය None.

"නොහික්මුණුකම" සඳහා දේවල් පරීක්ෂා කිරීමට හොඳම ක්‍රමය වන්නේ අනන්‍යතා ක්‍රියාකරු භාවිතා කිරීමයි is:

if foo is None:
    ...

128
නැවත තෝරා egg is Noneගැනීමට හේතුව egg == None: දෙවැන්න අධික ලෙස පැටවිය හැකි අතර වලංගු වස්තුවක් කිසිවක් සමඟ සංසන්දනය කිරීමේදී එය බිඳ වැටීමට ඉඩ ඇත (එය ක්‍රියාත්මක වන ආකාරය මත රඳා පවතී, නමුත් සෑම කෙනෙකුම කිසිවක් සමඟ සැසඳීමක් කරනු ඇතැයි ඔබ අපේක්ෂා නොකරයි නේද?) , isසෑම විටම එකම ලෙස ක්‍රියා කරයි.

95
ඇයි පයිතන් නිර්මාණකරුවන් "ශූන්‍ය" තෝරා නොගත්තේ? වෙනස් විය යුතුයි නේද? ;)
විදාර්

35
Id විදාර් 'කිසිවක්' යනු වස්තුවක lack නතාවක් නොවේ ('ශුන්‍ය' යනු ශුන්‍ය යොමු කිරීමක් ලෙස), එය සත්‍ය වස්තුවකි. 'NoNType' හැර වෙනත් කිසිම ආකාරයක වස්තුවක් සඳහා ඔබට 'කිසිවක්' වස්තුවක් ලැබෙන්නේ නැත. එය භාෂා සංකල්පයක් ද නොවේ .. එය පයිතන් භාෂාවට ගොඩනගා නැත, එය පයිතන්ගේ සම්මත පුස්තකාලයේ කොටසකි. කිසිවක් නැත! == (
ahem

11
no naught101 එයින් කිසිදු ප්‍රයෝජනයක් නොලැබේ. දර්ශකයන් පිළිබඳ සංකල්පයක් නොමැති නිසා. ඔබ ctypes පුස්තකාලය භාවිතා කරන්නේ නම්, කිසිවක් ශුන්‍ය ලිපින සඳහා සමාන පදයක් ලෙස භාවිතා නොකරනු ඇත, නමුත් 'ශුන්‍ය යොමු කිරීමක්' පිළිබඳ භාෂා සංකල්පයක් තවමත් නොමැත. පයිතන්හිදී, ඔබ සෑම විටම කිසියම් වස්තුවක් ගැන සඳහන් කිරීම අතහැර දමා ඇත. මෙය භාෂාව බෙහෙවින් සරල කරයි යැයි මම සැක කරමි.
රුෂියෝ

5
'ඩොලර් බිලියනයක වැරැද්ද' පැහැදිලි කරන විශිෂ්ට ඉදිරිපත් කිරීම: ref: infoq.com/presentations/… . ශුන්‍ය වෙනුවට වෙනත් විකල්ප විකල්ප හෝ සමහර විට (අභිරුචි) වර්ග වේ.
මයිකල් ට්‍රෝව්

140

None, පයිතන්ගේ ශූන්‍යය?

nullපයිතන් වල නැත ; ඒ වෙනුවට තියෙනවා None. දැනටමත් සඳහන් කර ඇති Noneපරිදි, යමක් වටිනාකමක් ලෙස ලබා දී ඇත්දැයි පරීක්ෂා කිරීමට වඩාත්ම නිවැරදි ක්‍රමය වන්නේ isවිචල්‍යයන් දෙකක් එකම වස්තුවකට යොමු වන බව පරීක්ෂා කරන අනන්‍යතා ක්‍රියාකරු භාවිතා කිරීමයි .

>>> 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 නැවත ලිවිය නොහැක

පයිතන්ගේ බොහෝ පැරණි අනුවාද වල (2.4 ට පෙර) නැවත පැවරීමට හැකි වූ 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

කේතය ලියන විට ඔබ වෙනුවෙන් ටෙස්ට් දීමට සිතිය හැකි Noneness මේ වගේ:

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__()ප්‍රති come ලය සමාන වනු ඇත, නමුත් ක්‍රමවේදය මඟින් කිසියම් නිරවද්‍යතාව සහතික කළ හැකි දොරක් විවෘත කරයි, මන්ද එය විශේෂ හැසිරීමක් ලබා දීම සඳහා පන්තියකදී අභිබවා යා හැකි බැවිනි.

මෙම පන්තිය සලකා බලන්න.

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

එබැවින් ඔබ එය උත්සාහ කර Noneඑය ක්‍රියාත්මක වේ

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

නමුත් පසුව එය හිස් නූල මත ද ක්රියා කරයි

>>> empty==''
True

තවම

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

2 වන අවස්ථාව: 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. කෙසේ වෙතත් එය සුවිශේෂී දේපලක් නොවන බව සලකන්න None. Falseතමාට අමතරව , දේපල හිස් ලැයිස්තු, ටුපල්, කට්ටල, නියෝග, නූල්, මෙන්ම 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 සං signal ා අගයක් ලෙස භාවිතා කරයි

Noneපයිතන් හි විශේෂ තත්වයක් ඇත. බොහෝ ඇල්ගොරිතම එය සුවිශේෂී අගයක් ලෙස සලකන බැවින් එය ප්‍රියතම මූලික අගය වේ. එවැනි තත්වයන් තුළ එය යම් ධජයක් සඳහා විශේෂ හැසිරවීමක් අවශ්‍ය බව සං signal ා කිරීම සඳහා ධජයක් ලෙස භාවිතා කළ හැකිය (පෙරනිමි අගයක් සැකසීම වැනි).

ඔබට 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වලංගු අගයක් ලෙස නොසැලකෙන විට, නමුත් විශේෂ දෙයක් කිරීමට සං signal ාවක් වැනි ය. කෙසේ වෙතත් එය Noneපැමිණියේ කොහෙන්දැයි දැන ගැනීමට වැදගත් වන අවස්ථා තිබේ, මන්ද එය සං signal ාවක් ලෙස භාවිතා කළද එය දත්තවල කොටසක් විය හැකි බැවිනි.

වස්තුවක් 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 handling 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

ආ ict ාව සමඟ

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 ක් ලැබේ. අවසාන වශයෙන්, සෙන්ඩිනල් භාවිතා කිරීම අතිශයින්ම විකාරයකි. සෙන්ඩිනල් එකක් එය භාවිතා කරන පුස්තකාලයට විශේෂිත වන අතර එහි විෂය පථය සාමාන්‍යයෙන් පුස්තකාලයේ අභ්‍යන්තරයට පමණක් සීමා විය යුතුය. එය "කාන්දු" නොවිය යුතුය. බාහිර කේතය ඒ පිළිබඳව දැනුවත් විය යුත්තේ ඒවායේ අරමුණ පුස්තකාලයේ API දීර් extend කිරීම හෝ අතිරේක කිරීම නම් පමණි.


කුමක් ගැනද: කිසිවක් නැත == දෙයක්?
hkBst

khkBst මම අනුමාන කරන්නේ ඔබේ ප්‍රශ්නය වන්නේ පයිතන් සමානාත්මතාවය තක්සේරු කරන්නේ කෙසේද යන්නයි. මෙම stackoverflow.com/questions/3588776/…
මයිකල් එකෝකා

අහ්, ඉතින් IIUC සාමාන්‍යයෙන් තවමත් ඇමතුම අවසන් වනු ඇත .__ eq__? එවැනි අවස්ථාවක මම මගේ යෝජනාව ඉල්ලා අස්කර ගනිමි.
hkBst

ආකර්ෂණීය හා ප්‍රයෝජනවත් තොරතුරු සඳහා මූලාශ්‍රය ඔබට බෙදා ගත හැකිය.
අනිධා භට්නගර්

සම්මත පුහුණුව. පයිතන් නිබන්ධනය හරහා යාමෙන් ඔබට එහි ඉඟි කිහිපයක් සොයාගත හැකිය , නමුත් ජනප්‍රිය ව්‍යාපෘතිවල ප්‍රභව කේතය කියවීම මගේ අංක එකේ උපදෙස් වන්නේ ඉක්මනින් මෝඩ පයිතන් තුළට ගිලී යාමයි .
මයිකල් එකෝකා

67

එය වෙනත් භාෂාවල මෙන් ශුන්‍ය යැයි නොකියයි, නමුත් None. මෙම වස්තුවේ සෑම විටම ඇත්තේ එක් අවස්ථාවක් පමණි, එබැවින් ඔබට අවශ්‍ය නම් x is Noneඒ වෙනුවට (අනන්‍යතා සංසන්දනය) සමානකම් තිබේදැයි පරීක්ෂා කළ හැකිය x == None.


25
මම නැවත ස්ථාපනය කිරීමෙන් පයිතන් බිඳ දැමීමට ක්‍රමයක් සොයමි None. එවිට සන්සන්දනය කළ සියලු බුද්ධිමත් පුද්ගලයින් NoneTypeජයග්‍රහණය කරනු ඇත!
සෙනෙක්සර්

28

Python දී, අගය නොමැති නියෝජනය කිරීමට, ඔබ භාවිතා කළ හැකිය කිසිවක් අගය ( types.NoneType.None වස්තූන් සඳහා) සහ "" (හෝ ලෙන් () == 0 ) නූල් සඳහා. එබැවින්:

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

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

"==" සහ "යනු" අතර වෙනස සම්බන්ධයෙන්, "==" භාවිතා කරමින් වස්තු අනන්‍යතාවය පරීක්ෂා කිරීම ප්‍රමාණවත් විය යුතුය. කෙසේ වෙතත්, "is" මෙහෙයුම වස්තු අනන්‍යතා මෙහෙයුම ලෙස අර්ථ දක්වා ඇති හෙයින්, එය බොහෝ විට "==" වෙනුවට එය භාවිතා කිරීම වඩාත් නිවැරදිය. වේග වෙනසක් පවා තිබේදැයි විශ්වාස නැත.

කෙසේ වෙතත්, ඔබට බලන්න පුළුවන්:


8
මා දන්නා පරිදි, (0 == අසත්‍යය) සෑම ක්‍රමලේඛන භාෂාවකින්ම සත්‍ය වේ. එයට හේතුව අසත්‍යය 0 ලෙසත් 0 සත්‍ය නොවන 0 ලෙසත් සංකේතවත් කර ඇති බැවිනි. කෙසේ වෙතත්, කරුණාකර “is” ක්‍රියාකරු “==” එක හා සමාන නොවන බව කරුණාවෙන් සලකන්න. මෙය ජාවා හි "==" සහ "සමාන" අතර ඇති වෙනස අඩු හෝ වැඩි ය. ක්‍රියාකරු “වේ”, ඇත්ත වශයෙන්ම, ද්විත්ව අරමුණු එක හා සමාන දැයි පරික්ෂා කරයි (එකම අවස්ථාව සහ එකම අන්තර්ගතය නොවේ)!
පාවුලෝ රොවෙලි

12
Paolo, FYI, (0 == false) සෑම ක්‍රමලේඛන භාෂාවකම සත්‍ය නොවේ. ඉක්මන් ප්‍රතිවිරුද්ධ උදාහරණයක් වනුයේ ස්කලා ය, (0 == අසත්‍යය) අසත්‍යය ලබා දෙන අතර, සංඛ්‍යාවක් බූලියන් සමඟ සංසන්දනය කිරීමේදී අසත්‍යය ලබා දෙන එකම ක්‍රමලේඛන භාෂාව ස්කලා නොවන බව මට විශ්වාසයි.
රොබ් විල්ටන්

2
හරි, තේරුණා! ඉන්පසුව, බොහෝ ක්‍රමලේඛන භාෂාවලින් කියමු.
පාවුලෝ රොවෙලි

3
ජාවාස්ක්‍රිප්ට් හි, 0 == falseආපසු පැමිණීමට trueහේතුව ද්විත්ව-සමාන ක්‍රියාකරු බලහත්කාරය ටයිප් කිරීමයි. කෙසේ වෙතත්, ත්‍රිත්ව-සමාන ක්‍රියාකරු සමඟ 0 === falseනැවත පැමිණෙන්නේ false'අංකය' සහ 'බූලියන්' විවිධ වර්ගවල බැවිනි.
jkdev

1
Ua ලුආ, රූබි සහ ක්ලෝජුර් හි පැලෝරොවෙල්ලි 0 trueකොන්දේසි වලට අනුව සලකනු ලැබේ . රස්ට් ඇන්ඩ් ගෝ හි 0සහ false සමානාත්මතාවය සඳහා සැසඳිය නොහැකි විවිධ වර්ග වේ.
ස්කූටර්-ඩැංගල්

0

Null යනු විශේෂ වස්තු වර්ගයකි:

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

වස්තුවක් 'කිසිවක් ටයිප්' පන්තියේ තිබේදැයි ඔබට පරීක්ෂා කළ හැකිය:

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

වැඩි විස්තර පයිතන් ඩොක්ස් වෙතින් ලබා ගත හැකිය


නමුත් එය ඇත්ත වශයෙන්ම "ශූන්‍ය" (?) ලෙස හැඳින්වේ.
පීටර් මෝර්ටෙන්සන්

-1

සත්‍ය අගය පරීක්ෂා කිරීමකට අනුව , 'කිසිවක්' කෙලින්ම අසත්‍යය ලෙස පරීක්ෂා කරයි, එබැවින් සරලම ප්‍රකාශනය ප්‍රමාණවත් වේ:

if not foo:

3
නැත, එය එසේ නොවේ. එම ප්‍රකාශනය පමණක් නොව ඕනෑම ව්‍යාජ වටිනාකමක් Trueසඳහා නැවත පැමිණේ . None
කරන්න_නාමය_

ඇත්ත, සහ සරල "එසේ නොවේ නම්:" සඳහන් කර ඇති පරිදි මුල් ප්‍රශ්නයට නිවැරදිව පිළිතුරු සපයන්නේ නැත. කෙසේ වෙතත්, පයිතන් ගතිකව ටයිප් කර ඇති අතර සින්ටැක්ස් ප්‍රොටෝකෝල අඩු කිරීමට ආරාධනා කරයි, එබැවින් සරල හා සමාන ඉදිකිරීම් සලකා බැලීම මට වලංගු බව පෙනේ.
artejera
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.