[김건우] [AI 기초와 활용] 2. 파이썬 기초 용어 & 코드 읽는법
작성자 : 김건우
(2024-03-14)
조회수 : 9553
[YOUTUBE 링크] [김건우] [AI 기초와 활용] 3. 파이썬 기초 용어 & 코드 읽는법 - YouTube
[초간단 Calculator 코드] 유튜브 링크 하단 첨부
[모든 코드] 유튜브 링크 하단 첨부
파이썬은 현재까지도 가장 인간다운 프로그래밍 언어라는 특징이 있는데요.
현재는 다양한 컴퓨터 언어 중 가장 많은 사람들이 사용하고 활용하는 언어입니다. 그리고 인간다운 언어이기 때문에
배우기 매우 쉽습니다. 우리는 앞으로 AI를 다루게 될텐데요. 이러한 AI를 다루기 위해서 거의 무조건 파이썬을 사용해야 합니다.
그래서 기본적인 용어들을 통해 마치 영어공부를 할 때 문법 공부하듯 이야기하는 시간을 갖고자 합니다.
지금 소개 드리는 용어는 아주 기초적이지만 오늘 소개 드린 용어만으로도 대부분의 코드를 읽고 활용할 수 있습니다.
연산자는 상호관계를 나타내기 위한 기호인데요. 기능에 따라 산술, 비교 연산자로 분류하기도 합니다.
표로 나타내 보겠습니다.
산술연산자 비교 연산자
논리연산자
주석은 코드에서 #을 붙이고 작성하는 글입니다.
프로그램의 진행에 영향을 주지 않고 단순하게 사람에게 설명을 위해 사용하고요.
파이썬에서 #을 입력하고 글을 쓰면 주석이 됩니다.
주석은 코드가 길어지면 일일이 읽기도 힘들고 공동작업시 본인의 코드를 다른 사람에게 알리기 위해서 간단하더라도 꼭 작성해야 합니다.
주석을 작성해야 하는 이유
주석을 없애 보겠습니다.
코드가 어떻게 짜였는지 주석만 없어졌을 뿐인데 한눈에 안보이죠
function 기능을 뜻하기도 하는데요. 파이썬에서는 def나 print 같은 기능들을 수행하는 친구들을 함수라고 합니다.
변수는 흔히 수학방정식에서 x, y같이 하나로 정의되지 않고 계속 변하는 수를 변수라고 하는데요.
변수는 파이썬에서 숫자가 될수도 있고 또는 함수가 될 수도 있습니다. 변수는 본인이 알아보기 쉽도록 본인 스타일대로 작성하는 것이 보편적입니다.
객체(object)는 (찍어낸) 물건입니다. 물건을 찍어내기 위해서는 각종 기능을 수행하는 함수, 메서드등을 함께 묶어 놓은 것을 이야기합니다.
일반적으로 파이썬에서는 class, import등으로 정의를 하게 됩니다.
[참조] Lecture 파이썬[LINK]
(1) 클래스와 객체
- 과자 틀 → 클래스(class)
과자 틀에 의해서 만들어진 과자 → 객체(object)
- 인스턴스(instance)
클래스(class)를 이용하여 생성된 객체(object)를 의미한다.
즉, 인스턴스는 클래스를 통해 정의된 속성(attribute)과 메서드(method)를 가진 객체를 의미한다.
예제제
딕셔너리의 형태를 갖고 있습니다. 해당 코드에서 객체는 노란색박스의 프룻이고 우항에 따라 값이 바뀔수 있기 때문에 변수로도 생각할 수 있습니다.
그리고 apple 콜론 3이라고 적혀있는데요. 딕셔너리는 키와 값으로 이루어져 있다고 이야기 했었죠.
프룻을 변수라고 한다면 키는 apple 값은 3으로 볼 수 있겠네요. 만약 프룻을 객체라고 한다면 apple은 변수가 될거에요.
명령창에 화면의 np.linspace(1, 10, 10)을 입력해 보면요.
오류가 나옵니다.
Np가 정의되지 않았다고 하는데요.
앞서 메소드를 출력하려면 사전에 객체내에 정의를 해주어야 한다고 이야기 했었죠. 오류는 np를 객체로 인식하지 못하고 있다는 것을 이야기합니다.
이를 위해서 import numpy as np를 입력해야 하는데요. 이는 "numpy라는 패키지를 객체로 호출해서 np를 통해 실행하겠다." 라는 의미로 해석이 가능합니다.
그렇다면 np.linspace(1, 10, 10)에서 np를 객체라고 부를수 있겠네요. 그리고 도트 뒤에 붙는 linspace는 np내에 사전 정의된 메소드를 이야기합니다.
그리고 전체인 np.linspace는 배열을 생성하는 함수라고 부를수 있겠네요.
그리고 괄호안의 1, 10, 10은 앞의 함수에 전달되는 값이기 때문에 파라미터 또는 매개변수라고 할수 있겠군요.
복잡해 보이는 예제를 한번 살펴보겠습니다.
Class는 객체를 생성하기 위한 파이썬 명령어이죠. 그러므로 car는 객체입니다.
__init__은 def을 통해 함수로 정의되었죠. 하지만 class를 통한 객체내에서 기능하는 함수는 메소드라고 이야기 드렸었죠.
따라서 __init__과 밑에 4번째 줄의 drive는 메소드입니다. __init__이라는 메소드는 파이썬에서 특수한 기능을 하는
'생성자 메소드'라고 합니다. 객체의 초기화를 담당하구요. 해당 클래스의 속성을 설정합니다.
self는 자기 자신을 의미하는 특수한 단어입니다. 자기 자신을 불러오기 때문에 객체이며, car객체의 상위 객체이기 때문에
임시로 생성되는 객체입니다. 이를 인스턴스 객체라고도 부르게 됩니다.
brand는 특별한 값이 아닌 앞의 메소드에 전달되는 값이기 때문에 매개변수입니다.
그리고 3번째 줄은 객체 car의 특징이나 성질을 나타내기 위해 클래스내에서 정의된 변수로 속성을 나타내고 있습니다.
그렇다면 3번째 줄에서 self는 객체, 도트 브랜드는 속성을 가진 매개변수이고 다시 자기자신인 brand 변수로 받게 됩니다.
5번째 줄의 print는 클래스 외부에 있는 파이썬 기본 함수이기 때문에 함수입니다.
이렇게 클래스를 이용해 car라는 객체를 정의했는데요.
우리는 drive라는 메소드로 Driving the 라는 구문에 Toyota가 붙도록 하고 싶습니다.
이를 위해서 My_car라는 인스턴스 객체를 하나 생성합니다.
그리고 사전에 정의한 객체인 car에 Toyota라는 매개변수를 입력하겠습니다.
My_car라는 인스턴스 객체가 car라는 객체를 통해서 drive메소드로
프린트 함수를 통해driving the toyota가 출력되는 것을 볼 수 있겠네요.
또 다른 예제에요~
Person이라는 객체를 호출하고 name, age, address라는 매개변수를 가지고 김두기를 호출해보겠습니다.
Class를 통해 person이라는 객체를 만들겠습니다. Def를 통해 init이라는 생성자 메서드를 생성하구요.
객체인 Self, 받아줄 매개변수로 name, age, adress를 생성할게요. 그리고 속성을 self.속성매개변수 이퀄 변수로 정의할게요.
그리고 person이라는 객체를 정의하고 kim2kie라는 인스턴스 객체에 name, age, address 값을 할당할게요.
이렇게 할당된 객체를 프린트 함수를 통해 속성 값을 출력해 보면, 지정한 이름 나이 주소가 출력되는 것을 확인할 수 있습니다.
Q1. drive vs. drive( ) 둘다 메소드 인가요?
A1. 둘 다 메소드입니다.
1.drive : 메소드 이름(클래스 내에서 정의된 메소드의 이름)
2.drive( ) : drive 메소드를 호출하는 구문
우리는 함수나 메소드등 기능을 호출하는데 뒤에 괄호 ( ) 를 사용합니다.
Q2. 싫어요. drive.Toyota로 같은 결과를 낼 순 없나요?
A2. 점(도트)는 ‘속성접근연산자’ 입니다.
- 객체의 속성에 접근할 수 있도록 하는 특수기호입니다.
- 도트를 사용해 객체의 속성 값을 읽거나 설정입니다.
1. 점 표기법(Dot Notation) – drive.Toyota
2. 괄호 표기법(Bracket Notation) – drive[“Toyota”]
아직도 햇갈리나요? 한번더 예제를 풀어볼게요. dict라는 객체를 키와 값으로 딕셔너리 형태로 정의해 볼게요.
1.
2.
괄호로 표기해서 키 값을 출력하도록 하면 사전에 정의한 10이 출력되는데요. 이번에는 Dict 도트 키로 출력하려면
밑의 화면처럼 오류가 나오게 되요. 혹시 중간에 예제 중 my_car = car.drive("Toyota") 객체와 차이를 알아보시겠나요?
오류를 보면 무엇이 문제인지 알 수 있습니다. dict라는 객체는 key라는 속성이 없다고 나옵니다.
파이썬의 딕셔너리 객체자체에는 key라는 사전에 정의된 속성이나 메소드가 존재하지 않기 때문인데요.
따라서 딕셔너리 객체에서 값을 가져오기 위해서는 대괄호를 통해 값을 직접 불러와야 하는 것입니다.
다음 시간에는 직접 데이터를 다운받아서 객체인 pandas 라이브러리를 불러오고 데이터프레임을 다루어 보도록 하겠습니다.