code

Python에서 변수 이름으로 밑줄 _

codestyles 2020. 11. 21. 14:06
반응형

Python에서 변수 이름으로 밑줄 _


이 질문에 이미 답변이 있습니다.

Peter Norvig는 결정 론적 논리 연산과 가능한 솔루션의 스마트 순회를 결합하여 가장 어려운 스도쿠 퍼즐을 해결 하는 프로그램을 설명하는 에세이를 가지고 있습니다. 후자는 재귀 적으로 수행됩니다. 여기에 그 함수가 있습니다 ( 소스 ) :

def search(values):
    "Using depth-first search and propagation, try all possible values."
    if values is False:
        return False ## Failed earlier
    if all( len( values[s]) == 1 for s in squares): 
        return values ## Solved!
    ## Chose the unfilled square s with the fewest possibilities
    _,s = min( (len( values[s]), s) 
                for s in squares 
                if len(values[s]) > 1
            )
    return some( search( assign( values.copy(), s, d)) 
                for d in values[s]
            )

(나는 내 ​​눈을 위해 약간의 공백, CR 및 탭을 추가했습니다. Dr. Norvig에게 사과드립니다.)

주석 바로 아래에 " _,s"로 시작하는 줄이 있습니다. len(values[s]),s최소값이 s. 인 압축 해제 된 튜플 ( ) 인 것 같습니다 . Dr. Norvig가 " _"를 변수 이름으로 사용하여 " 관심 없음"결과를 나타내는 것입니까, 아니면 다른 일이 진행되고 있습니까? _변수 이름으로 " "이 권장되는 경우가 있습니까? 대화 형 모드에서 " _"는 이전 작업의 응답을 보유합니다. 비대화 형 코드에 유사한 기능이 있습니까?

최신 정보

좋은 답변에 감사드립니다. 대답은 "부가가치"를 위해 Alex Martelli에게가는 것 같습니다. 그는 "_, vbl_of_interest"관용구가 DSU 관용구의 부작용 인 경우가 많으며,이 관용구는 그 자체로 거의 불필요하게 만들어 졌다고 지적합니다.


네, _"do n't care"의 전통적인 이름입니다 (불행히도 I18N에서의 사용과 충돌하지만 별도의 문제입니다 .-). BTW, 오늘의 Python에서 다음 대신 :

_,s = min( (len( values[s]), s) 
            for s in squares 
            if len(values[s]) > 1
        )

당신은 코딩 할 수 있습니다

s = min((s for s in squares if len(values[s])>1), 
        key=lambda s: len(values[s]))

(Python Peter가 어떤 릴리스에 대해 작성했는지 확실하지 않지만 그가 사용하는 관용구는 "decorate-sort-undecorate"[[DSU]]의 예입니다. sort 대신 min을 제외하고는 오늘의 Python에서 key=선택적 매개 변수는 일반적으로 DSU를 수행하는 가장 좋은 방법 ;-).


당신이 올바른지. 비대화 형 모드 _에서는 특별한 의미가 없습니다. 실제로 Norvig는 해당 변수의 값에 관심이 없음을 전달하고자합니다.

Offtopic : Norvig의 그 기사는 매우 좋습니다. 추천 읽기.


귀하의 해석이 정확합니다. 대화 형 모드에서 특별한 의미를 제외하고 _는 특히 압축을 풀 때 "관심없는"변수 이름으로 사용됩니다.

참고 URL : https://stackoverflow.com/questions/1739514/underscore-as-variable-name-in-python

반응형