일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- subplot
- 카테고리분포 MLE
- Operation function
- Numpy
- namedtuple
- Python 유래
- 정규분포 MLE
- 표집분포
- scatter
- 부스트캠프 AI테크
- seaborn
- linalg
- unstack
- boolean & fancy index
- 가능도
- groupby
- Numpy data I/O
- dtype
- Python 특징
- BOXPLOT
- python 문법
- Array operations
- ndarray
- pivot table
- type hints
- VSCode
- Python
- 딥러닝
- Comparisons
- 최대가능도 추정법
- Today
- Total
또르르's 개발 Story
[02] Python 기본 문법(변수, 함수, 문자열) 본문
[01]에서 파이썬의 유래와 특징에 대해서 배웠다면 Python 기본 문법에 대해서 배워봅시다.
근데 오늘 정리할게 너무너무 많아서... ㅎㅎㅎ
오늘은 변수, List, 함수, 문자열에 대해서 한 번에 정리하겠습니다.
1️⃣ Variable & List
1) 변수란?
변수는 어떤 값을 저장하기 위한 메모리 공간을 뜻합니다. 메모리 공간에 이름을 만들고 거기에 값을 저장했다고 생각하면 됩니다. 변수에 들어가는 값은 메모리 주소에 할당이 되게 됩니다.
변수는 알파벳, 숫자, 언더스코어(_)로 선언이 가능합니다. 하지만 예약어(이미 코드에서 의미가 있는 단어, ex) for, if, else)는 사용이 불가하고, 변수명은 의미가 있는 단어로 표기하는 것이 좋습니다.
2) 기본 자료형 (primitive data type)
모든 언어는 변수를 가질 수 있고, 이 변수는 자료형에 따라 정수, 실수, 문자 등을 저장할 수 있습니다. 아래는 Python이 처리할 수 있는 데이터 유형입니다. 정수형의 대표적인 자료형은 integer, 실수형은 float, 문자형은 string, 논리형은 boolean입니다.

하지만 파이썬의 특징이라고 할 수 있는 Dynamic Typing은 코드 실행 시점에 데이터의 Type을 결정합니다. 따라서 개발자는 따로 자료형을 적어줄 필요는 없습니다. Dynamic Typing은 코드를 훨씬 간결하게 만들어주고 코드를 빠르게 작성할 수 있다는 장점이 있죠. 그렇지만 단점도 있습니다. 다른 사람이 적은 코드를 볼 때 자료형을 알기 어렵다는 것이죠.
3) 연산자 (Operator)
Python의 계산은 +,-,*,/와 같은 연산자(Operator)와 숫자(또는 문자)와 같은 피연산자(operand)로 구성됩니다. 특히, Python에만 있는 특이한 연산자(Operator)가 있는데요. 바로 " ** "와 " // " 입니다.
- "**"는 제곱승 계산 연산자

- " // " 는 무조건 나머지를 버리고 int형을 출력하는 나눗셈
4) 리스트 (List)
10개... 100개.... 10000개의 변수를 저장하기 위해서 하나씩 저장하는 것보다는 리스트(List)를 사용하는 게 효과적입니다. 다른 언어의 배열과 같은 역할을 하죠. 시퀀스 자료형이며, 하나의 데이터 타입으로만 리스트가 만들어지는 것이 아닌 int, float, str 등 다양한 데이터 타입을 포함할 수 있는 자료형입니다.

리스트의 특징은 아래와 같습니다.
- 인덱싱 (Indexing)
list에 있는 값들은 주소(Offset)를 가집니다. 주소를 사용해 할당된 값을 호출하게 됩니다.

- 슬라이싱 (Slicing)
파이썬 list의 가장 큰 특징으로 list값을 원하는 구간만큼 잘라서 사용할 수 있습니다.

- 연산
append, extend, insert, remove, del 등 다양한 함수를 활용해서 리스트의 추가와 삭제가 가능합니다.

- 다양한 Type 포함
int, float, str 심지어 list까지 하나의 list안에 들어갑니다.

- 패킹과 언패킹
패킹은 한 변수에 여러 개의 데이터를 넣는 것을 말하고, 언패킹은 한 변수의 데이터를 각각의 변수로 반환하는 것을 말합니다. 언패킹은 list값을 다양한 변수에 '한 번에' 받을 수 있어 코드가 간결해집니다.

- 메모리 저장 방식
Python list는 복사를 할 때 조심해야 합니다. 메모리 저장 방식이 리스트의 주소 값을 저장하는 방식을 사용하기 때문이죠. 아래 그림과 같이 a, b는 다른 리스트이지만 b=a를 하게 되면 b 리스트의 주소 값이 a 리스트를 참조하게 됩니다. 따라서 아래에서 a.sort()를 진행하게 되면 b까지 변경되는 것을 알 수 있습니다.
이러한 경우에는 b 리스트가 [6,7,8,9,10]으로 재할당 될 때 a 리스트와의 연결이 사라지는 것을 볼 수 있습니다. 만약, 메모리 주소끼리 연결되지 않는 복사를 하고 싶다 할 때는 b = a [:]와 같은 방식 또는 b = copy.deepcopy(a)를 사용하시면 됩니다.

2️⃣ 함수 (Function)
1) 함수란?
코드를 작성하다 보면 계속해서 반복하는 일을 할 때가 있습니다. 그럴 때마다 똑같은 코드를 작성하는 것은 용량 낭비라고 할 수 있죠. 함수 (Function)은 이러한 반복적인 일을 하나로 묶어 필요할 때마다 호출하는 "하나의 단위"라고 할 수 있습니다.
함수는 기본적으로 함수 이름, parameter, 수행문, return 형태로 되어있습니다.
parameter는 외부의 값을 받아오는 부분으로 함수 내부에서 연산을 위해 사용합니다.
return은 연산이 종료된 함수에서 값을 반환하는 부분입니다.

