사람이 컴퓨터에게 일을 시키려면 컴퓨터가 알아들을 수 있는 언어로 일을 시켜야한다. 바로 그 언어가 프로그래밍 언어이다. 수많은 프로그래밍 언어 중 하나인 파이썬은 본래 교육용으로 만들어진 언어로, 코드가 간결하고 알아보기 쉽다. 그러한 장점으로 인해, 파이썬은 현재 실무와 교육 양쪽으로 엄청난 인기를 끌고 있고 인공지능 분야에서도 파이썬을 적극적으로 사용하고 있다.
✅ 핵심 요약
함수란 어떤 입력값 x가 함수 f 로 들어가 출력값 f(x) 가 나오는 것이다. 프로그래밍에서 함수는 특정한 작업을 수행하며, 입력값에 대한 출력값을 얻는 것이다.
수학에서 함수를 y=f(x) 로 표시하고 f 와 x 가 각각 함수의 이름과 입력값을 의미하듯이, 프로그래밍 분야에서는 입력값을 주로 인자(argument) 라고 부른다.
프로그래밍을 하다보면 복잡한 기능을 반복적으로 구현하기 위해 코드가 굉장히 길고 가독성이 떨어질 수 있다. 기능을 반복적으로 적용해야할 때 함수를 정의해 필요한 곳에 바로 사용하면 편리할 뿐만아니라 코드의 가독성도 확보할 수 있다.
새로운 함수를 정의 할때는 define 에서 나온 명령어 def
를 사용하고 다음과 같은 구조로 이루어져있다.
def 함수이름(인자):
실행코드
def
를 사용할때 함수를 정의하는 기능 부분에 띄어쓰기 4회가 필수적으로 들어가야한다.
또한 인자를 한 개 뿐만아니라 여러 개를 한꺼번에 받게 설정할 수 도 있다. 그리고 다음과 같은 형식으로 입력값이 여러 개 일 때도 각 입력값마다 기본값을 지정해 줄 수 있다.
def 함수이름(인자1=기본값1,인자2=기본값2):
실행코드
단, 여기서 기본값이 있는 인자들이 기본값이 없는 필수 인자들의 뒤에 와야한다.
간단한 더하기 기능의 함수를 만들어보자.
def sum(a,b): # 더하기 함수 생성
return a+b
v = sum(1,3)
print(v)
출력
5
이와 같은 방법으로 새로운 함수를 정의할 수 있다. 위의 경우에는 인자가 2개만 있으므로 sum(1,2,3) 이나 sum(1,2,3,4,5) 와 같이 2개의 값이 아닌 값들의 더하기는 수행을 하지 못한다. 이런 상황을 대비한 파이썬의 기능이 존재한다.
def test(*val): # 인자 값이 얼마나 들어올지 모를때 이렇게 사용
for i in val:
print(i)
test(1,2,3,4)
출력
1
2
3
4
*val을 사용하면 인자값이 몇개가 오던 값을 다 받을 수 있다. 다음과 같은 코드로 인자에 여러 값이 들어갔을때 val이 튜플(tuple) 형태의 자료형으로 받아진다는 것을 알 수 있다.
def val_type(*val):
print(val)
print(type(val))
val_type(1,2,3)
출력
(1, 2, 3)
<class 'tuple'>
신기한것은 아래의 코드와 같이 인자에 한개의 값만 들어가더라도 val 값은 튜플 형태로 들어가는 것도 알 수 있었다.
def val_type(*val):
print(val)
print(type(val))
val_type(1)
출력
(1,)
<class 'tuple'>
변수란 "여러 값으로 변할 수 있는 수" 라고 정의되어있다. 프로그래밍에서의 변수는 어떠한 값을 대표하는 값이다. 변수를 정의하기 위해서는 변수명 = 변수값
의 형태로 변수를 선언하고 그 이후에는 변수명으로 해당 변수값을 불러올 수 있다.
hi = '안녕하세요' # hi 라는 변수에 '안녕하세요' 라는 문자열을 저장함
print(hi) # hi 를 출력
출력
안녕하세요 # hi라는 변수에 저장된 변수값을 출력
변수의 스코프(scope)란, 특정 위치레서 어떤 변수에 접근할 수 있는지, 어떤 곳에서 정의된 변수가 어디까지 유효한지 정의된 범위를 말한다. 아래의 코드와 그림을 보면 쉽게 이해할 수 있다.
전역 변수 예시
x = 10 # 전역 변수
def foo():
print(x) # 전역 변수 출력
foo()
print(x)
출력
10
10
출처 : 파이썬 코딩 도장
지역 변수 예시
def foo():
x = 10 # foo의 지역 변수
print(x) # foo의 지역 변수 출력
foo()
print(x) # 에러. foo의 지역 변수는 출력 불가
출력
10
Traceback (most recent call last):
File "C:\project\local_variable.py", line 6, in <module>
print(x)
NameError: name 'x' is not defined
제어문은 코딩을 할때 어떤 조건에만 해당 기능을 수행하거나 반복하는 것을 할 때 푤요하다. 즉, 특정 조건에 따라 동작하는 문구이다.
if 구문에서는 if, else 를 통해 조건식이 참일 때와 거짓일 때를 구분해 각각의 코드를 실행한다.
다음과 같은 형식의 코드로 if 와 else를 이용한 조건문을 사용할 수 있다.
if 조건식:
코드1
else:
코드2
또한 세가지 이상의 조건을 제어하고 싶을때 if, elif, else 를 통해 조건문을 생성할 수 있다.
if 조건식1:
실행코드1
elif 조건식2:
실행코드2
else:
실행코드3
True 와 False
파이썬에서는 참은 Ture, 거짓은 False를 사용하지만 다음 값들도 True 또는 False 로 취급되므로 조건식을 작성할때 주의해야한다.
- True 로 취급 : 0이 아닌 숫자, 내용이 있는 (문자열, 리스트, 튜플, 딕셔너리, 세트)
- False 로 취급 : 0, None, 비어있는 (문자열, 리스트, 튜플, 딕셔너리, 세트)
반복문의 종류에는 for문을 이용한 반복문과 while문을 이용한 반복문이 있다.
for 반복문 은 일반적으로 반복할 횟수를 지정하여 반복할 때 사용한다. 간단한 예로, range 함수에 반복할 횟수를 지정하고 앞에 in과 변수를 지정한다.
for 변수 in range(반복할 횟수):
반복할 코드
또한 range 대신에 리스트, 튜플, 문자열 등의 시퀀스 객체로 반복할 수 있다. 간단한 예로, range 대신에 리스트를 넣으면 리스트의 요소를 하나씩 불러오며 반복한다.
a = [1, 2, 3, 4]
for i in a:
print(i)
출력
1
2
3
4
참고 : 여기서 reversed 함수를 사용해서 시퀀스객체의 순서를 뒤집어서 반복할 수도 있다.
while 반복문 은 일반적으로 반복할 횟수가 정해지지 않았을때 사용한다. while 반복문은 조건식으로만 동작하며 반복할 코드 안에 조건식에 영향으르 주는 변화식이 들어간다. 간단한 예로 while 반복문으로 'hello' 를 100번 출력하고 싶다면
i = 0 # 초기식
while i < 100: # 조건식
print('hello') # 반복할 코드
i += 1 # 변화식
위와 같은 구조의 코드로 이루어져있다. while 반복문에서 조건식을 변화시키는 변화식이 없다면 무한루프에 빠질 수 있으니 반복문이 중단되는 조건을 잘 설정해주어야한다.
위의 내용을 응용하여 재귀함수(recursive fuction) 를 만들 수 있다.
재쉬함수 란?
함수 내에서 그 함수를 스스로 사용하는 함수의 종류
재귀함수가 유용하게 쓰이는 간단한 예로 피보나치 수열의 구현이 있다.
피보나치 수열 이란?
앞의 두 숫자를 더한 수가 다음 수가 되는 무한 수열이며, 황금비율로도 잘 알려져 있다.
1, 1, 2, 3, 5, 8, 13, 21, ...
앞의 제어문들을 통해 다음과 같이 피보나치 수열을 구현할 수 있다.
def fibonacci(n):
if n <= 2:
number = 1
else:
number = fibonacci(n-1) + fibonacci(n-2)
return number
파이썬에는 숫자, 문자열 외에도 다양한 종류의 자료형이 존재한다. 값의 자료형이 무엇인지는 type()
함수를 사용해 확인 가능하다.
수학에서 정수라고 불리는 것이다. 즉, 0, 1, 2, -3 과 같이 소수점이 없는 숫자라고 생각하면 편리하다.
반대로 파이썬에서 실수는 소수점을 가지는 숫자를 의미한다. 같은 1과 1.0 이라도 파이썬에서는 이 둘을 각각 정수, 실수로 받아들인다.
print(type(1))
print(type(1.0))
출력
<class 'int'>
<class 'float'>
None 은 말 그대로 아무 값을 가지고 있지 않은 상태를 말한다. 모든 객체에 대해 정의될 수록 좋다고 여기는 파이썬의 설계 사상과 관련해 None type 이 필요로 할 때 사용한다.
불리언 자료형은 참(True) 와 거짓(False)로 이루어져있다.
print(type(True))
print(type(False))
출력
<class 'bool'>
<class 'bool'>
불리언 값들은 주로 if 비교문에서 조건문의 참/거짓 여부를 나타낼때 사용한다. 또한 True
와 False
는 앞에 not
을 붙여 참과 거짓을 뒤집을 수도 있다.
str
문자열은 따옴표나 쌍따옴표로 감싸서 사용할 수 있다. 또한 [n:m]
를 통해 n번째 부터 m 번 직전까지 뽑아오는등의 슬라이싱과 순서를 매겨 이용하는 인덱싱도 가능하다.
print(type('Hello'))
출력
<class 'str'>
참고 : [::-1]
을 사용해 문자열을 거꾸로 출력하는 것도 가능하다.
리스트와 튜플은 하나의 변수에 여러 개의 값을 순서대로 나열하여 할당한 것이다.
리스트는 대괄호를 사용해서 만들 수 있고 튜플은 소괄호를 사용해 만들 수 있다.
print(type([1, 2, 3]))
print(type((1, 2, 3)))
출력
<class 'list'>
<class 'tuple'>
튜플과 리스트는 순서가 있는 값들의 모음이라서 문자열과 같은 방법으로 인덱싱 및 슬라이싱이 가능하다.
리스트는 요소 추가, 변경, 삭제 등이 가능하지만 튜플은 값을 변경할 수 없다.
딕셔너리는 말 그대로 사전이라는 기능과 비슷한 역할을 한다. 키와 값이 1대1로 대응해서 변수에 저장된다. 즉, 키 값을 이용해 해당 값을 찾을 수 있는 자료형이다.
딕셔너리는 중괄호로 만들 수 있고 {키:값} 으로 구성되어있다. 딕셔너리[키] 를 이용해 해당 값에 접근 할 수 있다.
zzang = {'name':'짱구', 'age':5, 'gender' : 'male'}
print(type(zzang))
출력
<class 'dict'>
items()
를 이용해 키와 값 둘 다 가져올 수 있고, keys()
를 이용해 키만 가져올 수 도 있고, values()
를 이용해 값만 가져올 수도 있다.
추가적인 파이썬에 대한 전체적인 내용은 Python Master 풀잎스쿨 정리에서 다루겠다.