상세 컨텐츠

본문 제목

[개발] 파이썬 문법 5분만에 읽히기 - 파이썬 기본 문법 요약/정리 8 가지

개발 이야기

by 리치윈드 - windFlex 2020. 5. 9. 07:43

본문

반응형

 

파이선 기본 문법 요약 정리 - 8종 기본 사항 

파이썬 기본 문법 

 

파이썬 기본 문법 5분 정리

 

다른 개발 언어 (특히 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]]
Use the assignment operator (<-) to create the variable a.

 

 

 

 

 

반응형

관련글 더보기

댓글 영역