Language/Python

[Python] ๊ธฐ๋ณธ ๋ฌธ๋ฒ• - ํ•จ์ˆ˜

Ella_K 2022. 6. 15. 23:51

๐Ÿ‘‰ ํ•จ์ˆ˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

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

 


 

์ฐธ๊ณ