programing

없음 값이란 무엇입니까?

lovejava 2023. 7. 23. 13:54

없음 값이란 무엇입니까?

저는 파이썬을 공부해왔고, 그것을 설명하는 장을 읽었습니다.None가치는 있지만, 안타깝게도 이 책은 어느 시점에서는 그다지 명확하지 않습니다.거기서 공유하면 제 질문에 대한 답을 찾을 수 있을 거라고 생각했습니다.

그게 뭔지 알고 싶어요.None가치란 무엇이고 당신은 그것을 무엇에 사용합니까?

또한, 이 책의 이 부분을 이해하지 못합니다.

의 값 None변수를 원래의 빈 상태로 재설정하는 방법 중 하나입니다.

그게 무슨 의미죠?

컴퓨터 세계(수업, 사물 등에 대해 배운 적이 없음)에 대한 지식이 낮아서 대부분의 답을 이해하지는 못했지만 답변은 훌륭했습니다.이 문장은 무슨 뜻입니까?

의 값 None변수를 원래의 빈 상태로 재설정하는 방법 중 하나입니다.

최종:

마침내 저는 다른 답을 찾는 것으로부터 제 답을 얻었습니다.저는 저를 돕기 위해 시간을 할애한 모든 사람들(특히 마르틴 피터스와 DSM)에게 감사해야 하며, 저는 모든 답을 최고로 선택할 수 있기를 바라지만, 선택은 하나로 제한됩니다.모든 답변이 좋았습니다.

마르틴의 대답은 무엇을 설명합니다.NonePython에 있으며, 책이 오해의 소지가 있다고 올바르게 명시되어 있습니다.일반적으로 파이썬 프로그래머들은 절대 말하지 않을 것이기 때문입니다.

의 값 None변수를 원래의 빈 상태로 재설정하는 방법 중 하나입니다.

브릭스가 의미하는 바를 말이 되고 여기 있는 아무도 그것에 만족하지 않는 이유를 설명하는 것은 어렵습니다.도움이 될 수 있는 한 가지 비유:

Python에서 변수 이름은 객체에 붙이는 스티커와 같습니다.모든 스티커에는 고유한 이름이 적혀 있습니다. 한 번에 하나의 개체에만 부착할 수 있지만, 원하는 경우 동일한 개체에 둘 이상의 스티커를 부착할 수 있습니다.당신이 글을 쓸 때

F = "fork"

객체에 "를 붙입니다."fork"만약 당신이 쓴다면,

F = None

당신은 스티커를 그 곳으로 옮깁니다.None물건.

브릭스가 상상해 보라고 하는 것은 당신이 스티커를 쓰지 않았다는 것입니다."F"이미 있었습니다.FNone그리고 당신이 한 일은 그것을 옮기는 것뿐이었습니다.None"fork" 그서입 때할력 래때▁you 할▁so▁type.F = None만약 우리가 치료하기로 결정했다면, 당신은 "원래의 빈 상태로 되돌리는 것"입니다.Noneempty state.

그가 무슨 말을 하고 있는지는 알 수 있지만, 그렇게 보는 것은 좋지 않습니다.하고 Python을 ▁if우경▁python는▁you입하▁type력▁and.print(F)

>>> print(F)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'F' is not defined

그 그에밖NameError▁the▁python다입▁▁means'▁recognizet파라는 이름을 인식하지 못한다는 뜻입니다.F왜냐하면 그런 스티커가 없기 때문입니다.만약 브릭스가 옳다면 그리고F = None 재정F그것의 원래 상태로, 그렇다면 그것은 지금 거기에 있어야 하고, 우리는 봐야 합니다.

>>> print(F)
None

타이핑한 후에 하는 것처럼.F = None를 리고스티를붙입다니커그▁the▁on다붙▁and▁sticker▁put니입.None.


그게 지금 일어나고 있는 전부입니다.실제로 Python은 객체(기본 이름)에 이미 부착된 일부 스티커와 함께 제공되지만 다른 스티커는 다음과 같은 줄로 직접 작성해야 합니다.F = "fork"그리고.A = 2그리고.c17 = 3.14 나중에 수 예:F = 10또는F = None다 똑같아요.)

Briggs는 당신이 쓰고 싶어할 수 있는 모든 스티커가 이미 부착된 것처럼 가장하고 있습니다.None물건.

None는 일반적으로 '비어 있음' 또는 '여기에 값 없음'을 나타내는 데 사용되는 값입니다.이것은 신호 객체입니다. 단지 Python 문서에 그런 의미가 있다고 나와 있기 때문에 의미가 있습니다.

지정된 Python 인터프리터 세션에는 해당 개체의 복사본이 하나만 있습니다.

그하지 않는 하지 않습니다.return 진술,None대신 반환됩니다.그런 식으로, 함수를 사용한 프로그래밍은 훨씬 단순합니다; 함수는 항상 무언가를 반환합니다, 비록 그것이 그것이 단지 그것일지라도.None물건.

