๐ ํจ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
def ํจ์๋ช
(๋งค๊ฐ๋ณ์):
<์ํํ ๋ฌธ์ฅ1>
<์ํํ ๋ฌธ์ฅ2>
...
return ๊ฒฐ๊ณผ๊ฐ
def add(a, b): # ๋งค๊ฐ๋ณ์
return a + b
add_result = add(3,4) # ์ธ์
print(add_result) # 7
๋งค๊ฐ๋ณ์(parameter) ๋ ํจ์์ ์ ๋ ฅ์ผ๋ก ์ ๋ฌ๋ ๊ฐ์ ๋ฐ๋ ๋ณ์๋ฅผ ์๋ฏธํ๊ณ ,
์ธ์(argument) ๋ ํจ์๋ฅผ ํธ์ถํ ๋ ์ ๋ฌํ๋ ์ ๋ ฅ๊ฐ์ ์๋ฏธํ๋ค.
์ ๋ ฅ๊ฐ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ ์๋ ํฉ์
def add(a, b):
result = a + b
return result
result = add(3,4)
print(result) # 7
์ ๋ ฅ๊ฐ์ด ์๋ ํฉ์
def greeting():
return "What's up?"
r = greeting()
print(r) # What's up?
๊ฒฐ๊ณผ๊ฐ์ด ์๋ ํฉ์
def user_info(name,age):
print('Name:',name)
print('Age:',age)
user_info('amy',20)
# Name: amy
# Age: 20
์ ๋ ฅ๊ฐ๋ ๊ฒฐ๊ณผ๊ฐ๋ ์๋ ํฉ์
def greeting():
print("What's up?")
greeting() # What's up?
๐ ๋งค๊ฐ๋ณ์
๋งค๊ฐ๋ณ์ ์ง์ ํ์ฌ ํธ์ถ
def add(a,b):
return a+b
print(add(a=2,b=3), add(b=3,a=3)) # 5 6
* args
- ํจ์๊ฐ ์ ๋ ฅ๊ฐ์ ๋ช๊ฐ ๋ฐ์์ง ๋ชจ๋ฅผ ๋ ๋งค๊ฐ๋ณ์๋ก ' *๋งค๊ฐ๋ณ์ ' ๋ฅผ ์ฌ์ฉํ๋ค
- args๋ ์ธ์๋ฅผ ๋ปํ๋ argument์ ์ฝ์๋ก ๊ด๋ก์ ์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ค.
def ํจ์์ด๋ฆ(*๋งค๊ฐ๋ณ์):
<์ํํ ๋ฌธ์ฅ>
...
def add_args(*args):
result = 0
print(args)
for i in args:
result += i
return result
result = add_args(1,2,3,4,5)
print(result)
# (1,2,3,4,5)
# 15
def add_mul(choice, *args):
if choice == "add":
result = 0
for i in args:
result = result + i
elif choice == "mul":
result = 1
for i in args:
result = result * i
return result
result = add_mul('add', 1,2,3,4,5)
print(result) # 15
๋งค๊ฐ๋ณ์ args๋ ํํ์ด ๋๊ณ ๋ชจ๋ ์ธ์๊ฐ๋ค์ด ๊ทธ ํํ์ ์ ์ฅ๋๋ค.
**kwargs
def print_kwargs(**kwargs):
print(kwargs)
print_kwargs(name='amy',age=20) # {'name': 'amy', 'age': 20}
๋งค๊ฐ๋ณ์ kwargs๋ ๋์ ๋๋ฆฌ๊ฐ ๋๊ณ ๋ชจ๋ key = value ํํ์ ๊ฒฐ๊ด๊ฐ์ด ๊ทธ ๋์ ๋๋ฆฌ์ ์ ์ฅ๋๋ค.
๋งค๊ฐ๋ณ์์ ์ด๊ธฐ๊ฐ ์ค์
- ์ด๊น๊ฐ์ผ๋ก ์ค์ ํ๊ณ ์ถ์ ๋ณ์๋ค์ ๋ค์ชฝ์ ์์ด์ผ ํ๋ค.
def user_info(name, age, is_programmer=False):
print('์ด๋ฆ์ %s ์
๋๋ค.' % name)
print('๋์ด๋ %d์ด ์
๋๋ค.' % age)
if is_programmer:
print('ํ๋ก๊ทธ๋๋จธ ์
๋๋ค.')
else:
print('ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋๋๋ค.')
user_info('amy', 20)
# ์ด๋ฆ์ amy ์
๋๋ค.
# ๋์ด๋ 20์ด ์
๋๋ค.
# ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋๋๋ค.
user_info('ann', 21, True)
# ์ด๋ฆ์ amy ์
๋๋ค.
# ๋์ด๋ 20์ด ์
๋๋ค.
# ํ๋ก๊ทธ๋๋จธ๊ฐ ์
๋๋ค.
๐ ํจ์์์ retrun
- return ์ ํจ์์์ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ด๊ฐ์ ๋ฐํํ๋ค.
- return ๊ฒฐ๊ด๊ฐ์ ํญ์ ํ๋์ด๋ค
- return ์ ์ฌ๋ฌ๊ฐ ๊ฐ์ ํํ๋ก ๋ฐํํ๋ค.
def add_and_mul(a,b):
return a+b, a*b
result = add_and_mul(3,4)
print(result) # (7, 12)
add_res, mul_res = add_and_mul(3,4)
print(add_res, mul_res) # 7 12
- ํน๋ณํ ์ํฉ์์ ํจ์๋ฅผ ๋น ์ ธ๋๊ฐ๊ณ ์ถ๋ค๋ฉด return์ ๋จ๋ ์ผ๋ก ์จ์ ํจ์๋ฅผ ์ฆ์ ๋น ์ ธ๋๊ฐ ์ ์๋ค.
def print_id(id):
if id == '0':
return
print("id๋ %s ์
๋๋ค." % id)
print_id('0')
print_id('777') # id๋ 777 ์
๋๋ค.
๐ ์ง์ญ(Local) ๋ณ์์ ์ ์ญ(Global) ๋ณ์
์ง์ญ๋ณ์์ ์ ์ญ ๋ณ์
- ํจ์ ์์์ ๋ง๋ ๋ณ์(์ง์ญ ๋ณ์)๋ ํจ์ ์์์๋ง ์ด์์๋ค๊ฐ ํจ์ ์ฝ๋๊ฐ ์คํ ์ข ๋ฃ๋๋ฉด ๋ณ์๋ ๊ฐ์ด ์ฌ๋ผ์ง๋ค.
- ํจ์ ์ธ๋ถ์์ ๋ง๋ ๋ณ์(์ ์ญ ๋ณ์)๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋์ด ์๋ ๋์์ ๊ณ์ ์ด์์๋ค.
a = 1 # ์ ์ญ ๋ณ์
def vartest(a):
a = a +1 # ์ง์ญ ๋ณ์
return a
result = vartest(a)
print(result, a) # 2, 1
ํจ์ ์์์ ํจ์ ๋ฐ์ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ
- return ์ฌ์ฉํ๊ธฐ
a = 1
def vartest(a):
a = a +1
return a
a = vartest(a)
print(a) # 2
- global ๋ช ๋ น์ด ์ฌ์ฉํ๊ธฐ
a = 1
def vartest():
global a
a = a+1
vartest()
print(a) # 2
global์ ์ฌ์ฉํ๋ฉด ํจ์๊ฐ ์ธ๋ถ ๋ณ์์ ์ข ์์ ์ด๋ค.
๋ฐ๋ผ์ ํจ์๋ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ ๊ฒ์ด ์ข๊ธฐ ๋๋ฌธ์ global ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋ค.
๊ฐ๊ธ์ ์ด๋ฉด ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์.
๐ lambda ํจ์
- ํจ์๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ์์ฝ์ด๋ก def์ ๋์ผํ ์ญํ ์ ํ๋ค.
- lambda ์์ฝ์ด๋ก ๋ง๋ ํจ์๋ return ๋ช ๋ น์ด๊ฐ ์์ด๋ ๊ฒฐ๊ด๊ฐ์ ๋๋ ค์ค๋ค.
lambda ๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2, ... : ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํ ํํ์
add = lambda a,b: a+b
result = add(3,4)
print(result) #7
def print_func(func,x):
print(func(x))
print_func(lambda x:x+3, 1) # 4
๐ ์ค์ฒฉ ํจ์ (Nested Function)
- ํจ์ ์์ ์ ์๋ ํจ์
def func(a):
def nested_func():
nonlocal a
a = a + 1
return a
return nested_func()
print(func(2)) # 3
nonlocal์ ์ค์ฒฉํจ์ ํ๋จ๊ณ ๋ฐ๊นฅ์ ์๋ ๋ณ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
๐ generator์ yield
yield
def list_pow(n):
pow_list = []
while n>0:
pow_list.append(n**2)
n -= 1
return pow_list
for i in list_pow(5):
print(i, end=' ')
# 25 16 9 4 1
print()
print(list_pow(5)) # [25,16,9,4,1]
def yield_pow(n):
while n>0:
yield n**2
n -= 1
for i in yield_pow(5):
print(i, end=' ')
# 25 16 9 4 1
print()
print(yield_pow(5)) # <generator object yield_pow at 0x7f7aa00684a0>
yield ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด generator๋ฅผ ๋ฐํํ๋ค.
generator
- ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ง ์๊ณ ํ์ํ ๋๋ง๋ค ํ๋์ฉ ๋ง๋ค์ด ๋ผ ์ ์๋ ๊ฐ์ฒด
import time
def list_pow(n):
pow_list = []
while n>0:
time.sleep(1)
pow_list.append(n**2)
n -= 1
return pow_list
for i in list_pow(5):
print(i)
# (5์ด ๊ฒฝ๊ณผ)
# 25
# 16
# 9
# 4
# 1
์์ ํ๋๋ฅผ ๋ง๋๋๋ฐ 1์ด๊ฐ ๊ฑธ๋ฆฐ๋ค. for ๋ฃจํ๋ก list ์์๋ฅผ ์ํํ ๋ 5์ด๊ฐ ํ๋ฅธ ํ์ 25,16,9,4,1์ด ํ๋ฒ์ ์ถ๋ ฅ ๋๋ค.
import time
def yield_pow(n):
while n>0:
time.sleep(1)
yield n**2
n -= 1
for i in yield_pow(5):
print(i)
# (1์ด ๊ฒฝ๊ณผ)
# 25
# (1์ด ๊ฒฝ๊ณผ)
# 16
# (1์ด ๊ฒฝ๊ณผ)
# 9
# (1์ด ๊ฒฝ๊ณผ)
# 4
# (1์ด ๊ฒฝ๊ณผ)
# 1
1์ด ํ์ 25๊ฐ ์ถ๋ ฅ๋๊ณ , 1์ด ํ์ 16์ด ์ถ๋ ฅ๋๊ณ ...
๊ฐ ์์๋ 1์ด์ ๊ฐ๊ฒฉ์ ๋๊ณ ์ถ๋ ฅ๋๋ค.
๊ฒฐ๊ณผ๊ฐ์ ๋๋์ด์ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ธก๋ฉด์์ ์ด์ ์ด ์๋ค.
return ํค์๋๋ฅผ ์ฌ์ฉํ ๋๋ ๋ชจ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋์์ผํ๋ ๋ฐ๋ฉด, yield ํค์๋๋ฅผ ์ฌ์ฉํ ๋๋ ๊ฒฐ๊ณผ๊ฐ์ ํ๋์ฉ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค ๋๋๋ค. ๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ด๋ค.
yield from
- list๋ฅผ generator๋ก ๋ณํ
def ex_yield_from(ex_list):
yield from ex_list
for i in ex_yield_from([25,16,9,4,1]):
print(i,end=' ')
# 25 16 9 4 1
generator comprehension
gen = (i**2 for i in range(5,0,-1))
print(gen)
# <generator object <genexpr> at 0x7f59e55ca4a0>
for i in gen:
print(i, end=' ')
# 25 16 9 4 1
์ฐธ๊ณ
- ์ ํ ํฌ ํ์ด์ฌ
- https://fastcampus.co.kr/dev_online_computer
- https://www.daleseo.com/python-yield/ (generator์ yield ๋ถ๋ถ)
'Language > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2022.07.10 |
---|---|
[Python] ์ ์ถ๋ ฅ (0) | 2022.06.22 |
[Python] ๋ด์ฅํจ์ (0) | 2022.06.17 |
[Python] ๊ธฐ๋ณธ ๋ฌธ๋ฒ - ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ (0) | 2022.04.30 |
[Python] ๊ธฐ๋ณธ ๋ฌธ๋ฒ - ์๋ฃํ (0) | 2022.04.28 |