λ°˜μ‘ν˜•

ν•¨μˆ˜ (Functions)

1. ν•¨μˆ˜ μ •μ˜ (Defining a Function)

ν•¨μˆ˜λŠ” 반볡적인 μž‘μ—…μ„ λͺ¨λ“ˆν™”ν•˜μ—¬ μ½”λ“œ μž¬μ‚¬μš©μ„±μ„ λ†’μ΄λŠ” 방법이닀. def ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©°, ν•¨μˆ˜ 이름과 κ΄„ν˜Έ μ•ˆμ— λ§€κ°œλ³€μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆλ‹€. ν•¨μˆ˜λŠ” ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œμ—λ§Œ μ‹€ν–‰λœλ‹€.

def greet(name):
    print(f"μ•ˆλ…•ν•˜μ„Έμš”, {name}λ‹˜!")

greet("철수")  # 좜λ ₯: μ•ˆλ…•ν•˜μ„Έμš”, μ² μˆ˜λ‹˜!

2. λ§€κ°œλ³€μˆ˜μ™€ 인자 (Parameters and Arguments)

ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄ μ™ΈλΆ€μ—μ„œ 값을 전달받을 수 μžˆλ‹€. ν•¨μˆ˜ 호좜 μ‹œ μ „λ‹¬λ˜λŠ” 값을 인자라고 ν•œλ‹€. λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ 것과 같은 역할을 ν•œλ‹€.

def add(a, b):
    return a + b

result = add(3, 4)
print(result)  # 좜λ ₯: 7

3. κΈ°λ³Έ λ§€κ°œλ³€μˆ˜ (Default Parameters)

ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ 기본값을 μ„€μ •ν•  수 μžˆλ‹€. ν•¨μˆ˜ 호좜 μ‹œ ν•΄λ‹Ή μΈμžκ°€ μ „λ‹¬λ˜μ§€ μ•ŠμœΌλ©΄ 기본값이 μ‚¬μš©λœλ‹€.

κΈ°λ³Έ λ§€κ°œλ³€μˆ˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ μˆœμ„œκ°€ μ€‘μš”ν•˜λ©°, 기본값이 μ—†λŠ” λ§€κ°œλ³€μˆ˜λ³΄λ‹€ 뒀에 μœ„μΉ˜ν•΄μ•Ό ν•œλ‹€.

def greet(name="친ꡬ"):
    print(f"μ•ˆλ…•ν•˜μ„Έμš”, {name}λ‹˜!")

greet()  # 좜λ ₯: μ•ˆλ…•ν•˜μ„Έμš”, μΉœκ΅¬λ‹˜!
greet("영희")  # 좜λ ₯: μ•ˆλ…•ν•˜μ„Έμš”, μ˜ν¬λ‹˜!

1. κΈ°λ³Έ λ§€κ°œλ³€μˆ˜ μ •μ˜ 및 κ·œμΉ™

기본값이 μ—†λŠ” λ§€κ°œλ³€μˆ˜λŠ” λ¨Όμ € μž‘μ„±λ˜κ³ , 기본값이 μžˆλŠ” λ§€κ°œλ³€μˆ˜λŠ” 뒀에 μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

기본값이 μ—†λŠ” λ§€κ°œλ³€μˆ˜λŠ” λ°˜λ“œμ‹œ 기본값이 μžˆλŠ” λ§€κ°œλ³€μˆ˜λ³΄λ‹€ μ•žμ— μœ„μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

def add(a, b=3):
    return a + b
    
# a κ°’λ§Œ μ „λ‹¬ν•˜λ©΄ bλŠ” κΈ°λ³Έκ°’ 3을 μ‚¬μš©
print(add(2))  # 좜λ ₯: 5

이 ν•¨μˆ˜λŠ” aλŠ” ν•„μˆ˜ λ§€κ°œλ³€μˆ˜λ‘œ λ°›κ³ , bλŠ” κΈ°λ³Έκ°’ 3을 가진닀. ν•¨μˆ˜ 호좜 μ‹œ b 값을 μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©΄ 기본값이 μ‚¬μš©λœλ‹€.

 

잘λͺ»λœ λ§€κ°œλ³€μˆ˜ μ‚¬μš© μ˜ˆμ‹œ:: 기본값이 μ—†λŠ” λ§€κ°œλ³€μˆ˜λŠ” λ°˜λ“œμ‹œ 기본값이 μžˆλŠ” λ§€κ°œλ³€μˆ˜λ³΄λ‹€ μ•žμ— μœ„μΉ˜ν•΄μ•Ό ν•œλ‹€.

def add(a=1, b):
    return a + b

print(add(b=3))  
# 였λ₯˜ λ°œμƒ: 기본값이 μ—†λŠ” λ§€κ°œλ³€μˆ˜ bκ°€ 기본값이 μžˆλŠ” λ§€κ°œλ³€μˆ˜ a 뒀에 μœ„μΉ˜ν•΄ μžˆμ–΄ 였λ₯˜κ°€ λ°œμƒ.
# 기본값이 μ—†λŠ” λ§€κ°œλ³€μˆ˜ bλŠ” 기본값이 μžˆλŠ” λ§€κ°œλ³€μˆ˜ a μ•žμ— μœ„μΉ˜ν•΄μ•Ό 함.

# μˆ˜μ •λœ ν•¨μˆ˜
def add(b, a=1):
    return a + b

print(add(b=3))  # 좜λ ₯: 4

 

4. λ°˜ν™˜κ°’ (Return Value)