명시적으로 테스트할 수 있습니다.

if foo is None:
    # foo is set to None

if bar is not None:
    # bar is set to something *other* than None

또 다른 용도는 함수에 선택적 매개 변수를 '빈' 기본값으로 지정하는 것입니다.

def spam(foo=None):
    if foo is not None:
        # foo was specified, do something clever!

spam(). 를 ' ' 라고 ' 입니다.spam() 기본값은 " " " " 입니다.None함수가 인수와 함께 호출되었는지 여부를 쉽게 탐지할 수 있습니다.

다른 언어들도 비슷한 개념을 가지고 있습니다.에는 SQL이 있습니다.NULL자바스크립트에는 와 등이 있습니다.

Python에서는 변수가 사용되기 때문에 존재합니다.변수를 먼저 선언할 필요가 없으므로 Python에는 빈 변수가 없습니다.변수 설정None값으로 한 값이 아닙니다.None값도 마찬가지입니다. 종종 비어 있음을 나타내는 데 사용되는 값입니다.당신이 읽고 있는 책은 그 점에서 오해의 소지가 있습니다.

이것이 Python 문서가 설명해야 할 내용입니다.None:

형식의 유일한 값입니다.유형 없음.None은 기본 인수가 함수에 전달되지 않는 경우와 같이 값의 부재를 나타내는 데 자주 사용됩니다.

버전 2.4에서 변경됨: 없음에 대한 할당이 잘못되었으며 구문 오류가 발생했습니다.

주 None debug라는 이름은 재할당할 수 없으므로(속성 이름으로 지정된 경우에도 SyntaxError를 발생시킵니다) "true" 상수로 간주할 수 있습니다.

  1. 그럼 의유확다니합의 해 보겠습니다.None 번째

    print type(None)
    print None.__class__
    

    산출량

    <type 'NoneType'>
    <type 'NoneType'>
    

기적으로본,NoneType다음과 같은 데이터 유형입니다.int,floatetc. 8.15. types에서 Python에서 사용할 수 있는 기본 유형 목록을 확인할 수 있습니다. — 기본 제공 유형의 이름.

  1. 그리고.None는 의예니다의 입니다.NoneTypeclass.는 업수의 . 그래서 우리는 아마도 예를 만들고 싶을 것입니다.None우리자신.저거 시도해보자.

    print types.IntType()
    print types.NoneType()
    

    산출량

    0
    TypeError: cannot create 'NoneType' instances
    

그서분명히, 할수없다니습조창래▁create를 만들 수 없습니다.NoneType에 대해 걱정할 필요가 없습니다.None.

  1. 그럼 이제 을 했는지 해 보겠습니다.None

    print dir(None)
    

    산출량

    ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', 
     '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__',
     '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
    

제하고를 __setattr__다른 모든 항목은 읽기 전용 특성입니다.그래서, 우리가 그것의 속성을 바꿀 수 있는 방법은 없습니다.None.

  1. 다에새속추보다니겠습가해을성음에 새로운 None

    setattr(types.NoneType, 'somefield', 'somevalue')
    setattr(None, 'somefield', 'somevalue')
    None.somefield = 'somevalue'
    

    산출량

    TypeError: can't set attributes of built-in/extension type 'NoneType'
    AttributeError: 'NoneType' object has no attribute 'somefield'
    AttributeError: 'NoneType' object has no attribute 'somefield'
    

위에서 본 문장은 각각 이러한 오류 메시지를 생성합니다. 즉, 속을동생수없다습니성에 을 만들 수 .None사례.

  1. 가 어떤 것을 할 때 일이 .None은 서에따르면다, ▁a▁throw합을 던져야 .SyntaxError 우리가 말은할무면, 우가언당하를에 어떤 하면,None프로그램이 전혀 실행되지 않습니다.

    None = 1
    

    산출량

    SyntaxError: cannot assign to None
    

우리는 그것을 확립했습니다.

  1. None는 의예니다의 입니다.NoneType
  2. None 수 .
  3. 의 기존 None변경할 수 없습니다.
  4. 는 다의다른인수없다니습만의 다른 를 만들 수 없습니다.NoneType
  5. 에 대한 참조를 변경할 수도 없습니다.None값을 할당함으로써.

문서에 언급된 바와 같이None정말로 로 간주될 수 있습니다.true constant.

knowing 복한알음행.None:)

당신이 참조하는 은 분명히 의미를 크게 단순화하려고 노력하고 있습니다.NonePython 변수에는 초기 빈 상태가 없습니다. Python 변수는 정의된 경우에만 바인딩됩니다.값을 지정하지 않고는 Python 변수를 만들 수 없습니다.