함수의 수행 순서는 아래 그림과 같습니다. 3번은 함수 부분인데 컴파일러(또는 인터프리터)는 메인 프로그램이 시작하기 전에 3번 부분을 Memory에 올려놓고 시작합니다.

2) parameter vs argument
parameter와 argument의 차이는 정확히 몰랐던 건데..
parameter는 함수의 입력 값 인터페이스를 말하며, argument는 실제 parameter에 들어간 값을 말한다고 합니다.
3) 함수 작성 가이드라인
- 함수는 가능하면 짧게 작성합니다.
- 함수 이름에 함수의 역할, 의도가 명확히 드러나야 합니다.
- 하나의 함수에는 하나의 역할만!
- 인자로 받은 값 자체를 바꾸지 말고 임시 변수를 선언합니다.
3️⃣ print 문을 활용해서 결과 formatting 하기
맨날 헷갈리지만 꽤 쓸만한 내용입니다. print문에는 기본적인 출력 외에 다양한 formatting을 사용해 형식을 지정할 수 있습니다.
1) % string
C언어의 printf와 비슷한 방식으로 %d, %s 등의 방식을 사용합니다.

2) format 함수
format 함수는 출력 부분에 { }를 쓰고,. format() 안에 value를 넣는 방식입니다. { }안에 숫자와 정렬 방식을 사용할 수 있습니다.

3) f-string
f-string은 python 3.6 이후 PEP498(파이썬 개발자들이 파이썬이 원하는 방향과 내용을 적어놓은 문서, 498번째 문서이며 이 내용을 보고 최종 결정자가 Python을 업데이트함)에 근거한 formatting 기법입니다. 앞에 f를 붙여 사용합니다.
( f-string은 나머지 formatting과 다르게 왼쪽 정렬이며, > 는 오른쪽 정렬, < 는 왼쪽 정렬, ^ 는 가운데 정렬, * 을 하면 나머지 칸은 *로 채워줍니다.)

4️⃣ 문자열 (string)
1) 문자열이란?
시퀀스 자료형으로 문자형 data를 메모리에 저장한 것을 말합니다. 영문자 한 글자는 1byte의 메모리 공간을 사용합니다.
2) 문자열 특징
문자열은 Python의 list와 비슷한 특징을 가집니다.
- 인덱싱 (Indexing)
문자열은 list와 같이 각 문자는 개별 주소(Offset)를 가집니다. 주소를 사용해 할당된 값을 호출하게 됩니다.

- 슬라이싱 (Slicing)
문자열의 주소 값을 기반으로 문자열의 부분을 반환합니다.

- 연산
문자열은 덧셈과 뺄셈과 같은 연산이 가능합니다. 또한, in 명령으로 해당 변수가 있는지 확인할 수 있습니다.

3) 문자열 함수
문자열은 다양한 함수들을 지원합니다.


5️⃣ Call by object reference
1) 함수 호출 방식
함수에서 parameter를 전달하는 방식은 다양합니다.
- 값에 의한 호출 (Call by Value)
함수에 인자를 넘길 때 값(Value)만 넘기는 방식입니다.
함수 내에서 인자 값이 변경될 때, 호출자에게는 영향을 미치지 않습니다. - 참조에 의한 호출 (Call by Reference)
함수에 인자를 넘길 때 메모리 주소를 넘깁니다.
함수 내에서 인자 갑이 변경될 때, 호출 값도 같이 변경되는 속성을 가집니다. - 객체 참조에 의한 호출 (Call by Object Reference)
파이썬은 객체의 주소가 함수로 전달되는 방식을 사용합니다.
전달된 객체를 참조하여 변경 시, 호출자에게 영향을 주나,
새로운 객체를 만들 경우 호출자에게 영향을 주지 않습니다.
아래 수식과 같이 ham이라는 객체를 span() 함수에 넣었을 때
span()의 parameter인 eggs가 변경될 때는 ham도 같이 영향을 받습니다.
하지만 eggs에 [2, 3]으로 새로운 객체를 생성해주면 호출자의 영향을 받지 않습니다.

6️⃣ Function type hints
Python의 가장 큰 특징은 Danamic typing, 즉 자료형을 자동으로 맞춰준다는 특징을 가지고 있습니다. 하지만 다른 개발자가 작성한 코드를 볼 때 interface를 알기 어렵다는 단점이 있습니다.
type hints는 이러한 점을 보완하여 함수의 parameter와 return에 type을 표시해주는 기능입니다. parameter 옆에 :를 사용하여 int, str 등을 표시하고 return type은 ->(화살표)를 사용해서 반환형을 표시해줍니다.

type hints의 장점으로는
- 사용자에게 인터페이스를 명확히 알려줄 수 있습니다.
- 함수의 문서화 시 parameter에 대한 정보를 명확히 알 수 있습니다.
- mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인할 수 있습니다.
- 시스템의 전체적인 안정성을 확보할 수 있습니다.
'부스트캠프 AI 테크 U stage > 이론' 카테고리의 다른 글
[04-1] Python 정규 표현식(Regular Expression) (0) | 2021.01.22 |
---|---|
[04] Python의 OOP (객체 지향 프로그래밍) 와 module (모듈) (0) | 2021.01.21 |
[03-1] Pythonic code (0) | 2021.01.20 |
[03] Python data structure (0) | 2021.01.20 |
[01] 개발환경 & Python (1) | 2021.01.18 |