πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[2νŒ€/κΉ€μ„Έμ—°] 5μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - ν•¨μˆ˜

μ•Œ 수 μ—†λŠ” μ‚¬μš©μž 2023. 4. 5. 13:21

5μ°¨μ‹œ_ν•¨μˆ˜_κ°•μ˜μ•ˆ.pdf
0.99MB
5μ°¨μ‹œ_ν•¨μˆ˜_과제.pdf
0.16MB

ν•¨μˆ˜κΈ°μ΄ˆ

기초
-ν•¨μˆ˜
:μ–΄λ–€ 일을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œμ˜ 덩어리, μ½”λ“œμ˜ 묢음

-ν•¨μˆ˜μ˜ μž₯점
: ν•„μš”ν•  λ•Œλ§ˆλ‹€ 호좜 κ°€λŠ₯
(반볡적으둜 μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” 업무λ₯Ό ν•œ 번만 μž‘μ„±ν•΄ 놓고 ν•„μš”ν•  λ•Œλ§ˆλ‹€ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©)

:μ½”λ“œμ˜ μΊ‘μŠν™”
μΈν„°νŽ˜μ΄μŠ€λŠ” μ½”λ“œμ— μž…λ ₯ λ˜λŠ”κ°’κ³Ό μˆ˜ν–‰ 결과인 좜λ ₯값을 λͺ…ν™•νžˆ ν•œλ‹€λŠ” 것
(ν”νžˆ λΈ”λž™λ°•μŠ€λΌκ³ λ„ ν•˜λŠ”λ°, μΈν„°νŽ˜μ΄μŠ€κ°€ 잘 μ •μ˜λœ ν•¨μˆ˜λΌλ©΄ μ½”λ“œμ˜ λ‚΄λΆ€ ꡬ쑰λ₯Ό λͺ°λΌλ„ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” λ°μ—λŠ” 아무 λ¬Έμ œκ°€ μ—†μŒ)

-ν•¨μˆ˜μ˜ μ„ μ–Έ


1) defλŠ” ‘definition’의 μ€„μž„λ§λ‘œ ν•¨μˆ˜ μ •μ˜ μ‹œμž‘μ„ 의미

 

2)ν•¨μˆ˜μ΄λ¦„ (일반적으둜 λ”°λ₯΄λŠ” κ·œμΉ™μ΄ 쑴재)
:μ†Œλ¬Έμž μž…λ ₯, 띄어쓰기 λŒ€μ‹  _기호 μ‚¬μš©
:동사와 λͺ…사λ₯Ό ν•¨κ»˜ μ‚¬μš© (ex.find_number)
:μ€„μž„λ§λ³΄λ‹¨ 짧고 λͺ…λ£Œν•œ 이름 μ„€μ •

3)λ§€κ°œλ³€μˆ˜
:ν•¨μˆ˜μ—μ„œ μž…λ ₯κ°’μœΌλ‘œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ₯Ό μ˜λ―Έν•˜λ©°, 1개 μ΄μƒμ˜ 값을 적을 수 있음

4)λͺ…λ Ήλ¬Έ
:λ°˜λ“œμ‹œ λ“€μ—¬μ“°κΈ°ν•œ ν›„ μ½”λ“œλ₯Ό μž…λ ₯ν•΄μ•Ό 함.
μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” μ½”λ“œλŠ” 일반적인 μ½”λ“œμ™€ κ°™μŒ.
ifλ‚˜ forλ¬Έ λ“±μ˜ μ œμ–΄λ¬Έμ„ μ‚¬μš©ν•  μˆ˜λ„ 있고, κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ° 기법 으둜 ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ°λ„ 함

 

def calculate_rectangle_area(x, y)
return x * y


ν•¨μˆ˜λͺ…은 calculate_rectangle_area이고,
x와 yλΌλŠ” 2개의 λ§€κ°œλ³€μˆ˜ μ‚¬μš©, return은 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

-ν•¨μˆ˜μ˜ μ‹€ν–‰ μˆœμ„œ

def calculate_rectangle_area(x, y):
return x * y

rectangle_x = 10
rectangle_y = 20
print("μ‚¬κ°ν˜• x의 길이:", rectangle_x)
print("μ‚¬κ°ν˜• y의 길이:", rectangle_y)

 #넓이λ₯Όκ΅¬ν•˜λŠ”ν•¨μˆ˜ 호좜
print("μ‚¬κ°ν˜•μ˜ λ„“μ΄οΌš", calculate_rectangle_area(rectangle_x, rectangle_y))

 

