main에 전역 변수, 즉 main 함수에서 호출하는 함수에서 사용할 수있는 변수를 정의하려고합니다.main 함수에서 전역 변수 python
그럴 수 있습니까? 이것을하기위한 좋은 방법은 무엇입니까?
감사합니다.
main에 전역 변수, 즉 main 함수에서 호출하는 함수에서 사용할 수있는 변수를 정의하려고합니다.main 함수에서 전역 변수 python
그럴 수 있습니까? 이것을하기위한 좋은 방법은 무엇입니까?
감사합니다.
내부에의 메소드 (예 : main)가 정의에 의해 로컬로 작성된 변수입니다. 그러나 메소드 외부에 전역 변수를 작성하고 다른 메소드에서 값을 액세스하고 변경 할 수 있습니다.
값을 변경하려면 global
키워드를 사용하십시오.
원하는 것을 선택할 수 없습니다 *. 글로벌 네임 스페이스에 변수를 만들면됩니다.
myglobal = "UGHWTF"
def main():
global myglobal # prevents creation of a local variable called myglobal
myglobal = "yu0 = fail it"
anotherfunc()
def anotherfunc():
print myglobal
이렇게하지 마십시오.
함수의 전체적인 점은 매개 변수를 취한다는 것입니다. 함수에 매개 변수를 추가하기 만하면됩니다. 많은 기능을 수정해야하는 경우 클래스에 수집해야 함을 나타냅니다.
*
이유가 무엇인지 자세히 설명합니다. 파이썬의 변수는 선언되지 않았습니다. 할당 문이 실행될 때 만들어집니다. 이것은 (astronautlevel 게시 한 코드에서 파생 된) 다음과 같은 코드가 중단된다는 것을 의미합니다 :
def setcake(taste):
global cake
cake = taste
def caketaste():
print cake #Output is whatever taste was
caketaste()
Traceback (most recent call last):
File "prog.py", line 7, in <module>
caketaste()
File "prog.py", line 5, in caketaste
print cake #Output is whatever taste was
NameError: global name 'cake' is not defined
caketaste
가 호출 될 때, cake
에는 할당이 발생하지 않았기 때문에이 발생합니다. setcake
이 호출 된 후에 만 발생합니다. 당신은 global
문을 사용할 필요가 http://ideone.com/HBRN4y
:
현재 위치 오류를 볼 수 있습니다. 이들은 비교적 간단합니다. 이렇게하려면 변수 자체를 정의하기 전에 변수를 전역 변수로 정의하면됩니다. 예를 들어 :
def setcake(taste):
global cake
cake = taste
def caketaste():
print cake
setcake('tasty')
caketaste() #Output is tasty
편집 : 죄송합니다, 내가 질문을 오해 것 같다. 지금 내가 올바르게 응답하도록 해주세요.
def printcake():
print cake #This function prints the taste of cake when called
def setcake(taste, printq):
global cake #This makes sure that cake can be called in any function
cake = taste #sets cake's taste
if printq: #determines whether to print the taste
printcake()
setcake('good', True) #Calls the function to set cake. Tells it to print result. The output is good
코드와 같이 출력 : http://ideone.com/dkAlEp
'setcake' 전에'caketaste'를 호출하면 어떻게 될까요? – Marcin
방금 인수로에서 그 변수를 전달할 수 없습니다? –
그래, 그럴 수는 있어도, 주된 함수 안에 글로벌 변수를 정의 할 수 있는지, 아니면 나쁜 생각 일지를 알아 내려고 노력한 것 뿐이다. – Dnaiel
일단 긴 코드를 사용하면 전역 변수가 성가 시게된다. 그러나 더 작은 코드의 경우에는 문제가 없습니다. – astronautlevel