본문 바로가기
  • Survival Plan
개발 이야기

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

by IT/머신러닝 엔지니어의 독서/경제/육아 공부 리치윈드 - windFlex 2020. 5. 9.

파이선 기본 문법 요약 정리 8가지

 

다른 개발 언어 (특히 C언어 등)을 알고 있다는 가정하에,

다른 언어와 어떤 차이점이 있는지... Python 문법의 특징을 살펴 본다.

 

 

1) 변수 정의 및 변수 할당

 

○ 변수는 별도 선언 없이 바로 사용할 수 있다.

(그러나, 가급적 명시/초기화 하는게 좋다.)

또한, 한번에 여러개의 변수에 값을 Assign할 때는, 아래와 같이 한다.

   (※ 사실, 이게 내부적으로는 tuple을 사용하여 Assign 하는 것이다. )

 

a,b = 1,1

 

※ Python 에서는 int, float, string 등의 기본 변수 타입 이외에,

    list, tuple, dictionary 등의 변수 타입이 있습니다.

⇒ 요건 나중에 건론 합시다.!!

 

2) 들여쓰기 (Indent)

 

ㅇ Python의 범위(Scope)에 대한 블럭 지정을, 들여쓰기 (Indent)를 사용합니다. 즉, 한 블럭은 같은 들여쓰기를 가지고 있어야 합니다.

이 때, 일반적으로 1단계 들여쓰기에 4공백을 사용합니다.

그러나, 꼭 지켜야하는 것은 아니다.

 

 ( C / JAVA는 블럭지정을 중괄호 사용 → Python은 들여쓰기 사용)

 

PYthon 전용 IDE를 사용하면, 알아서 들여쓰기 해 줌.

(Pycharm, Anaconda, 이클립스 등)

 

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문은, 아래와 같이 사용 (괄호 없음)

    print n

ㅇpython 3.x 는,  print문에 괄호를 사용함

    print(n)

 

 

4) 반복문

 

for 문은 다른 언어 (C언어 등)과 거의 유사하나, 반복 범위 설정에서 차이가 있습니다.

 

반복하는 범위는, List형의 배열 만큼 반복합니다.

반복 횟수 = List 배열의 원소 갯수

매 반복 시 주어지는 숫자 = List 배열의 해당 원소

for문의 반복은, list 배열에 담겨 있는 원소(element)를 하나씩 꺼내서 사용는 방식으로 이해하면 됩니다.

 

아래 예제를 참조 바랍니다.

 

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는 포함되지 않습니다. (“미만”으로 이해)

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)

C/Java에서는 for(i=0; i< n ; i ++) 등의 표현이며,   VB 등에서는 for i=0 to n  표현

 

따라서, python에서 반복 순서 또는, 반복 간격 등을 조절하기 위해서는, 변수의 list를 변경하면 됩니다.

a = [0, 2, 4, 6, 8 ] # range(0,10,2) for i in a: print(i)

 

이런 이유로, python에서는 list, tuple 등의 Array 계열의 변수형이 매우 중요 합니다.

 

특히, 데이터 분석의 경우, Data가 Array, list, tuple 등에 저장되기 때문에,

이들에 대한 변수를 다루는 것은 데이터 분석 능력과 직결 된다고 할 수 있습니다.

 

 


 

 

5) 파이썬 스타일 - List Comprehension

 

ㅇ 파이썬은 축약하는 문법이 많습니다.

ㅇ 위에서 사용한 range(10)을 사용한 for문은 아래와 같이 한줄(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 함수를 사용하면, list or 반복적으로 수행하는 기능을

별도 함수선언 없이 간략하게 수행할 수 있다.

 

아래 2개 함수는, 동일한 함수의 2가지 정의라고 할 수 있겠다.

 

def func(x):

    return x+1

 

func = lambda x : x+1

(※ lambda 입력값 : 반환값)

 

따라서, 단순한 함수 정의에 약식으로 사용되며,

다수의 데이터에 반복적인 연산을 수행할 때 많이 사용된다. 

 

a = range(10)

map( lambda x: x**2, a )

 

반환값:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

※ map 함수는, 연속형 변수의 element 를 하나씩 꺼내서, 함수의 Input으로 하나씩 넣어준다.

 

 

 

 


 

8. 리스트 / 튜플

 

ㅇ List (리스트형)

 

[ 리스트의 생성 ]

mylist = [ 0, 1, 2, 3, 4, 5]

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, 6, 7, 8, 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]]

 

 

[ 기타 리스트 추가/삭제 등 ]

insert / extend / copy / remove / pop / clear

reverse, sort


ㅇ 튜플 (tuple)

 

 - 튜플은 리스트와 거의 유사하나, 한가지 차이가 있다.

    리스트는 변경가능한 연속형 변수 (mutable)인 반면, tuple은 변경 불가능 (immutable) 변수 이다.

 - 상수들의 연속형 변수라고 생각하면 된다.

 - 변경이 불가능하므로 속도 측면에서 빠르다.

 

 - 사견으로는,

 

   포인터가 없으므로, multiple data 를 전달하는 과정에서 꼭 필요하게 되지 않았을까 생각해 본다.

 

 

댓글0