1행은 ν•¨μˆ˜κ°€ μ •μ˜λœ def뢀뢄은 μ‹€ν–‰ μ•ˆλ¨ / ν•¨μˆ˜λ§Œ νŒŒμΌμ— μ €μž₯ν•˜κ³  별도 좜λ ₯X

아무것도 μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” 것 κ°™μ§€λ§Œ, μ‹€μ œλ‘œ ν•΄λ‹Ή μ½”λ“œλ₯Ό λ©”λͺ¨λ¦¬μ— μ—…λ‘œλ“œν•΄,
λ‹€λ₯Έ μ½”λ“œλ₯Ό ν˜ΈμΆœν•΄ μ“Έμˆ˜ μžˆλŠ” μ€€λΉ„κ³Όμ •μž„ (맨 λ§ˆμ§€λ§‰μ— μ •μ˜ν•˜λ©΄ 였λ₯˜λ‚¨)

 

-ν•¨μˆ˜μ˜ ν˜•νƒœ

λ§€κ°œλ³€μˆ˜μ™€ λ³€ν™˜κ°’ μœ λ¬΄μ— 따라 4κ°€μ§€λ‘œ ꡬ뢄

 

#λ§€κ°œλ³€μˆ˜X λ°˜ν™˜κ°’X
#λ°˜ν™˜κ°’μ΄ μ—†κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ μžμ²΄λŠ” none값을 가짐
def a_rectangle_area():
    print(5 * 7)


#λ§€κ°œλ³€μˆ˜O λ°˜ν™˜κ°’X
def b_rectangle_area(x, y):
    print(x * y)

#ν•¨μˆ˜ μ•ˆμ— printκ°€ μžˆλŠ” 것이 μ•„λ‹Œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ printλ₯Ό μ‚¬μš©
#>return이 μžˆλŠ” 경우 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” κ³³μ—μ„œ ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ„ λ³€μˆ˜μ— ν• λ‹Ή 

#λ§€κ°œλ³€μˆ˜X λ°˜ν™˜κ°’O
def c_rectangle_area():
    return(5 * 7)

#λ§€κ°œλ³€μˆ˜O λ°˜ν™˜κ°’O
def d_rectangle_area(x ,y):
    return(x * y)

a_rectangle_area()
b_rectangle_area(5, 7)
print(c_rectangle_area())
print(d_rectangle_area(5, 7))

35
35
35
35

#λͺ¨λ‘ 35λΌλŠ” 같은 κ°’μ΄μ§€λ§Œ , ν•¨μˆ˜μ˜ ν˜•νƒœμ— 따라 μ‚¬μš© 방법이 닀름

 

ν•¨μˆ˜ 심화

심화

-ν•¨μˆ˜μ˜ ν˜ΈμΆœλ°©μ‹

 

:λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” λ³€μˆ˜κ°€ μ €μž₯λ˜λŠ” 곡간을 κ°€λ₯΄ν‚΄

: κ·Έ 곡간 μžμ²΄μ— μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜λ©΄,κ·Έ 곡간을 가리킀고 μžˆλŠ” λ‹€λ₯Έ λ³€μˆ˜μ—λ„ 영ν–₯을 쀌


>νŒŒμ΄μ¬μ€ 객체의 μ£Όμ†Œκ°€ ν•¨μˆ˜λ‘œ λ„˜μ–΄κ°„λ‹€λŠ” 뜻의 객체 호좜 방식을 μ‚¬μš©ν•¨

 

νŒŒμ΄μ¬μ—μ„œ 객체의 μ£Όμ†Œλ₯Ό ν•¨μˆ˜λ‘œ λ„˜κΈ°κΈ° λ•Œλ¬Έμ— μ „λ‹¬λœ 객체의 값에 변경이 μžˆμ„ 경우,

(=즉 μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜κ±°λ‚˜ ν•΄λ‹Ή 객체λ₯Ό μ§€μšΈ λ•ŒλŠ”)

영ν–₯을 주지 μ•Šμ§€λ§Œ, λ‹¨μˆœνžˆ ν•΄λ‹Ή 객체 에 값을 μΆ”κ°€ν•  λ•ŒλŠ” 영ν–₯을 쀌

 

def spam(eggs):
    eggs.append(1)
    eggs=[2,3]

ham =[0]
spam(ham)
print(ham)

[0,1]

 

-λ³€μˆ˜μ˜ μ‚¬μš©λ²”μœ„

:λ³€μˆ˜κ°€ μ½”λ“œμ—μ„œ μ‚¬μš©λ˜λŠ” λ²”μœ„λ₯Ό 말함

ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  것인지, λ˜λŠ” ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©ν•  것인지 κ·Έ λ²”μœ„λ₯Ό κ²°μ •ν•˜λŠ” κ·œμΉ™μ„ λœ»ν•¨

 

