if __name__ == '__main__' 아래에서 코드를 꾸물꾸물 쓰는 사람은 손을 드세요
8220 단어 Python
새해 벽두에 나는 선생님과 모두에게 하고 싶은 말이 있다.
코드, ifname__ == '__main__'아래에서 코드를 질질 끌며 쓰는 사람은 손을 드세요.
이런 느낌name__ == '__main__'코드를 쓴 사람.
#! usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, absolute_import
import sys
def say_args(kind, data_list):
print("kind:", kind, " data:", data_list)
if __name__ == '__main__':
args = sys.argv[1:]
assert args
kind = args[0].lower()
data_list = [x.lower() for x in args[1:]]
say_args(kind, data_list)
이런 코드를 쓴 사람, 선생님, 화내지 말고 손을 드세요.당신은 이런 코드가 전 세계 범위의 명명 공간을 오염시켰다는 것을 알아차렸습니까?
주의하고 이해한 후에 쓴 사람은 손을 놓을 수 있다.
if __name__ == '__main__'다음은 전 세계.
예,ifname__ == '__main__'다음은 전 세계적인 범위다.
따라서 정의된 변수는 모두 전역 변수입니다.
방금 코드에서 로컬 변수
args
,kind
,data_list
는 전역 변수입니다.따라서 아래 코드를 써도 오류가 발생하지 않는다.
def say_args(kind, data_list):
print("kind:", kind, " data:", data_list)
# 未定義のargsを参照してもエラーにならない、グローバル変数argsが参照される
print("args: ", args)
※ 위의 글은 수정되었으니 자세한 내용은 "2017-01-02 변수""x""수정" 참조.이것을 직접 실행하면 오류가 발생하지 않으며 모듈로 부르면 Name Error 가 되어 번거로운 오류의 근원입니다.
그러니python 선생님의 언어 규범을 모방하지 마세요.
이 일에 관해 PyCharm 선생님도 "Shadows name"kind'form outer scope"라고 화를 내셨다.
해결책
if __name__ == '__main__'아래에 코드를 쓰고 싶으면 함수로 싸라.
#! usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, absolute_import
import sys
def main(args):
assert args
kind = args[0].lower()
data_list = [x.lower() for x in args[1:]]
say_args(kind, data_list)
def say_args(kind, data_list):
print("kind:", kind, " data:", data_list)
if __name__ == '__main__':
main(sys.argv[1:])
main 함수를 포함하여 전역 작용 영역의 명칭 공간을 오염시키지 않습니다.또한main 함수를 포함하여main 처리를 시작할 수 있어 코드의 전망이 좋아질 수 있다.초보자 여러분은 함수로 포장하는 것이 가장 좋습니다.
다른 걱정되는 분들은 PyCharm 선생님을 사용해 주세요. 이미 고모처럼... 아니요, 손발이 풀려서 안 되는 부분을 지적해 드릴게요.
pyflash 선생님, pyflaks 선생님과 pylint 선생님도 괜찮아요. pylint 선생님이 더 엄격해요.
(1/1 수정:pyflack 선생님이 안 계셔서pyflaks 선생님이 틀렸어요)
선생님이 하고 싶은 말이 이거예요.
"main 함수로 싸면 모듈로 사용하고 싶을 때 쓸모없는main 함수로 만들 수 있다"는 사람도 있다. 이후 사무실에서 선생님과 개별 대화를 나눈다.
보충 수업을 썼다
ifname__ == '__main__' 아래에서 코드를 꾸물꾸물 쓰는 사람은 손을 드세요
2017-01-02 변수 "x" 수정
knoguchi 선생의 평어를 받아들여 정정하다.
글에서 고치면 글이 읽기 어려워져 문말로 이동했다.
[수정 전 기사]
아까 코드에서는 로컬 변수
args
, kind
, data_list
, 임시 변수x
도 전역 변수로 바뀌었다.def say_args(kind, data_list):
print("kind:", kind, " data:", data_list)
# 未定義のxを参照してもエラーにならない、グローバル変数xが参照される
print("x: ", x)
포함 표현에 사용된 x
에 대해서는 글로벌 변수가 될 수 없으며 오류가 발생했습니다.그러나 PyCharm의 실행에 오류가 없을 것 같습니다. 이것은 PyCharm이 고속화를 위해 전역 프레임을 다시 이용했기 때문입니다.
결과의 확인은 PyCharm에서만 수행할 수 없다는 것이 교훈이다.
다시 한 번 knoguchi씨에게 감사를 드립니다.
댓글에서'리스크 전환의 변수 유출은 재속박의 문제'가 패키지 표시의 중점 중 하나입니다. 댓글을 동시에 읽어주세요.
Reference
이 문제에 관하여(if __name__ == '__main__' 아래에서 코드를 꾸물꾸물 쓰는 사람은 손을 드세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pashango2/items/57d8a08e53a4548fb5ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)