Development language/Python

Python-1. 함수란 무엇인가? / Python의 대표적인 내장함수

DOT-ICD 2021. 10. 6. 18:06
728x90
변수와 기본적인 용어에 관한 내용들은 아래의 포스트에서 확인해주시기 바랍니다!
더보기

함수

 

수학에서의 함수 : 정의역의 원소마다 공역의 원소가 오직 하나씩 대응되는 관계

 

많은 사람들이 착각하는 내용중 하나로, 수학에서의 함수는 위와 같이 정의된다. 우리가 흔히 함수를 생각하면 떠올리는 수많은 수식들은 함수를 표현하는 방법 중 하나에 불과하다. 포인트는 '대응관계'에 있다. 수학에선 인풋과 아웃풋의 관계를 수식으로써 설명한다.

$f(x)=x^2+x+1$

위의 식은 간단한 이차함수이다. 위의 식은 단지 정의역 $x$와 공역$y$의 관계를 식의 형태로 표현한 것일 뿐이다. 그리고 그 식의 형태가 이차방정식의 형태이기 때문에 우리는 이를 이차함수 라고 부르는 것이다.

프로그래밍에서의 함수 : 인풋에 대한 아웃풋을 출력하는 일련의 과정을 함수라 한다.

 

이때 인풋을 매개변수, 아웃풋을 반환값 이라 한다.

(인풋을 매개변수라고 불리는 이유는 어떤 데이터를 우리가 직접 명시해서 작성하는 것이 아니라, 변수에 담아 그 변수의 이름을 통해 데이터를 전달하고 사용하기 때문이다.)

 

프로그래밍에서의 함수는 수학에서의 그것과 매우 비슷하다! 사실 비슷한 성질을 갖기 때문에 함수라는 이름이 붙었다.

프로그램에서 함수는 어떤 형태로든 입력을 받고 그 입력받은 값에 대한 결과물을 어떠한 형태로든 반환한다.

쉽게 말해 수학의 함수와의 차이점은 수식이 아닌 코드로 함수가 표현된다는 것이다. 

 

프로그래밍에서의 함수는 임의로 작성한 긴 코드들의 연결로 이루어진 것일수도 있고, 미리 잘 만들어진 명령어의 형태를 가진 것도 있다. 즉, 우리는 나만의 함수를 정의하고 사용할 수 있다. 그 방법에 대해서는 뒤의 포스트에서 알아보자.

 

또한, 결과물은 출력값이 아닌 반환값으로 표현한다! 영어표현을 바탕으로하자면, 출력값은 print되어 모니터에서 볼 수 있는 값이고, 반환값은 return되는 값이다. 이 차이가 무엇인지는 프로그래밍을 경험해보지 못했다면 당장은 이해가 되지 않을 수 있으나 곧 그 차이점을 이해할 수 있을 것이다.

 


그렇다면 Python에 존재하는 대표적인 함수들은 무엇이 있을까?


print()

프로그래밍을 배우면 가장 처음 배우는 함수이다. 

입력된 값을 화면에 출력하는 함수이다.

#예시1
print("hello world")

#출력결과1
hello world

#예시2
a = 100
print(a)

#출력결과2
100

예시2의 결과를 통해 알 수 있듯 변수를 입력받으면 해당 변수에 저장되어 있는 값을 출력한다.

 

help()

입력값으로 함수의 이름을 넣어주면 입력된 이름의 함수의 사용 형태와 반환하는 값의 형태를 출력한다.

#예시

help(print)

#출력결과
print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

 

id()

입력받은 객체의 데이터가 저장되어 있는 곳의 메모리 주소를 반환한다.

#예시
a = 100
print(id(a))

#출력
140730780038032
*해당 출력의 결과물은 프로그램을 실행할 때마다 변경되는 유동적인 값이다! 
*일반적으로 컴퓨터는 데이터를 고정된 메모리의 주소에 저장하지 않는다!

위의 예시에서 볼 수 있듯 id함수의 반환값을 우리가 확인하기 위해서는 print함수를 사용하여 출력해주어야 한다.

id함수는 객체의 메모리주소를 반환할뿐 출력하지 않는다!

 