-지역 λ³€μˆ˜: ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©

-μ „μ—­ λ³€μˆ˜: ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©

 

def test(t):
    print(x)
    t =20
    print("In Function:", t)
#xμ„ μ–Έ μ•ˆν•¨, tμ„ μ–Έ 함

#μ—¬κΈ°λΆ€ν„° μ‹œμž‘
x = 10
test(x)
print("In Main:", x)
print("In Main:", t)


#xλŠ” ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©ν•˜λŠ” μ „μ—­λ³€μˆ˜ (ν•¨μˆ˜ λ‚΄μ—μ„œ μž¬μ •μ˜ μ•ˆν–ˆμŒ)
10
In function: 20
In Main: 10

#μ—λŸ¬
Traceback (most recent call last):
File "scoping_rule.py", line 9, in <module>
print("In Main:", t)
NameError: name 't' is not defined
#μ—λŸ¬κ°€ λ‚œ μ΄μœ λŠ” TλŠ” ν•¨μˆ˜λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” μ§€μ—­λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμž„
def f():
    s = "I love London!"
    print(s)

s = "I love Paris!"
f()
print(s)

I love London!
I love Paris!

#ν•¨μˆ˜ 내뢀와 외뢀에 μžˆλŠ” λ³€μˆ˜sλŠ” 같은 μ΄λ¦„μ΄μ§€λ§Œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬ μ£Όμ†ŒμΈ λ‹€λ₯Έ λ³€μˆ˜
#μ„œλ‘œ 영ν–₯ μ•ˆμ€Œ
def f():
    global s
    s ="I love London!"
    print(s)

s = "I love Paris!"
f()
print(s)

I love London!
I love London!

#ν•¨μˆ˜ 내뢀와 μ™ΈλΆ€μ˜ λ³€μˆ˜λ₯Ό 같은 λ©”λͺ¨λ¦¬μ— λ‘ν˜€λ©΄ μ „μ—­λ³€μˆ˜ μ„ μ–Έν•˜λ©΄ 됨 > global
#ν•¨μˆ˜ λ‚΄μ™ΈλΆ€ 같은 λ©”λͺ¨λ¦¬μ£Όμ†Œ

-μž¬κ·€ν•¨μˆ˜

:자기 μžμ‹ μ„ λ‹€μ‹œ ν˜Έμ€„ν•˜λŠ” ν•¨μˆ˜ - μˆ˜ν•™μ˜ 점화식과 같은 ν˜•νƒœ

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(int(input("Input Number for Factorial Calculation: ")))

Input Number for Factorial Calculation: 5
120

μž¬κ·€ν•¨μˆ˜μ˜ κΈ°λ³Έ ꡬ쑰: μ’…λ£Œμ‘°κ±΄, 단계별 λ°˜ν™˜ (=반볡문(forλ¬Έκ³Ό whileλ¬Έκ³Ό λΉ„μŠ·)으둜 ν‘œν˜„κ°€λŠ₯)

>μž¬κ·€ν•¨μˆ˜λŠ” κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ¨Έλ‘œ 갈수둝 자주 μ ‘ν•˜κ²Œ 됨

ν•¨μˆ˜μ˜ 인수

:ν•¨μˆ˜μ˜ μž…λ ₯으둜 λ“€μ–΄κ°€λŠ” λ³€μˆ˜μ˜ λ‹€μ–‘ν•œ ν˜•νƒœ

 

  • 인수의 μ’…λ₯˜
    -ν‚€μ›Œλ“œ 인수
    : ν•¨μˆ˜μ— μž…λ ₯λ˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ λ³€μˆ˜λͺ…을 μ‚¬μš©ν•΄ ν•¨μˆ˜μ˜ 인수λ₯Ό μ§€μ •ν•˜λŠ” 방법

def print_something(my_name, your_name):
    print("Hello {0}, My name is {1}".format(your_name, my_name))

#print_somethingμ΄λΌλŠ” ν•¨μˆ˜λŠ” (my_name, your_name)λΌλŠ” μΈν„°νŽ˜μ΄μŠ€ 가짐 

#λ³€μˆ˜μ— 값을 ν• λ‹Ή
print_Something("Sungchul", "TEAMLAB")
print_something(your_name = "TEAMLAB", my_name = "Sungchul")


Hello TEAMLAB, My name is Sungchul
Hello TEAMLAB, My name is Sungchul

-λ””ν΄νŠΈ 인수

