[PCB] Python Cook Book

mAesTro·2023년 4월 5일
2

PCB

목록 보기
1/1
post-thumbnail

귀도 반 루섬 그는 누구인가....

파이썬은 매우매우 똑똑한 분이신 귀도 반 루섬이라는 분께서 창시를 하셨습니다.

🤖TMI🤖

파이썬의 아버지 귀도 반루섬의 실제 사진이다.

  • 파이썬을 2달만에 개발하고 창시하였다. -> "휴가 기간동안 취미로 개발"
  • 2005 ~ 2012년 7년동안 구글에서 일하다.
  • 2020년 은퇴후 삶이 "지루하다." 이유로 65세의 나이로 마이크로소프트로 이직하다.

그 외에도 수 많은 커리 큘럼과 수 많은 업적들을 남겼습니다.결론은 오늘날의 파이썬에 적용되는 기초를 다지신 위대한 분입니다.

Python?

파이썬은 대중화 되어 있는 대표적인 프로그래밍 언어입니다.요즘 인문계 고등학교를 보면 정보 시간에 파이썬을 배우고 있는 모습들을 볼 수 있습니다.그 만큼 접근성이 쉽고 입문자들이 쉬운 언어라고 볼 수 있습니다.왜냐하면 파이썬 이전에 사용되었던 C언어나 Java의 코드나 어셈블리 코드를 보면 바로 직관적으로 비교가 가능합니다.

터미널 창에 Hello World라는 문구를 띄울때 C , Java , Assembly의 차이점들을 보도록 하겠습니다.

C

#include<stdio.h>
int main() {
	printf("Hello World");
	return 0;
}
그래도 코드가 짧아서 얼추 해석이 가능하다고 생각한다.




Java

public class GohomePlease {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
홀란스럽다. 갑자기 함수 앞에 무언가가 붙기 시작했다.
printin이 함수가 아니다. 메소드이다. 당황스럽다.




Assembly

section .data
    msg db 'Hello, World!',0

section .text
    global _start

_start:
    ; write 'Hello, World!' to stdout
    mov eax, 4
    mov ebx, 1
    mov ecx, msg
    mov edx, 13
    int 0x80

    ; exit
    mov eax, 1
    xor ebx, ebx
    int 0x80




Python

print("Hello World") 

이렇게 다른 문법들에서의 Hello World를 출력하는 코드를 보다가 Python에서의 코드를 보면은 마음이 편한해지고 간결하다는 특성을 가지고 있다.

그래서 다른 언어들보다 접근성이 낮고 입문장벽이 낮은 언어들중 하나이다.
또 다른 특징을 보자면은 다양한 라이브러리와 기술 폭에서 활용되고 있다.

"인공지능 , 웹 개발 등등 다양한 프레임워크와 라이브러리들이 존재한다."

🦾백엔드 프레임워크인 Djano

💪 백엔드 프레임워크인 Flask

🦿 데이터 분석 라이브러리인 Pandas

이렇게 사람들이 미리 설계해 놓은 프레임워크와 라이브러리들을 사용하면 퀄리티 높은 프로젝트들을 개발가능합니다.

How to work python?

파이썬은 앞에 언급하였던 Java나 C에서는 코드가 동작이 될려면 컴파일이라는 과정을 거쳐야 합니다.사용자가 작성한 코드를 어셈블리로 변환하는 작업을 말합니다.하지만 Python에서는 조금 다른 방식으로 동작하게 됩니다. 파이썬은 인터프리터방식을 통해서 코드가 실행 됩니다.

"인터프리터는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다."
📎 referacnce : wikipedia

하지만 인터프리터의 번역 과정을 보면은 조금 의아한 사실들이 있습니다.

Run source Code

처음에 사용자가 코드를 실행합니다.

a = 1
b = 2
print(a + b)

Lexing

String : a
String : b

Number : 1
Number : 2

Operators : = 
Operators : = 
Operators : +

keyword : print
Left_Parenthesis : (
Right_Parenthesis : )

이런식으로 Lexical analyze(작성된 코드를 분류하여 토큰을 생성하는 작업)이 진행이 될겁니다.
그리고 쪼개진 것들을 하나의 Token이라고 부릅니다.

Parsing

Lexing을 통해 생성된 Token들을 모아서 하나의 트리를 생성합니다.
이 트리를 Abstract Syntax Tree(추상 결정 트리(AST)라고 합니다.

while b != 0:
    if a > b:
        a = a − b
    else:
        b = b − a
return a

이러한 코드를 위와 같은 과정을 거쳐서 딕셔너리를 하나 생성후 아래와 같은 AST를 하나 만듭니다.

딕셔너리에 존재하는 key 값은 각각의 부모 노드(회색 사각형)가 되어서 생성된걸 확인 할 수 있고 자식 노드(초록색 사각형)들은 value값이 된것을 확인 할 수 있다.
📎 referance : wikipedia

만약에 코드가 토큰라이징 후 오류가 나게 되면 parsing을 중지하고 오류 문구를 출력해준다.
반대로 오류가 발생하지 않으면 컴파일러가 자동으로 Byte Code로 바뀌고 확장자가 .pyc 파일이 생성이 됩니다.

PVM(Python Virtual Machine)

Byte code로 변환된 것을 PVM에 로드하여서 이진수로 변환 합니다.
최종적으로 2진수를 사용자한테 output을 하는 형식으로 컴파일을 마칩니다. 오류가 발생하면 오류 메시지를 출력하고 마찬가지로 종료합니다.

📎 referance : linkedin

profile
선린인터넷고등학교 정보보호과

0개의 댓글