반응형
* 위 강의노트는 패스트캠퍼스가 주관하는 강의를 수강한 후 작성한 노트입니다.
* 퍼가실 경우 출처를 명시해주세요.
Python Programming 기초
함수의 이해 및 사용 - 코드의 재사용
함수란?
- 지금까지 무심코 코드에서 사용된 함수들이 존재
- ex) sum, len, range…
-
함수란 우리가 알고있는 개념처럼 주어진 입력(input)에대해서 의도된 출력(output)을 전달하는 역할
-
함수의 정의
- 정의 시 최초에 def키워드 사용
- argment정의 (함수에 입력으로 전달하는 값을 의미, argument또는 parameter라고 함)
- :(콜론) -> 함수 역시 코드 블록이기 때문에 콜론이 필요
- body(함수의 구현 부분, 함수 역시 코드블록이기 때문에 들여쓰기 된 부분까지 함수의 코드블록으로 인지함)
- 함수를 호출한 코드(caller)로 함수가 해당 기능을 수행하고 완료된 값(output)을 전달하기 위해 return키워드 사용
- 즉 return이후에 오는 값을 caller로전달
- 함수의 네이밍 역시 중요
- 즉 어떤 기능을 하는 함수인지 이름으로 최대한 나타날 수 있게 해야함
def add(x, y):
n = x + y
return n # 출력
add(30, 300)
>> 330
-
함수의 사용(호출)
- 함수명(파라미터1, 파라미터2, … , 파라미터n)
- 위와 같이 정의된 함수의 이름과 전달되는 parameter(인자)를 괄호 안에 전달하여 함수를 호출
- 함수가 호출되면 실행의 흐름이 호출자(caller)에서 함수(callee)로변경됨
- 함수의 입력(인풋) 파라미터(parameter), 아규먼트(argument)라고도 함
-
함수 네이밍(naming)
- 함수 이름으로부터 기능이 명시
- 의미와 반대되거나 맞지 않는 이름은 사용 금지
-
parameter(argument) 인자
- 함수에 전달되는 입력(input)
- 입력이 필요하지 않을 수도, 1개의입력만 있을 수도, 여러개의 입력이 존재할 수도 있음
- 파라미터로 int, string, float, boolean, list, dict등등 어떤 파이썬 객체도 전달 가능
- 심지어, 함수도 함수의 파라미터로 전달 가능
- python의 경우, 타입 명시가 없기 때문에, 함수 생성 시, 의도된 파라미터의 타입에 맞게 입력을 전달하는 것이 중요
- 또한 파라미터를 전달할 때, 정의된 순서에 따라 값을 전달하는 것이 중요
- Default parameter (기본 인자)
- 함수의 파라미터에 기본값 지정 가능
- 파라미터를 명시하지 않을 경우, 지정된 기본값으로 대체
def add(x, y, z = 0): # 기본 인자 : z
a = x + y + z
return a
add(10, 20, 30) # 기본 인자에 수를 넣어줄 때
>> 60
add(10, 20) # 인자를 입력하지 않을 경우 기본값으로 대체
>> 30
-
기본 파라미터의 다른 예
- print 함수
- sep, end, file등 여러 기본 파라미터를 가짐
- sep, end, file등 여러 기본 파라미터를 가짐
- print 함수
-
Default parameter 사용 시 주의점
- 디폴트 파라미터 뒤에 일반 파라미터가 위치할 수 없음
- ex) def test(a, b, c = 1) -> 올바른 예
- ex) def test(a, b = 1, c) -> 올바르지 않은 예
-
keyword parameter(키워드 파라미터)
- 파이썬의 경우, 파라미터에 값을 전달할 때 파라미터의 이름을 명시하여 전달 가능
- 파라미터 이름을 사용하지 않을 경우, 기본적으로 순서에 맞게 전달
def test(x, y, z):
a = x + y + z
return a
test(x = 10, z = 3, y = 50) # 키워드로 명시, 순서 변경 가능
>> 63
test(10, 50, 3) # 기본적으로는 순서에 맞춰 키워드에 저장
-
return(리턴)
- 기본적으로 함수의 종료를 명시
- return옆에 값이나 수식이 있다면 해당 값을 호출자(caller)에게반환(전달)
- return만 존재하면 None반환
- return이 없는 경우, 기본적으로 함수 코드 블록이 종료되면 종료로 간주, 이때도 None 반환
- 기본적으로 함수의 종료를 명시
-
multiple return (복수 값 반환)
- tuple반환을 하여 복수개의 값 리턴 가능
def add_mul(x, y):
s = x + y
m = x * y
return s, m
print(add_mul(20, 3)) # 튜플로 반환
>> (23, 60)
- variable scope (변수의 범위)
- 변수가 참조 가능한 코드 상의 범위를 명시
- 함수 내의 변수는 자신이 속한 코드 블록이 종료되면 소멸됨
- 이렇게 특정 코드 블록에서 선언된 변수를 자연변수(local variable)라고 함
- 반대로 가장 상단에서 정의되어 프로그램 전까지 유지되는 변수를 전역 변수(global variable)이라고 함
- 같은 이름의 지역변수와 전역변수가 존재할 경우 지역변수의 우선순위가 더 높음
num1 = 10 # 글로벌 변수
num2 = 30
def test(num1, num2):
print(num1, num2)
return num1 + num2
test(30, 40) # num1 = 30, num2 = 40 그러나 지역변수이기 때문에 블럭 안에서만 작동
print(num1, num2)
>> 10 30
-
variable length argument (가변길이 인자)
- 전달되는 파라미터의개ㅜ가 고정적이지 않은 경우 사용
- *args : 파라미터를 튜플의 형태로 전달
- kwargs : 파라미터를 딕셔너리 형태로 전달(네임드 파라미터)
-
keyword parameter(키워드 파라미터)
- 가 붙은 경우에는 키워드 파라미터로 인식
- 즉 함수 호출 시, 파라미터의 이름과 값을 함께 전달 가능
- 가변길이 함수의 대표적인 예 : 문자열 포맷(format) 함수
- 여러가지 값과 포멧을 이용하여 문자열을 정의할 수 있는 함수
- {} placeholder를문자열 내에 위치시킨 후, 해당 위치에 format함수로 전달된 값으로 대체하여 문자열 생성
def test(**kwargs): # key word arguments
for key, value in kwargs.items():
print(‘key:’ , key, ‘, value:’, value)
test(a = 1) # 딕셔너리로 인자를 받음
>> key: a, value: 1
함수의 이해 및 사용 - lamda 함수의 이해
Lamda 함수
- 단일문으로 표현되는 익명함수
- 익명함수란 이름이 없는 구현체만 존재하는 간단한 함수를 의미
- 코드 상에서 한번만 사용되는 기능이 있을 때, 굳이 함수로 만들지 않고 1회성으로 만들어서 쓸 때 사용
- return을 쓰지 않음
square = lambda x: x**2 # 간단한 함수를 길지 않게 작성할 때 사용
type(square) # 함수형 반환
>> function
square(5)
>> 25
- filter, map, reduce
- lambda가 유용하게 사용되는 3가지 대표적 함수
- 함수형 프로그래밍의 기본 요소이기도 함
- filter : 특정 조건을 만족하는 요소만 남기고 필터링
- map: 각 원소를 주어진 수식에 따라 변형하여 새로운 리스트를 반환
- reduce : 차례대로 앞 2개의 원소를 가지고 연산. 연산의 결과가 또 다음 연산의 입력으로 진행됨. 따라서 마지막까지 최종 출력은 한개의 값만 남게 됨.
# filter(함수, 리스트) : 함수의 리턴되는 값이 True인 요소만 남기기
nums = [1, 2, 3, 6, 8, 9]
filter(lambda n: n%2 == 0, nums)
>> [2, 6, 8]
# map(함수, 리스트) : 주어진 리스트에 함수를 적용한 새로운 값 대체
map(lambda n:n**2, nums)
>>[1, 4, 9, 36, 64, 81]
import functools # reduce가 있는 패키지
a = [1, 3, 5, 8]
functools.reduce(lambda x, y: x + y, a) #모든수의 합을 구함
>> 17
연습문제
1. 주어진 숫자 리스트의 평균을 구하는 함수를 출력하시오
# 입력 : 숫자 리스트
# 출력 : 숫자 리스트의 평균값
def mean(nums):
_sum = 0
for i in nums:
_sum += i
return _sum / len(nums)
print(mean([1, 2, 3])) # 2.0
2. 해당 숫자가 소수인지 아닌지 판별하시오
# 입력 : 양의 정수
# 출력 : boolean(소수 : True, 합성수 : False)
def is_prime(num):
for i in range(2, num):
if num % i == 0:
return False
return True
3. 2부터 해당 숫자 사이에 소수가 몇개인지 출력하시오
# 입력 : 양의 정수 1개
# 출력 2-해당 숫자 사이에 소수의 개수
def num_prime(num):
count = 0
for i in range(2, num + 1):
if is_prime(i):
count += 1
return count
반응형
'Study > ML_Basic' 카테고리의 다른 글
머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 수집을 위한 Python(1) (0) | 2020.09.10 |
---|---|
[수강 후기]머신러닝과 데이터분석 A-Z 올인원 패키지 - python programming 기초 (0) | 2020.09.08 |
머신러닝과 데이터분석 A-Z 올인원 패키지 - Python Programming 기초(4) (0) | 2020.09.03 |
머신러닝과 데이터분석 A-Z 올인원 패키지 - Python Programming 기초(2) (0) | 2020.09.03 |
머신러닝과 데이터분석 A-Z 올인원 패키지 - Python Programming 기초(1) (0) | 2020.09.03 |