파이썬에서 값을 할당하지 않고 변수를 선언하는 것이 가능합니까?
파이썬에서 변수를 선언 할 수 있습니까?
var
None으로 초기화되도록? 파이썬에서 허용하는 것처럼 보이지만 액세스하면 충돌이 발생합니다. 이것이 가능한가? 그렇지 않다면 왜?
편집 : 나는 다음과 같은 경우에 이것을하고 싶다 :
value
for index in sequence:
if value == None and conditionMet:
value = index
break
복제
- 파이썬에서 초기화되지 않은 값 (동일한 저자에 의한)
- 파이썬에 선언 키워드가 있습니까? (같은 저자에 의해)
관련
왜 이렇게하지 않습니까?
var = None
파이썬은 동적이기 때문에 선언 할 필요가 없습니다. 할당 된 첫 번째 범위에 자동으로 존재합니다. 따라서 위와 같이 일반적인 이전 할당 문 만 있으면됩니다.
초기화되지 않은 변수로 끝나지 않기 때문에 이것은 좋습니다. 그러나 조심하십시오-이것이 잘못 초기화 된 변수로 끝나지 않는다는 것을 의미하지는 않습니다 . 에 무언가를 초기화하는 경우 None
실제로 원하는 것을 확인하고 가능하면 더 의미있는 것을 할당하십시오.
나는 진심으로 당신이 읽을 것을 권 해드립니다 다른 언어는 "변수"가 2 분 파이썬은 "이름"이 아니라 "변수"가 있음을 알 수를 - (나는 관련 링크로 추가).
val = None
# ...
if val is None:
val = any_object
당신이 무엇을하려고하는지 잘 모르겠습니다. 파이썬은 매우 역동적 인 언어입니다. 실제로 변수를 할당하거나 사용할 때까지 변수를 선언 할 필요는 없습니다. 당신이하고 싶은 것은 단지
foo = None
None
변수에 값 을 할당합니다 foo
.
편집 : 당신이 정말로 하고 싶은 것은 이것입니다 :
#note how I don't do *anything* with value here
#we can just start using it right inside the loop
for index in sequence:
if conditionMet:
value = index
break
try:
doSomething(value)
except NameError:
print "Didn't find anything"
그것은 그 정말 짧은 코드 예제에서 사용할 수있는 권리 스타일을인지 말할 조금 어려운, 그러나 입니다 작업에 더 "파이썬"방법.
편집 : 아래는 JFS의 의견입니다 (코드를 표시하기 위해 게시 됨)
OP의 질문과 관련이 없지만 위의 코드는 다음과 같이 다시 작성할 수 있습니다.
for item in sequence:
if some_condition(item):
found = True
break
else: # no break or len(sequence) == 0
found = False
if found:
do_something(item)
참고 : some_condition()
예외 found
가 발생하면 바인딩되지 않습니다.
참고 : len (sequence) == 0이면 item
바인딩되지 않습니다.
위의 코드는 권장되지 않습니다. 이 경우 로컬 변수의 작동 방식, 즉 "변수"가 "정의 된"지 여부를 설명하는 것이이 경우 런타임시에만 결정될 수 있습니다. 바람직한 방법 :
for item in sequence:
if some_condition(item):
do_something(item)
break
또는
found = False
for item in sequence:
if some_condition(item):
found = True
break
if found:
do_something(item)
Python 3.6 이상에서는 변수 주석을 사용할 수 있습니다.
https://www.python.org/dev/peps/pep-0526/#abstract
PEP 484는 타입 힌트, 일명 타입 주석을 도입했습니다. 주요 초점은 함수 주석이지만 변수 주석을 달기 위해 형식 주석 개념을 도입했습니다.
# 'captain' is a string (Note: initial value is a problem)
captain = ... # type: str
PEP 526은 주석을 통해 표현하는 대신 변수 유형 (클래스 변수 및 인스턴스 변수 포함)에 주석을 달기 위해 Python에 구문을 추가하는 것을 목표로합니다.
captain: str # Note: no initial value!
"파이썬에서 값을 할당하지 않고 변수를 선언하는 것만 가능합니까?"라는 질문과 직접적으로 일치하는 것 같습니다.
나는 보통 변수를 다음과 같은 유형을 나타내는 것으로 초기화합니다
var = ""
또는
var = 0
객체가 될 경우 인스턴스화 할 때까지 초기화하지 마십시오.
var = Var()
글쎄, 변수가 정의되어 있는지 확인하고 싶다면 locals () 또는 globals () 배열에서 변수를 확인하지 않는 이유는 무엇입니까? 코드가 다시 작성되었습니다.
for index in sequence:
if 'value' not in globals() and conditionMet:
value = index
break
그것이 지역 변수라면 globals ()를 locals ()로 바꾸십시오.
우선, 당신이 원래 질문 한 것에 대한 나의 반응
Q : 코드에서 특정 시점에 변수가 정의되어 있는지 어떻게 알 수 있습니까?
A : 해당 변수가 정의 된 행이 보일 때까지 소스 파일을 읽으십시오.
그러나 또한, 당신은 꽤 파이썬적인 다양한 순열이 있다는 코드 예제를 제공했습니다. 조건과 일치하는 요소에 대한 시퀀스를 스캔 한 후 다음과 같은 해결책이 있습니다.
def findFirstMatch(sequence):
for value in sequence:
if matchCondition(value):
return value
raise LookupError("Could not find match in sequence")
분명히이 예에서는 당신은 대체 할 수 raise
로모그래퍼 return None
당신이 달성하기 위해 원하는 것을에 따라 달라집니다.
조건과 일치하는 모든 것을 원한다면 다음과 같이하십시오.
def findAllMatches(sequence):
matches = []
for value in sequence:
if matchCondition(value):
matches.append(value)
return matches
이 작업을 수행하는 또 다른 방법이 yield
있습니다. 작동하는 방식이 상당히 복잡하기 때문에 표시하지 않아도됩니다.
또한 이것을 달성하는 한 가지 방법이 있습니다.
all_matches = [value for value in sequence if matchCondition(value)]
예제를 올바르게 이해하고 있다면 어쨌든 if 문에서 'value'를 참조 할 필요가 없습니다. 어떤 것이 든 설정하자마자 루프에서 빠져 나옵니다.
value = None
for index in sequence:
doSomethingHere
if conditionMet:
value = index
break
파이썬에서 C를 쓰려고하는 것처럼 보입니다. 시퀀스에서 무언가를 찾으려면 파이썬에는 내장 함수가 있습니다.
value = sequence.index(blarg)
var = None
이미 값을 할당하는 것처럼 좋은 질문이며 불행히도 나쁜 대답 이며 스크립트가 여러 번 실행되면 None
매번 덮어 씁니다 .
할당없이 정의하는 것과는 다릅니다. 여전히이 문제를 우회하는 방법을 찾으려고 노력하고 있습니다.
var_str = str()
var_int = int()
None
유효한 데이터 값인 경우 다른 방법으로 변수를 사용해야합니다. 당신은 사용할 수 있습니다 :
var = object()
이 센티넬은 Nick Coghlan 이 제안합니다 .
이 추악한 oneliner로 인터프리터를 속일 수 있습니다 . 초기화하지 않고 로컬 변수 사전에 if None: var = None
변수 var
를 추가하는 것 외에는 아무것도하지 않습니다 . 나중에 함수에서이 변수를 사용하려고하면 인터프리터에서 UnboundLocalError 예외가 발생합니다. 이것은 매우 오래된 파이썬 버전에서도 작동합니다. 단순하지도 않고 아름답지는 않지만 파이썬에서 많이 기대하지는 않습니다.
'Programing' 카테고리의 다른 글
Xcode 5에 iOS 6 SDK를 설치할 수 있습니까? (0) | 2020.04.06 |
---|---|
내부 조인 대 위치 (0) | 2020.04.06 |
Eclipse 템플리트에서 사용되는 $ {user} 변수의 값을 변경하는 방법 (0) | 2020.04.06 |
안드로이드 앱을 개발하기위한 최고의 IDE는 무엇입니까? (0) | 2020.04.06 |
Ruby <=> (우주선) 연산자는 무엇입니까? (0) | 2020.04.06 |