728x90

(1) 모듈(module) import

프로그램 시작전에 "import 모듈이름"을 수행하면 해당 모듈이 제공하는 기능을 사용할 수 있습니다.
그리고, 그 모듈이 제공하는 기능이 무엇인지 List 를 보고 싶으면 dir 을 사용하면 됩니다.
그 기능에 대한 document 를 보고 싶으면 help 를 사용하면 됩니다.

dplee@dplee-VirtualBox:~$ python

Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 

[GCC 4.6.1] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import sys  # sys 모듈을 포함시킴

>>> dir(sys)     # sys 모듈에 포함된 symbol list 를 모두 보여줌.

['__displayhook__', '__doc__', '__excepthook__', '__name__', 

'__package__', '__stderr__', '__stdin__', '__stdout__', 

'_clear_type_cache', '_current_frames', '_getframe', '_mercurial', 

'api_version', 'argv', 'builtin_module_names', 'byteorder', 

'call_tracing', 'callstats', 'copyright', 'displayhook', 

'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 

'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 

'float_info', 'float_repr_style', 'getcheckinterval', 

'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 

'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 

'gettrace', 'hexversion', 'long_info', 'maxint', 'maxsize', 

'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 

'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 

'py3kwarning', 'pydebug', 'setcheckinterval', 'setdlopenflags', 

'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 

'stdout', 'subversion', 'version', 'version_info', 'warnoptions']

>>> help(sys)        # sys 모듈에 대한 설명을 보여주는 document

>>> help(sys.exit)  # sys 모듈에 포함된 exit 함수에 대한 document

다음과 같이 프로그램에서 사용할 수도 있습니다. sys 모듈의 argv 를 사용하는 예제입니다. c 나 c++ 프로그램에서 argument 를 사용해보셨다면 이해가 갈 것입니다.
프로그램 인자 중에서 프로그램 이름(argv[0]) 다음의 인자(argv[1])를 Hello 함수에 전달한 것입니다.

#!/usr/bin/python

import sys

def Hello(name):   # argument 를 별도로 선언할 필요도 없다.
name = name + '!!!!!!'
print 'Hello', name

def main():
Hello(sys.argv[1])

if __name__ == '__main__':
main()

sh> ./hello.py Alice

만약 import sys 를 주석처리(#)하면 "NameError: global name 'sys' is not defined" 라는 에러를 뱉어냅니다.
python 인터프리터를 실행하여 내장모듈인 sys 및 os 의 symbol 및 함수 list 들을 dir 로 확인해보시고 한번씩 수행해 보시기 바랍니다.

(2) python 들여쓰기

python 은 소괄호, 중괄호 등의 block 구분용 괄호들을 사용할 필요가 없습니다. 들여쓰기(indentation)가 그 역할을 대신합니다. if 문에서 사용하는 괄호도 사용할 필요가 없습니다.
다음의 소스를 보시죠.

#!/usr/bin/python

import sys

def Hello(name):
    if name == 'Alice' or name == 'Nick':  # or, and 를 이용
        print 'Alert : Alice Mode'
        name = name + '???'
    else:
        print 'Else'
    name = name + '!!!!!!'
    print 'Hello', name

def main():
    Hello(sys.argv[1])

if __name__ == '__main__':
    main()

Hello 함수를 보면 if else 구문이 같은 수준의 들여쓰기를 했고, if block 안의 내용들은 또 한번 들여쓰기가 되어 있는 것을 볼 수 있습니다. 그리고, if 구문에서는 name == 'Alice' 와 같이 괄호 없이 비교 구문만 넣으면 됩니다.

(3) Line by Line 실행되는 인터프리터

python 은 line by line 으로 즉석에서 실행해나가는 인터프리터입니다. c 나 c++, java 처럼 컴파일이라는 단계를 거치면서 구문의 오류 등을 점검하지 않습니다.
한 line 씩 바로 실행시키면서 그 때 구문 오류나 변수 오류 등을 점검합니다.
그렇다면, 다음의 코드를 실행하면 어떻게 될까요 ?

#!/usr/bin/python

import sys

def Hello(name):
    if name == 'Alice' or name == 'Nick':  # or, and 를 이용
        print 'Alert : Alice Mode'
        name = name + '???'
    else:
        NoDefFunc(name)      # 정의되지 않은 함수 사용
    name = name + '!!!!!!'
    print 'Hello', name

def main():
    Hello(sys.argv[1])

if __name__ == '__main__':
    main()

위의 소스를 c 나 c++ 처럼 컴파일을 한다면 아마 not defined 오류가 떨어질 것입니다. 하지만, python 은 다르죠. 아래 실행결과를 볼까요 ?

sh> ./hello.py Alice

Alert : Alice Mode
Hello Alice???!!!!!!

문제없이 실행되었군요. 프로그램 실행 시에 해당 라인이 수행이 되지만 않는다면 오류가 발생되지 않습니다. 재미있죠 ? ^^

 

출처 : http://cloudrain21.tistory.com/entry/내장모듈-import-block-들여쓰기indentation

728x90

'Python' 카테고리의 다른 글

python list2  (0) 2014.05.02
python list  (0) 2014.05.02
python string  (0) 2014.05.02
python interpreter  (0) 2014.05.02
python 언어란  (0) 2014.05.02

+ Recent posts