- 함수
- 입력값, 출력값(반환값)이 있다.
- 코드의 반복을 줄이기 위해서 사용
- 파이썬 함수의 구조 : def 함수명(변수1, 변수2...): 실행문1 실행문2 ... return 결과값
- 매개변수(parameter) 와 인수(arguments)
- 매개변수는 함수에 입력으로 전달된 값을 받는 변수
- ex . def add(a, b): # a, b는 매개변수
- 인수는 함수를 호출할 때 전달하는 입력값
- ex. print(add(3, 4)) # 3, 4는 인수
- 매개변수는 함수에 입력으로 전달된 값을 받는 변수
- 변수1, 변수2 생략 가능
- return 문 생략 가능 + return값 여러 개 가능
- 파이썬에서는 None는 별도 데이터 타입으로의 객체로서 존재, 값의 부재를 나타냄 (error가 안남)
- 내부함수란 함수 내부에 또다른 함수가 있는 것을 말한다. 내부함수는 외부에서 호출할 수 없다.
- 람다함수란 간략하게 함수를 사용할 경우 유용하다. 함수명 = lambda 변수1, 변수2, ... : 결과값
- 예제
ambda 함수
- lambda 변수1, 변수2, ... : 결과값
def say():
print('Ho~')
say()
결과
Ho~
a = say()
print(a)
※ 함수를 변수로 둘 수는 있다. 하지만 a를 출력하게 되면 아무 값도 안나오게 된다.
결과
Ho~
None
def hello(x):
print('hello', x)
hello('python')
결과
hello python
# data 여러 개 올때 변수 앞에 *넣어주기
def sum_many(*args):
sum = 0
for i in args:
sum += i
return sum
sum_many(1, 2, 3, 4, 5)
결과
15
#더하기, 빼기 함수
def add_minus(x, y):
a = x + y
b = x - y
return a, b
print(type(add_minus(1, 3)))
add_minus(1, 3)
결과
<class 'tuple'>
(4, -2)
# gender default값 설정(단, 파라미터 종류 별 순서 중요!!! default값이 앞에 나오면 안됌)
def say_myself(name, gender = 'M'):
print(f'나의 이름은 {name}입니다.')
print(f'나의 성별은 {gender}입니다.')
say_myself('홍길동')
결과
나의 이름은 홍길동입니다.
나의 성별은 M입니다.
#람다함수
a = lambda x : x*2
a(2)
결과
4
- 패킹,언패킹
<packing>
패킹은 인자로 받은 여러개의 값을 하나의 객체로 합칠 수 있다.
위치인자 패킹은 *한개를 매개변수 앞에 붙여서 사용합니다.
def func(*args):
print(args)
print(type(args))
이런식으로 매개변수 이름 앞에 *을 붙여준다면, 위치인자로 보낸 모든 객체들을 하나의 객체로 관리해줍니다.
func(1, 2, 3, 4, 5, 6, 'a', 'b')
결과
Copy(1, 2, 3, 4, 5, 6, 'a', 'b')
<class 'tuple'>
동일하게 키워드 인자에 패킹은 **을 통해 작성할 수 있습니다.
키워드 인자는 패킹한 인자들을 키워드와 인자 쌍으로 이뤄진 딕셔너리로 관리합니다.
def kwpacking(**kwargs):
print(kwargs)
print(type(kwargs)
kwpacking(a=1, b=2, c=3)
결과값
Copy{'a': 1, 'b': 2, 'c': 3}
<class 'dict'>
<unpacking>
unpacking은 여러개의 객체를 포함하고 있는 하나의 객체를 풀어줍니다.
함수에서 unpacking을 할때는, 매개변수에서 *을 붙이는게 아니라 인자 앞에 *을 붙여서 사용합니다.
동일하게 위치인자를 unpacking 하는 경우는 *를, 키워드인자를 unpacking하는 경우 **를 사용합니다.
def sum(a, b, c):
return a + b + c
numbers = [1, 2, 3]
sum(numbers) # error
print(sum(*numbers)) # 출력 : 6
[1, 2, 3]을 인자로 보낼때, *을 붙이면 unpacking이 됨.
unpacking은 아래와 같은 순서로 변경되어 실행됩니다.
1. sum(*numbers)
2. sum(*[1, 2, 3])
3. sum(1, 2, 3)
※해체된 결과가 함수의 매개변수에 갯수와 다르다면 에러가 발생
위치인자를 unpacking할때는 Container객체라면 다 가능합니다.
sum(*'abc') # 'abc'
sum(*(4, 5, 6)) # 15
sum(*{'가', '나', '다'}) # '나다가'
sum(*{'치킨': 3, '피자': 12, '음료수': 10}) # '치킨피자음료수'
※ set타입과 dict타입은 순서정보를 가지고 있지 않기 때문에 결과가 다를 수 있음
동일한 방식으로 키워드인자로 unpacking할 수 있다.
unpacking하기 위해선 인자가key와 인자로 구성되어 있는mapping타입, 즉dict가 필요하다.
def cal(first, op, second):
if op == '+':
return first + second
if op == '/':
return first / second
if op == '-':
return first - second
if op == '*':
return first * second
prob = {
'first': 12,
'second': 34,
'op': '*'
}
cal(**prob) # 결과 : 408
위 예제에 키워드 인자의 unpacking은 다음과 같이 작동한다.
1. cal(**prob)
2. cal(prob = {
'first': 12,
'second': 34,
'op': '*'
})
3. cal(first=12, second=34, op='*')
※위치인자의 unpacking처럼 unpacking되는 인자는 매개변수의 키워드 매개변수와 일치해야 한다.
< enumerate() 함수 >
- enumerate() : index와 value값 같이 나오게 하는 내장 함수.
- for 문의 in 뒷 부분을 enumerate() 함수로 한 번 감싸주기.
인덱스(index) 변수를 증가시키면서 for 루프를 돌리고 싶을 때 파이썬에서는 enumerate()라는 내장 함수를 통해 이러한 인덱스 변수를 사용하지 않고 루프를 돌릴 수 있다.
for entry in enumerate(['A', 'B', 'C']):
print(entry)
결과
(0, 'A')
(0, 'B')
(0, 'C')
enumerate() 함수는 기본적으로 인덱스와 원소로 이루어진 튜플(tuple)을 만들어줍니다. 따라서 인덱스와 원소를 각각 다른 변수에 할당하고 싶다면 인자 풀기(unpacking)를 해줘야 한다.
for i, entry in enumerate(['A', 'B', 'C']):
print(i, entry)
결과
0 A
1 B
2 C
- 시작 인덱스 변경
루프를 돌리다보면 인덱스를 0이 아니라, 1로 시작하고 싶을 때가 있는데 이럴 때는 enumerate() 함수를 호출할 때 start 인자에 시작하고 싶은 숫자를 넘기면 된다.
for i, entry in enumerate(['A', 'B', 'C'], start=1):
print(i, entry)
결과
1 A
2 B
3 C
'Back-End > Python' 카테고리의 다른 글
[Python][파이썬] 라이브러리, 모듈(module), import , __name__ (1) | 2023.11.08 |
---|---|
[Python][파이썬] 파일 생성하기, pickle 모듈 (1) | 2023.11.07 |
[Python][파이썬] 고객 정보 관리 시스템 만들기 실습 (4) | 2023.11.06 |
[Python][파이썬] 제어문 - 조건문(if), 반복문(for, while) (0) | 2023.11.06 |
[Python]파이썬 - 불리언, 집합, 제어문 (5) | 2023.11.03 |