ν•¨μˆ˜λŠ” return ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ 값을 λ°˜ν™˜ν•  수 μžˆλ‹€. return을 λ§Œλ‚˜λ©΄ ν•¨μˆ˜λŠ” 싀행을 μ’…λ£Œν•˜κ³ , 값을 λ°˜ν™˜ν•œλ‹€. λ°˜ν™˜λœ 값은 ν•¨μˆ˜ 호좜 μ‹œ λ³€μˆ˜μ— μ €μž₯λ˜κ±°λ‚˜ λ‹€λ₯Έ 계산에 μ‚¬μš©ν•  수 μžˆλ‹€.

def multiply(a, b):
    return a * b

result = multiply(5, 6)
print(result)  # 좜λ ₯: 30

5. κ°€λ³€ 인자 (Variable-length Arguments)

 

κ°€λ³€ μΈμžλŠ” ν•¨μˆ˜κ°€ λͺ‡ 개의 인자λ₯Ό 받을지 미리 μ•Œ 수 없을 λ•Œ μ‚¬μš©λœλ‹€.

*argsλŠ” μœ„μΉ˜ 기반의 κ°€λ³€ 인자λ₯Ό, **kwargsλŠ” ν‚€μ›Œλ“œ 기반의 κ°€λ³€ 인자λ₯Ό μ˜λ―Έν•œλ‹€.

ν•˜λ‚˜μ˜ ν•¨μˆ˜μ—μ„œ μ—¬λŸ¬ 개의 인자λ₯Ό 받을 수 μžˆλ‹€.

 

*args

  • *argsλŠ” μ—¬λŸ¬ 개의 μœ„μΉ˜ 인자λ₯Ό ν•˜λ‚˜μ˜ νŠœν”Œλ‘œ λ°›λŠ”λ‹€.
  • 인자 κ°œμˆ˜κ°€ μ •ν•΄μ Έ μžˆμ§€ μ•Šμ„ λ•Œ μ‚¬μš©ν•œλ‹€.
def sum_all(*args):
    return sum(args)

result = sum_all(1, 2, 3, 4, 5)
print(result)  # 좜λ ₯: 15

 

**kwargs

  • **kwargsλŠ” μ—¬λŸ¬ 개의 ν‚€μ›Œλ“œ 인자λ₯Ό ν•˜λ‚˜μ˜ λ”•μ…”λ„ˆλ¦¬λ‘œ λ°›λŠ”λ‹€.
  • kwargs.items()λŠ” λ”•μ…”λ„ˆλ¦¬μ˜ ν‚€μ™€ κ°’을 κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©ν•œλ‹€.
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="영희", age=30)  
# 좜λ ₯:
# name: 영희
# age: 30

 

+) JavaScriptμ—μ„œλ„ μœ μ‚¬ν•˜κ²Œ κ°€λ³€ μΈμžλ₯Ό μ‚¬μš©ν•  μˆ˜ μžˆλ‹€. 

μŠ€ν”„λ ˆλ“œ μ—°μ‚°μž(...)λŠ” Python의 *args와 μœ μ‚¬ν•˜κ²Œ λ™μž‘ν•˜λ©°, κ°μ²΄λ‘œ λ°›μ€ μΈμžλŠ” kwargs와 λΉ„μŠ·ν•˜λ‹€.

// JavaScriptμ—μ„œ κ°€λ³€ 인자
function sumAll(...args) {
    return args.reduce((acc, cur) => acc + cur, 0);
}

console.log(sumAll(1, 2, 3, 4, 5));  // 좜λ ₯: 15

// JavaScriptμ—μ„œ 객체 ν‚€-κ°’ λ°›κΈ°
function printInfo(obj) {
    for (let key in obj) {
        console.log(`${key}: ${obj[key]}`);
    }
}

printInfo({ name: "영희", age: 30 });
// 좜λ ₯:// name: 영희// age: 30

6. λžŒλ‹€ ν•¨μˆ˜ (Lambda Functions)

λžŒλ‹€ ν•¨μˆ˜λŠ” 읡λͺ… ν•¨μˆ˜λ‘œ, 이름 없이 μ‚¬μš©ν•  수 μžˆλŠ” κ°„λ‹¨ν•œ ν•¨μˆ˜μ΄λ‹€. 주둜 μΌνšŒμ„± ν•¨μˆ˜λ‚˜ μ½”λ“œκ°€ 짧을 λ•Œ μ‚¬μš©ν•œλ‹€. lambda ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©°, ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜κ°’μ„ κ°„λ‹¨νžˆ μ •μ˜ν•  수 μžˆλ‹€.

# λžŒλ‹€ ν•¨μˆ˜ μ˜ˆμ‹œ
square = lambda x: x ** 2
print(square(5))  # 좜λ ₯: 25

# 일반 ν•¨μˆ˜λ‘œ μž‘μ„±ν•œ 경우
def square_fn(x):
    return x ** 2

print(square_fn(5))  # 좜λ ₯: 25
  • lambda x : xλŠ” λ§€κ°œλ³€μˆ˜. ν•¨μˆ˜μ˜ 인자λ₯Ό μ˜λ―Έν•œλ‹€.
  • x ** 2 : **λŠ” 제곱 μ—°μ‚°μžλ‘œ, x의 μ œκ³±μ„ κ³„μ‚°ν•œλ‹€. λ”°λΌμ„œ xκ°€ 5라면 x ** 2λŠ” 5 ** 2κ°€ λ˜μ–΄ 25κ°€ λœλ‹€.
  • x ** 3은 x의 μ„Έμ œκ³±μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 즉, xλ₯Ό 3번 κ³±ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. x**3은 125(5의 μ„Έμ œκ³±)κ°€ λœλ‹€.
λ°˜μ‘ν˜•

+ Recent posts