*파이썬의 경우 일정범위의 정수의 경우 데이터를 미리 몇몇 위치의 메모리에 저장해놓는다. 입력값이 해당 범위의 정수에 해당될 경우 해당 정수의 메모리 위치를 가져와 객체를 생성한다. 즉 같은 정수값이라면 같은 메모리값을 가질 수도 있다. (한 메모리 공간에 두개 이상의 변수가 참조하는 형태)

 

type()

입력받은 객체의 자료형을 반환하는 함수이다.

#예시
a = 100
print(type(a))

#결과
<class 'int'>

type함수 역시 출력이 아닌 반환을 하는 함수이기 때문에, print함수를 사용하여 결과값을 출력해주어야 한다. 

Typecast

Typecast함수란, 객체의 자료형을 변경해주는 함수들을 통칭하는 말이다.

여러 종류의 Typecast함수가 존재하는데 아래의 예시를 보자.

#예시
a = 3.16
print(a)
print(type(a))

a = int(a)
print(a)
print(type(a))

#처음 파이썬을 접한다면 코드가 여러줄이라고 쫄지말고 차근차근 해석해보자!
#a객체를 선언하면서 3.16이라는 값을 대입하였다.
#a객체의 데이터를 출력하고, a객체의 자료형을 출력한다.

#이후 a객체에 a객체의 데이터를 int라는 typecast함수를 사용하여 정수형으로 객체형을 변환한 뒤 대입한다.
#a객체에 담긴 데이터를 출력하고, a객체의 자료형을 출력한다.


#결과
3.16
<class 'float'>
3
<class 'int'>

위의 예시는 int() 즉 정수형으로 객체 자료형을 변환하는 typecast함수를 사용한 것이다.

 

a객체가 처음 선언될 때에는 실수형인 3.16이라는 데이터를 대입하였으므로, a객체의 자료형은 실수형이다.

따라서 type(a)는 <class 'float'>라는 결과를 반환하고, 이 반환값을 print함수가 출력한 것이다.

이후 a객체의 데이터의 형태를 정수형으로 변환한 뒤 다시 대입한다. 따라서, a객체의 자료형은 정수형이다.

따라서 type(a)는 <class 'int'>라는 결과를 반환하고, 이 반환값을 print함수가 출력한 것이다.

 

*이때, int()함수는 실수형을 정수형으로 변환할 때 버림 연산을 수행한다. 

 

typecast함수는 여러종류가 있다.

int() : 정수형 변환

float() : 실수형 변환

str() : 문자열형 변환

 

hex() : 16진수 변환

oct() : 8진수 변환

bin() : 2진수 변환

*2,8,16진수는 모두 정수형의 한 형태이다.

*10진수로 다시 변환할 때는 자동으로 변환된다.

*문자열 형태의 n진수는 정수형으로 형변환 시 int()를 사용한다.

a = int('0o14',8)


#0o14는 따옴표가 쳐져있기 때문에 문자열로 인식된다.
#문자열->정수형의 형변환을 거치기 위해 int()함수를 사용한다.
#이때, 입력된 문자열이 8진수라는 것을 int함수에 알려주기 위해 입력값으로 8을 함께 입력한다.
#문자열 형태의 2진수와 16진수 역시 같은 방식을 사용해 형변환을 할 수 있다.

 

dict() : 딕셔너리 변환

*딕셔너리를 다룰 때 자세히 다루도록 하자!

input()

입력함수이다. 키보드를 통해 입력되는 값을 반환한다. 이때 반환되는 데이터의 자료형은 항상 문자열이다!

#예시1
a = input()
print(a)

#입력1
12121212
#결과1
12121212




#예시2
b = int(input())
print(b)

#입력2
23232323
#결과2
23232323

위의 두 예시는 차이가 존재한다. a객체에 담긴 데이터는 문자열이다. input함수의 반환값이 문자열 형태로 a에 대입되었기 때문이다. 그러나 b객체에 담긴 데이터는 정수형이다. input함수는 반환값을 문자열 형태로 반환했지만, int함수에 의해 문자열->정수형으로 형변환되었기 때문이다. 

 

*문자열로 저장된 숫자들은 우리가 일반적으로 사용하는 여러가지 사칙연산과 수학계산들에 사용될 수 없다. 정수형으로 저장된 숫자들만이 계산가능하다.

 

 

이외에도 많은 내장함수들이 있지만, 앞으로 사용하면서 필요할 때 알아보도록 하자!

728x90