본문 바로가기
개발

[파이썬&루비] 함수(Function)

by 마스터누누 2017. 5. 31.
728x90
반응형

함수(Function)




1
2
3
4
5
6
7
8
9
10
# python
def func():
    print('Hi!')
func()
 
# ruby
def func()
    puts('Hi!')
end
func()
cs


중복의 제거와 재사용성, 코드의 효율성에 기반하여 프로그래밍은 발전해 왔다.

그 중에서도 함수는 재사용성을 높이고 효율적인 코드를 만들기위해 꼭 필요한 존재이다.


함수의 기본 개념은 입력값이 있으면 출력 값을 주는 코드이다.

물론 이 입력값의 개수는 0개부터 여러개가 될 수도 있다.

우리가 이때까지 사용하던 print도 함수의 종류이다.

print나 len등은 언어에서 제공해주는 내장함수이며, 별도의 설치나 조작이 없어도 사용이 가능하다.


사용자 지정 함수를 만들수도 있다.

위의 코드가 지정 함수에 대한 예제인데, 그렇게 효율적인 코드는 아니다.

def로 함수를 정의 하고, 함수명 뒤 괄호에 인자를 넣는다. 그리고 내부에는 함수의 동작 코드를 명시한다.

루비에서는 코드 블록의 마지막을 end로 감싸줘야한다.


이렇게 만들어진 함수를 사용하기 위해서는 함수이름 뒤에 괄호와 인자를 넣어주면 된다.

만들어진 func 함수를 실행하면 'Hi!'가 출력된다.

예시의 함수는 입력값과 출력값이 없다.





1
2
3
4
5
6
7
8
9
10
# python
def func():
    return 'Hi!'
print(func())
 
# ruby
def func()
    return 'Hi!'
end
puts(func())
cs


그렇다면 출력값을 만들어 주기위해서 어떻게 해야할까.

함수 내부에서 모든 코드를 다 실행하고 출력할 값을 반환해 주면된다.

이러한 반환은 return이라는 키워드로 이루어지며, 함수를 호출한 곳으로 값이 전달된다.


따라서 위의 코드에서는 함수를 호출한 곳으로 'Hi!'문자열이 반환되며,

이를 출력 했을 때 정상적으로 문자열이 나오게 된다.





1
2
3
4
5
6
7
8
9
10
# python
def Func(num):
    return 'Func'*num
print(Func(3))
 
# ruby
def Func(num)
    return 'Func'*num
end
puts(Func(3))
cs


입력값의 경우 앞서 언급했듯이, 함수 이름 뒤에 괄호 안에 넣어주면 된다.

함수 내부에서는 이렇게 전달된 입력값을 변수처럼 마음대로 사용이 가능하다.

내부에서 지역 변수로 선언해 준것이라고 생각하면된다.


주의해야 할 점은 숫자형이나 문자형 등은 아무리 함수 내부에서 값을 바꾸어도

외부에 값을 전달해준 변수는 변하지 않는다는 것이다.

이는 인자값의 복제가 일어나기 때문이다.





1
2
3
4
5
6
7
8
9
10
# python
def make_string(str, num):
    return str*num
print(make_string('b'3))
 
#ruby
def make_string(str, num)
    return str*num
end
puts(make_string('b'3))
cs


또한 인자를 전달하는데 있어서 위와 같이 여러개를 전달할 수가 있다.

이 또한 하나를 전달한 것 처럼 함수 내부에서 지역 변수처럼 사용이 가능하다.

대신 이렇게 전달되는 인자의 값이 많아지면 함수의 사용이 까다롭기 때문에

함수 내부에서 선언할 수 있는 변수는 내부에서 선언하고, 꼭 받아야 하는 값만 인자로 전달 받도록 하자.




출처 : 생활코딩, 파이썬&루비


반응형

'개발' 카테고리의 다른 글

[파이썬&루비] 객체(Object)  (0) 2017.06.01
[파이썬&루비] 모듈(Module)  (0) 2017.05.31
[기술의역사]HTML(HyperText Mark-up language)  (0) 2017.05.30
[Javascript] 클로저(Closure)  (0) 2017.05.30
[기술의역사] 자바(JAVA)  (0) 2017.05.29

댓글