Programing

파이썬 any () 함수는 정확히 어떻게 작동합니까?

lottogame 2020. 8. 26. 08:18
반응형

파이썬 any () 함수는 정확히 어떻게 작동합니까?


에 대한 Python 문서 페이지 any에서 any()함수에 해당하는 코드 는 다음과 같습니다.

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

이 함수는이 형식으로 호출하면 테스트 할 요소를 어떻게 알 수 있습니까?

any(x > 0 for x in list)

함수 정의에서 볼 수있는 것은 반복 가능한 객체를 전달하고 있다는 것뿐입니다. for루프는 내가 뭔가를 찾고 있다는 것을 어떻게 알 수 > 0있습니까?


당신이 사용하는 경우 any(lst)당신은보고 lst일부 항목의 목록 인의 반복 가능한 것입니다. 가 포함 된 경우 [0, False, '', 0.0, [], {}, None](모든이의 논리 값이있는 False) 다음 any(lst)이 될 것입니다 False. lst다음 중 하나라도 포함 된 경우 [-1, True, "X", 0.00001](모두로 평가됨 True) any(lst)은입니다 True.

게시 한 코드 x > 0 for x in lst에서 이것은 생성기 표현식 이라는 다른 종류의 반복 가능 항목 입니다. 생성기 표현식이 Python에 추가되기 전에 목록 이해력 을 만들었을 것입니다 . 이는 매우 유사하지만 주변에 []'s :를 사용 [x > 0 for x in lst]합니다. 로부터 lst포함 [-1, -2, 10, -4, 20], 당신이 얻을 것 이해 목록을 : [False, False, True, False, True]. 이 내부 값은 적어도 하나의 이 있으므로를 any반환 하는 함수로 전달됩니다 .TrueTrue

그러나으로 발전기 표현 , 파이썬은 더 이상의 내부 목록을 만들 수 없습니다 True(s)False(s)값은으로 생성됩니다, any발전기 식으로 한 번에 하나씩 생성 된 값을 통해 함수를 반복합니다. 그리고 , 이후로 any는 처음 본다으로 단락, 그것은 바로 반복하는 중지됩니다 True값입니다. 이것은 (또는 Python2.x를 사용하는 경우) lst와 같은 것을 사용하여 만든 경우 특히 유용합니다 . 이 표현은 억 항목을 통해 생성에도 불구하고, 단지 그것을에 얻을 때 세 번째 항목으로까지 가야 하는 평가하여, 대한 , 그래서 반환 할 수 있습니다 .lst = range(-1,int(1e9))xrangeany1Truex>0anyTrue

list comprehension을 만들었다면 Python은 먼저 메모리에 10 억 개의 요소 목록을 만든 다음이를 any. 그러나 사용하여 발전기 식을 , 당신은 같은 파이썬의 내장 기능을 가질 수 anyallA와 마자, 일찍 중단 True또는 False값을 볼 수 있습니다.


>>> names = ['King', 'Queen', 'Joker']
>>> any(n in 'King and john' for n in names)
True

>>> all(n in 'King and Queen' for n in names)
False

여러 줄의 코드를 하나로 줄입니다. 다음과 같이 긴 코드를 작성할 필요가 없습니다.

for n in names:
    if n in 'King and john':
       print True
    else:
       print False

(x > 0 for x in list) 그 함수 호출에서 생성기 표현식을 생성합니다.

>>> nums = [1, 2, -1, 9, -5]
>>> genexp = (x > 0 for x in nums)
>>> for x in genexp:
        print x


True
True
False
True
False

어느 any첫 번째 개체 평가하는 조우에 사용하고 shortcircuitsTrue


iterable이

(x > 0 for x in list)

또는 x > 0하나 반환 하므로 부울 반복이 가능합니다.TrueFalse


Simply saying, any() does this work : according to the condition even if it encounters one fulfilling value in the list, it returns true, else it returns false.

list = [2,-3,-4,5,6]

a = any(x>0 for x in lst)

print a:
True


list = [2,3,4,5,6,7]

a = any(x<0 for x in lst)

print a:
False

참고URL : https://stackoverflow.com/questions/16505456/how-exactly-does-the-python-any-function-work

반응형