Basic Python - 2. 함수

7620 단어 pythonpython


reference : 윤성우의 열혈 파이썬 기초편

chapter 2. 간단한 함수 만들기

1. 함수란?

def greet():
	print("반갑습니다.")
	print("파이썬의 세계로 오신 것을 환영합니다.")

함수를 호출하는 문장

greet()

위와같이 실행하면 print("반갑습니다."), print("파이썬의 세계로 오신 것을 환영합니다.")를 일일이 쳐줄 필요가 없어진다.

여기서 잠시, 함수의 정의에 대해 알아보자.

파이썬 프로그램은 단순히 동작 하나만 실행되는 게 아니라 여러 동작이 연결된다. 이렇게 동작해야 할 목적대로 묶은 명령을 함수 (function)이라고 한다.

보통 수학에서는 f(x)로 나타내는데, 위키 백과에서의 정의는 다음과 같이 나타낸다.

수학에서 함수(函數, 영어: function) 또는 사상(寫像, 영어: map, mapping)은 어떤 집합의 각 원소를 다른 집합의 유일한 원소에 대응시키는 이항 관계다. 즉, 한 변수의 값에 따라 정해지는 다른 변수의 값을 먼저 주어지는 값에 상대하여 일컫는 말이다. 예를 들면, 집합 X의 원소 x 한 개에 집합 Y의 원소 y 한 개가 대응하는 관계를 의미한다. 거꾸로 y 한 개가 x 여러 개에 대응하는 관계도 함수라고 한다.

reference : https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98

더 쉽게 표현한 그림이 있다.

동작원리는 다음과 같다.

def : 함수를 만든다는 선언
greet() : 함수의 이름
: 다음에는 함수에 속하는 문장들

주의점 : 파이썬은 들여쓰기 상태로 함수에 속하는 문장인지 아닌지를 판단한다.
반드시 들여쓰기를 해주어야 한다.

연습문제

(1). 다음은 3개의 문장을 담고 있는 함수를 정의하되 이름은 practice라 하자. 그리고 정의했다면 그 함수를 2번 이상 호출해보자.

def practice():

	print("1 + 2 + 3 + 4 + 5 =", 1 + 2 + 3 + 4 + 5 )
	print("Simple is the best!")
	print("행복한 파이썬~")

practice()
practice()

호출하는 practice()는 들여쓰기가 필요없다. 호출하는 수만큼 즉각적으로 출력이 된다.

2. 인자 있는 함수

greet2() 괄호안에 들어가는 것은 가리켜 매개변수(parameter)라고 한다.

def greet2(name):
	print("반갑습니다.", name)
	print(name, "님은 파이썬의 세계로 오셨습니다.")

greet2("John")
greet2("Hong")

위의 과정은 함수 호출로 위에 함수정의 greet2(name)에 이름을 전달 및 저장을 하게 된다.

def adder(num1, num2):
	print("덧셈 결과:", num1 + num2)

adder(10,5)

위의 예에서 보이듯이 함수의 정의에 있어서 매개변수의 수는 둘 이상이 될 수 있다. 매개 변수 사이에 콤마를 찍어서 매개 변수들을 구분해 주면 된다. 물론 매개변수가 둘이면 호출할 때 전달하는 값도 둘이어야 한다. 그러면 첫 번째로 전달된 값이 첫 번째 매개변수에 저장되고 두 번째로 전달된 값이 두 번째 매개 변수에 저장된다.

그리고 조금 뒤늦은 이야기지만, 우리가 작성해왔던 다음과 같은 형태의 문장도 사실은 print라는 이름의 함수를 호출하는 것이었다. 내장된 함수라 보면 되고 이는 이전에 공부하였던 자바스크립트안에서도 print라고 하는 함수가 있다. (사실 모든 언어들이 이러한 내장된 함수들이 무수히 많다. 구글링은 필수!)

print("안녕")
파이썬이 미리 만들어서 제공하는 함수임.

연습문제

(1). 매개 변수를 통해서 하나의 문자열을 전달받아서 그 전달받은 문자열을 총 3회 출력하는 함수를 만들어 보자.

def 안녕(문자열):

	print(문자열)
	print(문자열)
	print(문자열)

안녕("너!")

(2). 매개변수를 통해서 하나의 정수를 전달받아서 전달 받아서 전달 받은 수와 부호가 반대인 정수를 출력하는 함수를 만들어보자.
(예를 들어서 함수에 3이 전달되면 -3이 출력되고 -3이 전달되면 3이 출력되어야 한다.)

def 정수변환(x):
	print( x * -1 )

정수변환(3)
정수변환(-3)

정수변환(100)
정수변환(-100)

(3). 매개 변수를 통해서 2개의 정수를 전달 받아서 이 2의 평균값을 계산해서 출력하는 함수를 만들어 보자.
(예를 들어서 이 함수에 3과 4가 전달되면 이 2수의 평균값인 3.5가 출력되어야 한다.)

def 평균값(x, y):
	print( (x + y) / 2 )

평균값(3, 4)

공식 해답과의 차이점은 한글로 함수를 지정하였다.

3. 함수 만들기

def adder2(num1, num2):
	ar = num1 + num2
	return ar

result = adder2(5, 3)
print(result)

일단 여기서 함수의 정의는

 def adder2(num1, num2):
	# ar = num1 + num2
	# return ar

위 함수 내에서는 다음과 같이 변수 ar을 선언하고 num1과 num2의 합을 이 변수에 저장하였다.

ar = num1 + num2

그리고 이어서 return으로 시작하는 다음 문장을 실행했는데,

return ar

