-
Python_functionProgramming/_Python 2023. 6. 21. 14:09
1. function
함수는 우리가 반복적으로 사용되는 코드를 하나로 묶고 어떤 입력값을 넣었을때, 결과를 출력해주는것을 생각하면 된다.
Python에서 함수의 구조는 다음과 같다.
def add(a: int, b: int) -> int: # int형의 a와 b를 입력값으로 넣어 int를 출력한다는 의미 result: int = a+b return result def add(a, b): result = a+b return result
위 함수의 이름은 add이고 입력으로 2개의 값을 받으면, 2개를 더한 값 1개를 출력한다는 의미다.
위와 아래의 add function은 같은 코드이다.아래와 같이 작성해도 큰 상관은 없지만, 위와 같이 쓴 이유는 코드가 지금보다 더 복잡해지면 다른 사람이 코드를 읽거나 추후 내가 작성한 코드를 수정할 때, 조금 더 편하게 보기 위해서 위와 같이 작성한다.
여기서 매개변수(parameter)와 인수(arguments)라는 용어가 나오는데, 매개변수는 함수에서 입력으로 전달된 값을 받는 변수, 인수는 함수를 호출할 때 전달하는 입력값을 이야기한다.
def add(a: int, b: int) -> int: # a, b는 매개변수 result: int = a+b return result print(add(1, 5)) # 1, 5는 인수
add와 같은 함수를 일반함수라고 부르며 입력값이 없는 함수, 결과값이 없는 함수, 둘 다 없는 함수들이 있다.
- 입력값이 없는 함수
def test_print() -> str: return 'test python!!' print(test_print()) # test python!!
- 결과값이 없는 함수
def test_print(a: int, b: int): print('a: %d, b: %d 이다.' % (a, b)) test_print(1, 2) # a: 1, b: 2 이다.
- 둘 다 없는 함수
def test_print(): print('test python!!') test_print() # test python!!
- 가변 입력값을 받는 함수
내가 만든 함수의 입력값의 개수가 정해진 것이 아닌, 여러개의 입력값을 받아야 하는 경우도 있다. 만약 100개의 입력 값을 받는데 이를 모두 매개변수화를 한다면, 너무나도 불편할 것이다. Python에서는 *args를 사용하여 함수가 여러가지 매개변수를 받을 수 있게 설정해주도록 도움을 준다.
def test_add(*args: int) -> int: result: int = 0 for num in args: result += num return result print(test_add(1)) # 1 print(test_add(1,2)) # 3 print(test_add(1,2,3)) # 6 print(test_add(1,2,3,4)) # 10
*args의 args는 arguments의 약자로 매개변수를 뜻하는 단어이다. 다른 단어로 대체를 해도 문제가 없으며 args는 다른 프로그래밍 언어에서도 볼 수 있다.
args와 함께 kwargs도 볼 수 있는데, 이는 키워드 파라미터라고 한다. 키워드 파라미터는 **kwargs로 표시된다.
def test_kwagrs(**kwargs): return kwargs print(test_kwagrs(a=1, name='jack', value=3)) # {'a': 1, 'name': 'jack', 'value': 3}
출력된 결과를 보면 key와 value 형태의 딕셔너리 형태로 만들어져서 출력되는 것을 볼 수 있다.
- 지역변수(local)와 전역변수(global)
함수 내부에서 사용된 변수를 함수 바깥에서도 쓸 수 있을까? 답을 이야기하자면 쓸 수 없다. 예시를 보면 다음과 같다.
a: int = 1 # 전역변수 def test_variable(): a: int = 2 # 지역변수 print('test_variable: %d', a) test_variable() # test_variable: %d 2 print('value_a?: %d', a) # value_a?: %d 1
해당 예제를 보면 전역변수 a=1이 선언되고 test_variable() 함수의 지역변수 a=2로 선언이 되었지만, 출력을 해봤을 때 함수 내부에서 선언된 변수의 값이 함수 밖의 a에 영향을 미치지 않는 것을 볼 수 있다.
만약 함수 내부의 변수 값을 사용하고 싶다면, 내부 변수의 값을 return하거나 global을 사용하여 전역변수로 지정해주는 방법이 있다.
1. return
a: int = 1 def test_variable() -> int: a: int = 2 return a a = test_variable() print('value_a?: %d', a) # value_a?: %d 2
2. global
a: int = 1 def test_variable(): global a a += 1 test_variable() print('value_a?: %d', a) # value_a?: %d 2
그러나 전역변수를 사용하는 방식들은 추천하지 않는다. 그 이유는 프로그램이 복잡해질수록 외부 변수에 종속적인 함수가 좋지 않은 영향을 받을 수 있기 때문이다.
'Programming > _Python' 카테고리의 다른 글
Python_lambda (0) 2023.06.22 Python_upper_lower (0) 2023.06.15 Python? (0) 2023.06.15