[개발] 파이썬 문법 5분만에 읽히기 - 파이썬 기본 문법 요약/정리 8 가지
파이선 기본 문법 요약 정리 - 8종 기본 사항
파이썬 기본 문법
다른 개발 언어 (특히 C언어 등)을 알고 있다는 가정하에,
다른 언어와 어떤 차이점이 있는지... Python 문법의 특징을 살펴 본다.
각 항목에서 궁금한 사항은, 본 포스팅의 가장 하단에 Python Shell에서 테스트 해보자.
그래야, 체감하고 느끼면서 장기기억으로 전환될 수 있다. (하단 참조)
1. 변수 정의 및 변수 할당
○ 변수는 별도 선언 없이 바로 사용할 수 있다. (그러나, 가급적 명시/초기화 하는게 좋다.)
a = 1
b = 1
위 변수 선언은 아래와 같이 한번에 Assign 할 수 있다. 이것은 반복형(List, tuple) 등을 Unpacking 하는 방법인데 나중에 거론 하도록 하자. 아무튼 아래와 같이 한꺼번에 할당 할 수 있다. (※ 내부적으로는 tuple을 사용하여 Assign 하는 것이다. )
a,b = 1,1
Python 에서는 int, float, string 등의 기본 변수 타입 이외에, list, tuple, dictionary 등의 변수 타입이 있습니다.
2. 들여쓰기 (Indent)
[ 들여쓰기(Indent)의 사용 ]
- Python의 범위(Scope)에 대한 블럭 지정을, 들여쓰기 (Indent)를 사용합니다. 하나의 블럭은 동일한 들여쓰기를 사용해야 합니다.
- C/C++ 등에서 중괄호 "{" , "}"를 사용하는 범위로고 보면 될것 입니다. ( C / JAVA는 블럭지정을 중괄호 사용 → Python은 들여쓰기 사용
이 때, 일반적으로 1단계 들여쓰기에 4공백을 사용합니다. 그러나, 꼭 4공백을 지켜야하는 것은 아닙니다. Pycharm 등 Python 전용 IDE를 사용하면, 알아서 들여쓰기 해 줍니다.
[ 콜론(:) 사용 ]
- Python에서 if/else/elif, for/while, with 등 next 블럭이 나오는 경우, 추가 Statement를 위해서 Colon ( : )을 사용합니다.
3. 제어문
if문은 별다른 특이 사항은 없습니다. 다만, 전술한 바와 같이 문장 끝에 오는 Colon ( : ) 과 들여쓰기만 유의 하시면 된다.
if n==1 :
print(“1”)
elif n==2 :
print(“2”)
else:
print( n)
<주의> python 버전에 따라 소폭 차이가 있다.
예를 들면, python 2.7 이하에서 print문은 괄호 없이 사용이 가능한 반면, Python3.x는 괄호가 필수 이다.
# python 2.x
print a
# python 3.x
print(a)
4. 반복문
for 문은 다른 언어 (C언어 등)과 거의 유사하나, 반복 범위 설정에서 차이가 있습니다.
- python의 반복하는 범위는, List형의 배열 만큼 반복합니다.
- 즉, 반복 회숫는 List배열의 원소 갯수와 동일합니다.
- 매 반복에 할당되는 Value는 List 배열에서 해당되는 원소(Element)입니다.
- Python의 for문의 반복은, list 배열에 담겨 있는 원소(element)를 하나씩 꺼내서 사용는 방식으로 이해하면 됩니다.
다음은, C/C++의 For문과 Python의 For문을 비교 용도로 보여준 예제 입니다.
# C/C++
# for (i=0; i<10; i++)
# printf(i)
# python
for i in range(10):
print(i)
위, 문장은 아래와 같은 의미를 가집니다.
- 0 에서 부터 9까지의 숫자 배열 ( [0,1,2,3,4,5,6,7,8,9] )에서 ===> range(10)
- 숫자를 하나씩 꺼내와 i에 할당하고,
- 배열의 마지막 수 9까지 반복하며 출력 ( print(i) )
- 이 때, Range(10)은, 0에서부터 9까지의 숫자 배열인 list를 생성합니다. [ 0, 1, 2, …, 9]
이 때 주의할 점은,
- 파이썬에서, 모든 배열형의 (시작, 끝)을 지정한 경우, 마지막 element는 포함되지 않는다는 것입니다.
- 0이상 10미만으로 이해 하면 됩니다.
- range(10)은 range(0,10)과 동일한 의미입니다.
- 따라서, 마지막 10은 제외된 0~9까지의 숫자 배열입니다.
위 예를 풀어서 다시 쓰면 다음과 같습니다.
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # range(10)
for i in a:
print(i)
#은 주석을 의미함
따라서, python에서 반복 순서 또는, 반복 간격 등을 조절하기 위해서는, 변수의 list를 변경하면 됩니다.
a = [0, 2, 4, 6, 8 ] # range(0,10,2)와 동일
for i in a:
print(i)
앞서 살펴본 바와 같이, Python에서 List, Tuple 등 Array Type의 변수형이 매우 중요합니다. 특히, 데이터 분석의 경우, Data가 Array/List/Tuple 등에 저장되기 때문에, 이들에 대한 변수를 다루는 것은 데이터 분석 능력과 직/간접적으로 영향을 받습니다.
5. 파이썬 스타일 - List Comprehension
일반 프로그래밍 언어와 Python과의 주된 차이점은 List Comprehension이라는 부분에 있습니다. 보통 Pythonic 이라고 표현되는 대표적인 예입니다. 이러한 표현들로 파이썬(Python)은 축약문법을 많이 사용하곤 합니다.
바로전 절에서 사용한 For문/반복문을 Python은 다음과 같은 한줄(Single Line)으로 표현할 수 있습니다. (자주 싱글라인으로 표현합니다.)
[ i for i in range(10) ]
결과:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
또한 이는 리스트형으로 만들어서, 변수에 바로 저장할 수도 있습니다.
list_a = [ i for i in range(10) ]
또한 아래와 같이 반복문 내부에 조건식을 포함할 수 있습니다.
[ i for i in range(10) if i%2==0 ] # 짝수만 출력
결과:
[0, 2, 4, 6, 8 ]
ㅇ 아래와 같이 반복문에 조건식을 부여 할 수 있습니다.
a = [ i if i%2==0 else ‘odd’ for i in range(10) ]
print(a)
결과:
[0, 'odd', 2, 'odd', 4, 'odd', 6, 'odd', 8, 'odd']
6. 함수 (Function)
함수의 대한 정의는 아래와 같이, " def " 사용하여 정의 합니다.
def func_name(인자):
...
함수 내용
...
return 반환값
함수정의 (def) 는 아래와 같이 함수명, 인자를 포함하여 선언하고, 들여쓰기를 포함하여 블럭을 설정하며, 내부 statement를 기술한다.
(※ 이 때, 함수의 끝에 Colon (:) 이 포함되어야 함에 유의)
def func( n ) :
print( n )
return n+1
7. 익명 함수 - Lambda
파이썬에서는 간략화/단순화를 위해서 익명함수 (인라인 함수로 많이 사용)를 사용한다.
파이썬 또한 Functional Programming의 영향을 받아서, "모든 것은 개체"라는 기본 이념을 가지고 있다. 따라서, Lambda 함수 또한 개체이다.
- lambda 함수를 사용하면, list or 반복적으로 수행하는 기능을 별도 함수선언 없이 간략하게 수행할 수 있다.
- 아래 2개 함수는, 동일한 함수의 2가지 정의라고 할 수 있겠다.
# CASE 1: func 함수선언
def func(x):
return x+1
# CASE 2: lambda 함수 func
func = lambda x : x+1
Lambda 함수는 함수정의 없이 약식으로 사용할 수 있으며, 다수의 데이터에 반복적인 연산을 수행할 때 많이 사용된다.
다음은 Labmda 함수가 가장 자주 활용되는 경우의 예이다.
a = range(10)
map( lambda x: x**2, a )
# 결과:
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
※ map 함수는, 연속형 변수의 element 를 하나씩 꺼내서, 함수의 Input으로 하나씩 넣어준다.
위 코드에서는, [0, 1, 2, .... 9]의 내용으로 구성된 변수 a의 원소를 하나씩 꺼내어서 Lambda 함수의 입력으로 넣어 준다.
8. 리스트(List)와 튜플(Tuple)
Python의 가장 특징적인 Data Type은 List와 Tuple이라 할 수 있다.
LiST
List (리스트형)
# List의 생성
mylist = [ 0, 1, 2, 3, 4, 5]
# 내포된(Nested) List 생성
mylist2 = [ [0, 1, 2], [3,4,5] ]
리스트 추가
mylist + [ 6 ,7, 8] # 결과 : [0, 1, 2, 3, 4, 5, 6, 7, 8]
mylist2 + [6,7,8] # 결과 : [[0, 1, 2], [3, 4, 5], 6, 7, 8]
mylist2 + [ [6,7,8] ] # 결과 : [ [0, 1, 2], [3, 4, 5], [6, 7, 8] ]
mylist.append(9) # 결과 : [0, 1, 2, 3, 4, 5, 9 ]
리스트의 곱
mylist = [0,1,2]
mylist *3 # 결과 : [0, 1, 2, 0, 1, 2, 0, 1, 2 ]
[ 리스트의 인덱싱/ 슬라이싱 ]
List에서 일부 원소를 지명하는 것을 인덱싱이라고 하며, 일부만을 선택하여 불러오는 것을 슬라이싱이라고 하낟.
mylist = range(10) # 결과 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
mylist [5] # 결과 : 4
mylist[2:5] # 결과 : [ 2, 3, 4 ]
mylist[5:] # 결과 : [5, 6, 7, 8, 9]
mylist[:5] # 결과 : [0, 1, 2, 3, 4]
mylist[-1] # 결과 : 9
mylist[0:6:2] # 결과 : [0, 2, 4]
mylist[::2} # 결과 : [0, 2, 4, 6, 8]
mylist[::-1] # 결과 : [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]]
[ 기타 리스트 추가/삭제 등 ]
insert / extend / copy / remove / pop / clear / reverse, sort
튜플 (tuple)
- 튜플은 리스트와 거의 유사하나, 한가지 차이가 있다.
- 리스트는 변경 가능한 연속형 변수 (mutable)인 반면, tuple은 변경 불가능 (immutable) 변수 이다.
- 상수들의 연속형 변수라고 생각하면 된다. 변경이 불가능하므로 속도 측면에서 빠르다.
직접 테스트 해 보기
최초 실행 후 약 10초간 리드타임이 있습니다. 10초만 기다려 주세요.
import numpy as np
import pandas as pd
a = 10
# 1. 변수 선언
a,b = 1,1
# 3. 조건문
if n==1 :
print(“1”)
elif n==2 :
print(“2”)
else:
print( n)
# 4.1 반복문-1
for i in range(10):
print(i)
# 4.2 반복문-2
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # range(10)
for i in a:
print(i)
# 4.3 반복문-3
a = [0, 2, 4, 6, 8 ] # range(0,10,2)와 동일
for i in a:
print(i)
# 5.1 List Comprehension
[ i for i in range(10) ]
list_a = [ i for i in range(10) ]
[ i for i in range(10) if i%2==0 ] # 짝수만 출력
a = [ i if i%2==0 else ‘odd’ for i in range(10) ]
print(a)
# 6. 함수
def func( n ) :
print( n )
return n+1
# 7. 익명함수
# CASE 1: func 함수선언
def func(x):
return x+1
# CASE 2: lambda 함수 func
func = lambda x : x+1
a = range(10)
map( lambda x: x**2, a )
# 8. List/Tuple
# List의 생성
mylist = [ 0, 1, 2, 3, 4, 5]
# 내포된(Nested) List 생성
mylist2 = [ [0, 1, 2], [3,4,5] ]
mylist + [ 6 ,7, 8] # 결과 : [0, 1, 2, 3, 4, 5, 6, 7, 8]
mylist2 + [6,7,8] # 결과 : [[0, 1, 2], [3, 4, 5], 6, 7, 8]
mylist2 + [ [6,7,8] ] # 결과 : [ [0, 1, 2], [3, 4, 5], [6, 7, 8] ]
mylist.append(9) # 결과 : [0, 1, 2, 3, 4, 5, 9 ]
mylist = [0,1,2]
mylist *3 # 결과 : [0, 1, 2, 0, 1, 2, 0, 1, 2 ]
mylist = range(10) # 결과 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
mylist [5] # 결과 : 4
mylist[2:5] # 결과 : [ 2, 3, 4 ]
mylist[5:] # 결과 : [5, 6, 7, 8, 9]
mylist[:5] # 결과 : [0, 1, 2, 3, 4]
mylist[-1] # 결과 : 9
mylist[0:6:2] # 결과 : [0, 2, 4]
mylist[::2} # 결과 : [0, 2, 4, 6, 8]
mylist[::-1] # 결과 : [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]]
<-
) to create the variable a
.