이는 변수 ar에 저장된 값을. 함수를 호출한 영역으로 되돌려주라는 뜻이다.
따라서 다음과 같이 함수를 호출하면,
result = adder2(5,3)
먼저 adder2 함수가 호출되고, 그 함수 안에서 되돌려 주는 값 8이 adder2(5,3)을 대신하여 다음의 상태가 된다.
result = 8
이것이 "함수를 호출한 영역으로 값을 되돌려준 결과이다"

함수가 되돌려 주는 값을 가리켜 반환 값이라고 한다. 즉, return은 함수를 호출한 영역으로 값을 반환할때 사용하는 명령어이다.

def adder3(num1, num2):
	return num1+num2

print(adder3(5, 3))

위의 함수에서 보이듯이 return으로 시작하는 문장을 다음과 같이 만들수도 있다.
return num1 + num2

그럼 덧셈이 먼저 진행되어 위 문장은 다음의 상태가 된다.
(num1과 num2에 각각 5와 3이 저장된 상태이다.)

return 8

따라서 덧셈의 결과로 얻어진 값 8이 반환된다. 그리고 위 예에서는 다음과 같이 adder3 함수를 호출했는데,

print(adder3(5, 3))

모양새가 print 함수에 adder3(5, 3)이 반환하는 값이다. 즉 위의 문장을 실행하면, 먼저 adder3이 호출되고 그 결과로 8이 반환되어 다음과 같이 print 함수를 호출하게 된다.

print(adder3(5, 3)) > print(8)

연습문제

(1). 하나의 정수를 전달받아서 전달 받은 수와 부호가 반대인 정수를 반환하는 함수를 정의.
물론 정의한 함수를 호출해서 정상적으로 동작하는지 확인까지 해야 한다.

def hong(d):
	return d * -1

print(hong(12))

(2). 2개의 정수를 전달받아서 그 2수의 평균값을 계산해서 반환하는 함수 만들기

def hong(d):
	return d * -1

print(hong(12))

4,5,6. 기타 기본사항들 ( 함수저장 및 불러오기, 주석기능)

anaconda prompt에서는 python을 실행하면 곧바로 사용할수 있지만, 저장 기능이 없다. 보통 windows shell을 쓰면 저장을 할수 있는데,
지금과 같이 편의를 위해서 sublime text에서 저장을 하고 향후 깃허브에 올리기 용이하도록 사용한다.
shell에서도 저장은 .py 확장자로 저장을 하며 필요할때마다 불러 쓸수 있다. sublime text 같은 IDE 사용이 훨씬 편리하다.

주석기능은 위에서도 사용했지만 #을 붙이면 된다. ctrl + / 를 누르면 자동생성되며 sublime text에서 다른 언어들도 이렇게 주석 처리를한다.

HTML과 css에서의 주석과 비교를 하면 다음과 같다.

HTML (주석 처리 : <!-- -->), css (주석 처리 :/* */),
javascript (단문 주석 처리 : //, 장문 주석 처리: /* */)

7. 파이썬에서의 이름 달기 규칙 및 대소문자 구문

파이썬에서 변수나 함수의 이름을 짓는 데 있어서 다음 3가지의 제약이 존재한다.

(1).파이썬은 대소문자 구분한다. (자바스크립트의 string(문자열)에서 대소문자 구분 한다.)

num = 0
Num = 10

print (num, Num)

(2). 숫자로 시작하면 안 된다. (자바스크립트에서 역시 똑같다.)

2num = 0
에러 발생

(3). 키워드는 이름으로 쓸 수 없다. (자바스크립트에서도 역시 키워드는 예약어로서, 변수명으로 사용 할 수 없다.)

그리고 앞서 우리가 함수를 만들때 사용했던 def, 값을 반환할 때 사용했던 return, 이렇게 용도가 정해져 있는 단어들을 가리켜 "키워드(keyword)"라 하는데,
이러한 키워드를 이용해서 변수나 함수의 이름을 짓는 것도 안된다.

return = 2

에러발생

지켜야할 관례

(1). 변수와 함수의 이름은 소문자로 시작한다.
(2). 둘 이상의 단어를 연결하는 경우 언더바를 이용해서 연결한다. (스네이크 케이스)

좋은 예 my_name
좋지 않은 예 myname, MyName, My_Name

오류가 발생하지는 않지만, 이름의 혼동을 피할수 있게 해준다.

8. main 함수가 있는 방식으로 예제를 작성

adder1.py

def adder(num1, num2):    # 함수 adder의 정의
	return num1 + num2

print(adder(5, 3))

위에 정의된 adder 함수의 호출과 print 함수의 호출




**그러나 보통은 다음과 같은 방식으로의 작성이 더 권장되기도 한다.
**

> adder2.py

def adder(num1, num2): # 함수 adder의 정의
return num1 + num2

def main (): # 프로그램의 실행 흐름을 담은 main 함수의 정의
print(adder(5, 3))

main() #위에 정의된 함수 main의 호출



결과값 : 8


> op4.py

def add(num1, num2): # add 함수의 정의
return num1 + num2
def min(num1, num2): # min 함수의 정의
return num1 - num2
def mul(num1, num2): # mul 함수의 정의
return num1 * num2
def div(num1, num2): # div 함수의 정의
return num1 / num2

def main(): # 프로그램의 실행 흐름을 담고 있는 main 함수의 정의
print(add(5, 3))
print(min(5, 3))
print(mul(5, 3))
print(div(5, 3))

main () # main 함수의 호출

main()



결과값 : 
8
2
15
1.6666666666666667

좋은 웹페이지 즐겨찾기