>>> print(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> def test(x):
...   print(x)
... 
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test() takes exactly 1 argument (0 given)
>>> def test():
...   print(x)
... 
>>> test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in test
NameError: global name 'x' is not defined

그러나 변수가 정의되었는지 여부에 따라 함수의 평균이 다른 경우도 있습니다.이 " 값이다음같인만수있다습"인 를 만들 수 .None:

>>> def test(x=None):
...   if x is None:
...     print('no x here')
...   else:
...     print(x)
... 
>>> test()
no x here
>>> test('x!')
x!

이 값이 특별하다는 것은None이 경우 가치는 그다지 중요하지 않습니다.기본값을 사용할 수 있습니다.

>>> def test(x=-1):
...   if x == -1:
...     print('no x here')
...   else:
...     print(x)
... 
>>> test()
no x here
>>> test('x!')
x!

…하지만 가지고 있는None에게 두 이점을 : abound는 about about about about about about about about about about.

  1. 는 다과같특값별선을필없습다니요는택처럼 특별한 -1한 사람, 그리고 , 리그고▁whose.
  2. 우리의 기능이 실제로 처리해야 할 수도 있습니다.-1통상적인 입력으로서.
>>> test(-1)
no x here

이런!

그래서 이 책은 주로 reset이라는 단어를 사용한다는 점에서 약간 오해의 소지가 있습니다 – 할당.None이름에 대한 신호는 프로그래머에게 해당 값이 사용되지 않거나 함수가 기본적인 방식으로 동작해야 하지만 값을 원래의 정의되지 않은 상태로 재설정하려면del키워드:

>>> x = 3
>>> x
3
>>> del x
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

다른 답변들은 이미 없음의 의미를 아름답게 설명했습니다.하지만, 저는 여전히 예를 들어 이것에 더 많은 빛을 던지고 싶습니다.

예:

def extendList(val, list=[]):
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3

이제 위 목록의 출력을 추측해 보십시오.놀랍게도 그 대답은 다음과 같습니다.

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

하지만 왜 그랬을까?

많은 사람들은 extendList가 호출될 때마다 list 인수가 기본값인 []로 설정될 것이라고 생각하여 list1이 [10]이고 list3이 ['a']일 것이라고 잘못 예상합니다.

그러나 실제로는 함수가 정의될 기본 목록이 한 번만 생성되고 목록 인수를 지정하지 않고 extendList가 호출될 때마다 동일한 목록이 이후에 사용됩니다.이는 기본 인수의 표현식이 호출될 때가 아니라 함수가 정의될 때 계산되기 때문입니다.

따라서 list1list3은 동일한 기본 목록에서 작동하는 반면, list2는 (list 매개 변수의 값으로 자체 빈 목록을 전달하여) 별도의 목록에서 작동합니다.


'없음' 구세주: (원하는 동작을 생성하려면 위의 예를 수정하십시오.)

def extendList(val, list=None):
    if list is None:
       list = []
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3

이 수정된 구현을 통해 출력은 다음과 같습니다.

list1 = [10]
list2 = [123]
list3 = ['a']

참고 - toptal.com 에 대한 크레딧 예시

없음은 단일 개체(하나의 없음만 있음을 의미)이며, 언어 및 라이브러리의 여러 위치에서 일부 값의 부재를 나타내기 위해 사용됩니다.


예:
한다면d 사니다입입니다.d.get(k)돌아올 것입니다d[k]하지만, 그이존재면다한것,▁it,면▁if▁but그▁exists.None한다면d 키 음k.

훌륭한 블로그에서 이 정보를 읽어 보십시오. https://python-history.blogspot.com/2013/11/story-of-none-true-false.html

이 모든 것이 좋은 대답이지만, 왜 그런지 설명할 것이 더 있다고 생각합니다.None유용합니다.

당신이 결혼식에 RSVP를 모으는 것을 상상해 보세요.각 사용자의 참석 여부를 기록하려고 합니다.만약 그들이 참석한다면, 당신은 설정합니다.person.attending = True, 은 그이참않경세트우을지로 설정합니다.person.attending = False RSVP는 과 같이 합니다.person.attending = None정보가 을 구별할 수 . - 게하정없것수구있다니습별할을는보면렇그가▁that.None그리고 부정적인 대답.

저는 (과일뿐만 아니라) 코드 예제를 좋아합니다. 그래서 보여드리겠습니다.

apple = "apple"
print(apple)
>>> apple
apple = None
print(apple)
>>> None

아무 것도 의미하지 않습니다. 아무 가치도 없습니다.

False로 평가되는 항목은 없습니다.

largest=none
smallest =none 
While True :
          num =raw_input ('enter a number ') 
          if num =="done ": break 
          try :
           inp =int (inp) 
          except:
              Print'Invalid input' 
           if largest is none :
               largest=inp
           elif inp>largest:
                largest =none 
           print 'maximum', largest

          if smallest is none:
               smallest =none
          elif inp<smallest :
               smallest =inp
          print 'minimum', smallest 

print 'maximum, minimum, largest, smallest 

언급URL : https://stackoverflow.com/questions/19473185/what-is-a-none-value