1. Python Script File (=main script file)의 구조
다음은 일반적인 Python script file의 전형적인 구조를 간략히 나타냄. (고정된 것은 아님.)
- 이미 구현된 기능 등을 사용하기 위해 외부 library 와 module을
import
함. - 코드의 재사용성과 가독성 등을 위해 반복되는 code들을 function이나 class로 정의.
- main script (=main program)으로 동작하는 경우에 수행될 script에 해당하는
main
function 작성.- 일반적으로 main 함수는 초기화 및 user input에 대한 처리 등으로 시작.
- 이후 입력된 data들에 대해 processing을 수행 (2번에 정의한 function 및 class의 instance사용)
- 처리 결과 등을 출력하고 적절한 return value를 반환하고 종료.
- main script로만 동작할 경우에는
main
함수를 호출하여 수행하도록 처리.
위와 같이 python interpreter에 경로를 넘겨주어 직접 수행되는 python script file을 main script 라고 부름.
반면, import되어 사용되는 python code file들은 module이라고 부름.
https://dsaint31.me/mkdocs_site/python/basic/module_package/
2. Example
위의 순서를 따르는 예제 Python script는 아래에 있음. (파일명 : py_hello_python.py
)
해당 script는
원의 반지름 값을 argument로 입력받아,
해당 반지름을 가지는 원의 넓이를 계산하여
출력해 주는 프로그램임.
# py_hello_pyton.py
# import necessary libraries
import sys # to get arguments
import math # to get pi
# define functions
def get_circle_area(r):
return math.pi * r **2
def main():
# initialization and get user's input
radius = 0.
area = 0.
args = sys.argv
# processing
argc = len(args)
if argc > 1:
radius = float(args[1])
area = get_circle_area(radius)
# print result!
print (f'Hello, Python!')
print (f'The area of a circle with a radius of {radius} is {area}')
return 0
# __name__ is a special string attribute
# that distinguishes whether
# * the current module (=py file) is imported from another module
# * or is directly executed as the main script
# , and the Python interpreter sets
# the value of __name__ for all modules.
if __name__ == "__main__":
# Code that only runs when it is executed as the main script.
main()
example 실행하기 (main script로)
해당 python 파일(py_hello_pyton.py
)을 python interpreter로 수행하는 명령어와 결과는 다음과 같음.
$python py_hello_python.py 4
Hello, Python!
The area of circle having radius of 4.0 = 50.26548245743669
example 실행하기 (-m
옵션사용하기)
python interpreter에 -m
옵션으로 수행할 수 있음. 이 경우 해당 option을 통해 수행될 module명을 지정해 준다.
$python -m py_hello_python 3
hello_python 3
Hello, Python!
The area of a circle with a radius of 3.0 is 28.274333882308138
3. Python Virtual Machine (PVM) based Python Interpreter
다음 그림은 Python Interpreter에서 python program이 실행되는 순서에 대한 diagram임.
위의 Python Source Code는 Python Interpreter에서
- bytecode로 변환이 되며,
- 해당 bytecode는 source code가 있는 디렉터리에 있는 __pycache__ 서브디렉터리 내에 저장된다.
- 해당 bytecode는 source code와 이름이 같고, 표준 Python Interpreter인 CPython을 사용할 경우 .pyc의 확장자를 가진다.
위의 script에선 math
와 sys
module을 사용하여 기존의 구현된 기능을 사용하였다.
- Python Interpreter를 설치할 때 같이 제공되는 built-in module들임.
https://dsaint31.me/mkdocs_site/CE/ch08/ce08_compiler_interpreter/#byte-code
https://dsaint31.me/mkdocs_site/CE/ch08/ce08_compiler_interpreter/#binary-code
3.1 PVM
Python Virtual Machine은
- 이 bytecode를 Host OS에서 수행가능한 binary code, 즉 machine code로 바꾸어서
- Host system에서 수행되도록 한다.
- Virtual Machine들은 자신의 고유한 instruction set을 가지고 있음 (instruction = binary code = machine code)
Virtual machine
an abstract computer with an incredibly complicated instruciton set
implemented entirely in software.
2023.06.05 - [Programming] - [Python] Interpreter and PVM (Python Virtual Machine)
4. REPL : Python Interactive Shell
이 예제와 같이 .py
파일을 통째로 Python Interpreter에 넘겨줄 수도 있지만, Python (Interactive) Shell을 통해 REPL 모드로 수행할 수도 있다.
- 이 경우엔 enter를 통해 statement 입력이 끝났음을 Python shell에 알려주면
- python shell은 입력된 statement를 Python interpreter에 읽어들이고(Read)시키고
- 수행한 결과를 얻어(Evaluation), 출력(Print)하고 다시 입력을 대기하는 것을 반복(Loop)한다.
- 참고로 exit() statement가 입력될 경우 python shell은 종료함.
2023.06.09 - [Programming] - [Python] Python Interactive Shell (or Python Interactive Prompt)
'Programming' 카테고리의 다른 글
[Python] Function Definition, Call and Arguments (0) | 2023.06.10 |
---|---|
[Python] Python Interactive Shell (or Python Interactive Prompt) (0) | 2023.06.09 |
[Programming] Application Programming Interface (API) (0) | 2023.06.08 |
[Python] range and enumerate (0) | 2023.06.07 |
[Python] Iterable and Iterator, plus Generator (1) | 2023.06.07 |