:λ§€κ°œλ³€μˆ˜μ— 기본값을 μ§€μ •ν•˜μ—¬ μ‚¬μš©ν•˜κ³ , μ•„λ¬΄λŸ° 값도 인수둜 λ„˜μ–΄κ°€μ§€ μ•Šμ„ λ•Œ μ§€μ •λœ 기본값을 μ‚¬μš©ν•˜λŠ” 방식

 

#μΈν„°νŽ˜μ΄μŠ€ μ •μ˜, your_name의 기본값은 'TEAMLAB'으둜 지정
def print_something_2(my_name, your_name = "TEAMLAB"):
    print("Hello {0}, My name is {l}".format(your_name, my_name))

print_something_2("Sungchul", "TEAMLAB")
print_something_2("Sungchul")

Hello TEAMLAB, My name is Sungchul
Hello TEAMLAB, My name is Sungchul

-κ°€λ³€μΈμˆ˜ (λ§€κ°œλ³€μˆ˜μ˜ 개수λ₯Ό μ •ν•˜μ§€ μ•Šμ•„μ•Ό ν•˜λŠ” 경우)

:기본적으둜 κ³±μ…ˆ λ˜λŠ” 제곱 연산외에도 λ³€μˆ˜λ₯Ό λ¬Άμ–΄μ£ΌλŠ” κ°€λ³€ 인수λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•¨

 

#*argsλŠ” κ°€λ³€μΈμˆ˜
def asterisk_test(a, b, *args):
    return a + b + sum(args)

print(asterisk_test(l, 2, 3, 4, 5))

15

 

def asterisk_test(a, b, *args):
    print(args)

print(asterisk_test(l, 2, 3, 4, 5))

(3,4,5) # νŠœν”Œ μžλ£Œν˜•
NONE
def asterisk_test_2(*args):
    x, y, *z = args # μž…λ ₯ 박은 κ°€λ³€ 인수의 개수λ₯Ό μ•ˆλ‹€λ©΄ μ–ΈνŒ¨ν‚Ή κ°€λŠ₯
    return x, y, z

print(asterisk_test_2(3, 4, 5))

(3,4,[5])

 

def asterisk_test_2(*args):
    x, y, *z = args # μž…λ ₯ 박은 κ°€λ³€ 인수의 개수λ₯Ό μ•ˆλ‹€λ©΄ μ–ΈνŒ¨ν‚Ή κ°€λŠ₯
    return x, y, z

print(asterisk_test_2(3, 4, 5))

(3,4,[5])

-ν‚€μ›Œλ“œ κ°€λ³€ 인수

:κ°€λ³€ μΈμˆ˜λŠ” λ³€μˆ˜μ˜ μˆœμ„œλŒ€λ‘œ νŠœν”Œν˜•νƒœλ‘œ μ €μž₯

 

μ‚¬μš©ν•  λ•ŒλŠ” 맀우 κ°„λ‹¨ν•˜μ§€λ§Œ λ³€μˆ˜μ˜ 이름을 지정할 수 μ—†λ‹€λŠ” 단점

단점을 λ³΄μ™„ν•˜λŠ” 방법이 ν‚€μ›Œλ“œ κ°€λ³€ 인수

νŠœν”Œμ΄ μ•„λ‹Œ λ”•μ…”λ„ˆλ¦¬ μžλ£Œν˜•(쌍으둜 μ €μž₯)

 

ν‚€μ›Œλ“œ κ°€λ³€ μΈμˆ˜λŠ” λ°˜λ“œμ‹œ λ§€κ°œλ³€μˆ˜μ˜ 맨 λ§ˆμ§€λ§‰, κ°€λ³€μΈμˆ˜ λ‹€μŒμ— μ„ μ–Έλ˜μ–΄μ•Ό 함

(λ§€κ°œλ³€μˆ˜μ˜ 이름을 λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šκ³  μž…γ…Žλ ₯ν•˜λŠ” 이번 κ°€λ³€μΈμˆ˜, *2개λ₯Ό μ΄μš©ν•΄ λ§€κ°œλ³€μˆ˜ ν‘œμ‹œ)

 

def kwargs_test(**kwargs):
    print(kwargs)
    print("First value is {first}".format(**kwargs))
    print("Second value is {second}".format(**kwargs))
    print("Third value is {third}".format(**kwargs))

kwargs_test(first =3, second =4, third = 5)


{'first': 3, 'second': 4, 'third': 5} # λ”•μ…”λ„ˆλ¦¬ μžλ£Œν˜•
First value is 3
Second value is 4
Third value is 5