programing

Python에서 값을 할당하지 않고 변수만 선언할 수 있습니까?

goodsources 2022. 10. 21. 23:00
반응형

Python에서 값을 할당하지 않고 변수만 선언할 수 있습니까?

다음과 같이 Python에서 변수를 선언할 수 있습니까?

var

None으로 초기화가 되었나요?Python은 이것을 허용하는 것처럼 보이지만, 접속하자마자 크래쉬 합니다.이게 가능합니까?만약 아니라면, 왜?

편집: 다음과 같은 경우에 이 작업을 수행합니다.

value

for index in sequence:

   if value == None and conditionMet:
       value = index
       break

관련 질문

참고 항목

왜 이렇게 하지 않는 거죠?

var = None

Python은 동적이기 때문에 선언할 필요가 없습니다.이것들은 자동적으로 할당된 첫 번째 범위에 존재합니다.따라서 위와 같은 일반적인 오래된 과제 명세서만 있으면 됩니다.

이것은 좋은 일입니다.변수가 초기화되지 않은 경우가 없기 때문입니다.하지만 주의하세요.이것은 변수가 잘못 초기화되지 않는다는 것을 의미하지는 않습니다.만약 당신이 무언가를 시작한다면None그것이 당신이 정말로 원하는 것임을 확인하고, 가능하다면 더 의미 있는 것을 할당하십시오.

Python 3.6+에서는 다음과 같은 경우에 변수 주석을 사용할 수 있습니다.

https://www.python.org/dev/peps/pep-0526/ #syslog

PEP 484는 유형 힌트, 일명.k.a. 유형 주석을 도입했다.주요 초점은 함수 주석이었지만 변수에 주석을 달기 위한 유형 주석 개념을 도입했다.

# 'captain' is a string (Note: initial value is a problem)
captain = ...  # type: str

PEP 526은 Python에 구문을 추가하여 변수 유형(클래스 변수 및 인스턴스 변수 포함)에 주석을 붙이는 것을 목적으로 하고 있습니다.이것에 대해서는, 코멘트를 사용해 표현하지 않습니다.

captain: str  # Note: no initial value!

"Python에서 어떤 값도 할당하지 않고 변수를 선언하는 것만이 가능한가?"라는 질문에 더 직접적으로 부합하는 것 같습니다.

참고: Python 런타임은 함수 및 변수 유형의 주석을 적용하지 않습니다.타입 체커, IDE, 린터 등의 서드파티 툴에서 사용할 수 있습니다.

"다른 언어에는 변수가 있다"(관련 링크로 추가)를 읽어보시길 진심으로 권합니다. 2분이면 Python에 "변수"가 아닌 "이름"이 있다는 것을 알 수 있습니다.

val = None
# ...
if val is None:
   val = any_object

네가 뭘 하려는 건지 잘 모르겠어.Python은 매우 역동적인 언어입니다. 보통 변수를 할당하거나 사용할 때까지 변수를 선언할 필요가 없습니다.네가 하고 싶은 건 그냥

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, "len(시퀀스)== 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)

변수가 정의되어 있는지 여부를 확인하려면 locals() 배열인지 globals() 배열인지를 체크해 보는 것은 어떨까요?코드가 다시 작성되었습니다.

for index in sequence:
   if 'value' not in globals() and conditionMet:
       value = index
       break

찾고 있는 로컬 변수인 경우 globals()를 locals()로 바꿉니다.

저는 보통 변수를 다음과 같은 유형을 나타내는 무언가로 초기화합니다.

var = ""

또는

var = 0

오브젝트가 될 경우 인스턴스화할 때까지 초기화하지 마십시오.

var = Var()

먼저, 당신이 원래 물어본 질문에 대한 저의 답변은

Q: 변수가 코드의 한 포인트에서 정의되어 있는지 여부를 확인하려면 어떻게 해야 합니까?

A: 해당 변수가 정의되어 있는 줄이 나타날 때까지 소스 파일을 읽어 보십시오.

게다가 코드 예시를 들 수 있습니다.그것은 여러 가지 배열이 있습니다.조건과 일치하는 요소를 시퀀스에서 스캔하는 방법을 찾고 있습니다.그러므로 몇 가지 해결 방법을 다음에 제시하겠습니다.

def findFirstMatch(sequence):
    for value in sequence:
        if matchCondition(value):
            return value

    raise LookupError("Could not find match in sequence")

이에서는 '어느 때', '어느 때', '어느 때'를 '2'로 수 .raise a 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 = None
for index in sequence:
   doSomethingHere
   if conditionMet:
       value = index
       break 

ifNone유효한 데이터 값인 경우 변수를 다른 방법으로 사용해야 합니다.을 사용하다

var = object()

이 초병은 닉 코글런이 제안했어요

Python에서 변수를 선언할 수 있습니까(var=None):

def decl_var(var=None):
if var is None:
    var = []
var.append(1)
return var

늦은 감이 있지만 python3를 사용하면 초기화되지 않은 값을 선언할 수 있습니다.

uninitialized_value:str

# some code logic

uninitialized_value = "Value"

하지만 이 속임수에 매우 주의하세요, 왜냐하면

uninitialized_value:str

# some code logic

# WILL NOT WORK
uninitialized_value += "Extra value\n"

Python으로 C를 쓰려고 하는 것 같네요.만약 당신이 시퀀스에서 무언가를 찾고 싶다면, Python은 그것을 하기 위한 함수가 내장되어 있다.

value = sequence.index(blarg)
var_str = str()
var_int = int()

못생긴 수 if None: var = None은 아무것도 않고 합니다.var로컬 변수 사전을 초기화하지 않았습니다.나중에 이 변수를 함수로 사용하려고 하면 인터프리터가 UnboundLocalError 예외를 발생시킵니다.이것은 매우 오래된 비단뱀 버전에서도 사용할 수 있습니다.단순하지도 않고 아름답지도 않지만 비단뱀에게 큰 기대를 걸지는 않습니다.

언급URL : https://stackoverflow.com/questions/664294/is-it-possible-only-to-declare-a-variable-without-assigning-any-value-in-python

반응형