λλ²κΉ (Debugging)
λ³΄ν΅ μλ¬κ° λ°μνλ μν©μ μ½λλ₯Ό μ€ννμ λμ λλ€. μ¦, λ€μκ³Ό κ°μ μν©μ΄ λ°μνμ£ :
- μ½λλ₯Ό μ€ν
- μλ¬κ° λ°μ
- μ½λ μ€ν μ’ λ£
- μλ¬ μμ
- μ½λκ° μ΄μ μμ΄ μλν λκΉμ§ 1λ²λΆν° 4λ² λ°λ³΅
κ·Έλ λ€λ©΄ μ½λ μ€νμ μ’
λ£νμ§ μκ³ μ μ μκ°μ λ©μΆλ― λ©μΆκ² ν μ μμκΉμ? μ΄ λ λ±μ₯νλ κ²μ΄ λ°λ‘ λλ²κΉ
python 3.7 μ΄μ λ²μ
import pdb
pdb.set_trace()
python 3.7 μ΄μ λ²μ
sum = 0
breakpoint() # print νκΈ° μ§μ μ μμ μμ λ©μΆ₯λλ€.
print(sum)
μμ κ°μ΄ λ©μΆ μνμμ νΉμ λ¨κ³λ₯Ό κ²ν νλ λ±μ λ€μν μμ
μ ν μ μμ΅λλ€.breakpoint()
λ₯Ό μ νμ©νλ©΄ κ΅μ₯ν νΈλ¦¬!
μΆκ°
class μμμ breakpoint νμ©
class Hi:
def __init__(self, first, second):
breakpoint()
self.first = first
self.second = second
def add(self):
return self.first + self.second
temp = Hi(2, 4)
temp.add() # λ©μλλ₯Ό νΈμΆν΄μΌ breakpoint() κ°λ₯
λν, assert ν¨μμ ν¨κ» μ¬μ©νμ¬ assert μ΄μ μ breakpoint()λ₯Ό κ±Έμ΄λκ³ Trueμ Falseλ₯Ό ꡬν΄λ³΄λ©΄ μ μ©
ν¨μ - μΈμ(Arguments)
- νμ μΈμ (required arguments): μμΉλ₯Ό μ§ν€λ©° μ λ¬λλ μΈμ
μμΉμ λ°λΌ μ λ¬λλ μΈμ, μμλ₯Ό μ§μΌμΌνλ©° ν¨μμμ νλΌλ―Έν°λ‘ μ μνκΈ° λλ¬Έμ νμλ‘ κ°μ λ겨주μ΄μΌ ν©λλ€.
def person_info(first_name, last_name):
print(f"Hello {first_name}, {last_name}!")
- ν€μλ μΈμ (keyword arguments): νλΌλ―Έν° μ΄λ¦μ μ¬μ©ν΄ μ λ¬λλ μΈμ
ν€μλλ₯Ό λͺ μνκΈ° λλ¬Έμ μμ μκ΄μ΄ μμ΅λλ€.
person_info(last_name="bob", first_name="sponge")
- κΈ°λ³Έ μΈμ (default arguments): νλΌλ―Έν°μμ κΈ°λ³ΈμΌλ‘ μ¬μ©λλ κ°
ν¨μμμ λ°κ² λλ νλΌλ―Έν° κ°λ€μ λν κΈ°λ³Έ κ°λ€μ μ€μ νκ² λλ€λ©΄, μΈμλ₯Ό λκΈ°μ§ μλ κ²½μ°μ κΈ°λ³Έκ°λ€μ΄ μ€μ λ©λλ€.
def person_data(name, type_p='human'):
print(f"Hello {name}, you are {type_p}")
ν¨μ - Return (vs Print)
def print_hello_1(name):
print(f"Hello {name}")
return None
# μμ μ΄λ κΈ°λ³Έμ μΌλ‘ λ€μ΄κ°μμ΅λλ€.
# printλ¬Έμ print ν΄λ³΄λ©΄ None κ°λ ν¨κ» μΆλ ₯λ©λλ€. μ¦, print κ°μ²΄ μμ²΄κ° κ°κ² λλ κ°μ
λλ€.
return
μ ν¨μλ₯Ό μ’
λ£νκ³ νΈμΆμμκ² μ¦κ° κ°μ μ λ¬ν©λλ€.
ν΄λμ€(Class) -> μ λλ‘ μμλ κ²
νμ΄μ¬μ μλ λ°©μ : κ³ κΈ μ€ν¬λ¦½νΈ λ°©μ
νμ΄μ¬ μΈμ΄ μ€κ³ : κ°μ²΄μ§ν₯μΈμ΄ κΈ°λ° μ¦, νμ΄μ¬μμλ λͺ¨λ κ²μ΄ κ°μ²΄
μ
λλ€. μ΄λ° κ°μ²΄
λ₯Ό λ€λ£¨κΈ° μν΄ ν΄λμ€
λ₯Ό κΌ μμμΌ ν©λλ€.
κ°μ²΄μ§ν₯μΈμ΄
- λκ·λͺ¨ νλ‘κ·Έλ¨μ μ€κ³λ₯Ό μν΄ λ§λ€μ΄μ§ λ°©λ²λ‘
- κ°λ¨νκ² μκ°νλ©΄ μ€κ³λλ₯Ό λ§λ€κ³ κ·Έ μ€κ³λμ λ§κ² μ¬λ¬ 건물μ μ°μ΄λ΄λ λ°©μμ΄λΌκ³ μκ°νλ©΄ νΈν©λλ€.
- νμ΄μ¬μ ν΄λμ€μλ ν¨μμ μμ± λκ°μ§λ₯Ό μ λΆ λ΄μ μ μμ΅λλ€. κ·Έλ κΈ°μ λ€μν μ 보μ κΈ°λ₯λ€μ λ¬Άμ΄μ μ¬μ© κ°λ₯ν©λλ€.
ν΄λμ€ μμ±
class Pokemon:
pokemon_a = "pikachu"
def print_pika():
print("Hello Pika")
μμ μ½λμμ, defλ‘ μ μλ λΆλΆμ λ©μλ(ν΄λμ€ λ΄μ ν¨μ)λΌκ³ λΆλ¦ λλ€.
temp = Pokemon()
temp.print_pika()
μ¬κΈ°μ temp
λ νλμ κ°μ²΄κ° λκ³ , Pokemon ν΄λμ€(μ€κ³λ)μ μΈμ€ν΄μ€(μ€κ³λ 건물)κ° λ©λλ€.
temp.print_pika() λ ν΄λμ€ λ΄λΆμ print_pika() λ©μλλ₯Ό μ€νμν€κ² λλλ°
temp.print_pika()λ‘ λ©μλλ₯Ό νΈμΆνλ μκ° 'temp' λ³ΈμΈμ΄ print_pika()μ μΈμλ‘ λ€μ΄κ°κ² λ©λλ€.
μ¦, μ€ννλ©΄ tempλΌλ μΈμλ₯Ό νλ 보λ΄κΈ΄ νλλ°, print_pika()λ ν¨μλ 보λ κ²μ²λΌ λ°μ μ μλ μΈμ μλ¦¬κ° μμ
λ°λΌμ μλ¬κ° λ°μ
-> μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ±μ₯ν 'self'
class Pokemon:
pokemon_a = "pikachu"
def print_pika(self):
print("Hello Pika")
μμ κ°μ΄ self
λ₯Ό λ£μ΄μ£Όλ©΄ λ©μλμ μλ¦¬κ° μκΈ°κ² λκ³ , selfμλ temp μμ²΄κ° λ°μμ΄ λ©λλ€. λ¨, class λ΄μμλ§ self = temp λ‘ μ μκ° λμ΄μλ κ²μ
λλ€.
μμ±μ ν¨μ
ν΄λμ€μ μλ ν¨μ μ€ νΉλ³ν ν¨μλ€μ΄ λͺκ°μ§ μ‘΄μ¬.(μ£Όλ‘ λλΈ μΈλλ°λ‘ μμ¬μμ)
κ·Έ μ€, μμ±μ ν¨μ(init)λ ν΄λμ€κ° μΈμ€ν΄μ€νλ λ μ¬μ©λλ ν¨μμ
λλ€.
class Pokemon:
def __init__(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
temp = Pokemon(2, 4) # λ¨Όμ μΈμκ°μ λ£μ΄μ£Όλ©΄ init μ μν΄μ μμμ λ³μ μ€μ μ΄ λ¨
temp.add() # 6
μμ μλ μ½λλ₯Ό λΉκ΅ν΄λ³΄λ©΄ __init__
μ μν μ νμ
ν μ μμ
class Pokemon:
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
temp = Pokemon()
temp.setdata(2, 4) # λ°λ‘ λ³μ μ€μ μ ν΄μ€μΌν¨ λ§μΉ, λ¨Έμ λ¬λ λ fit ν¨μ νΈμΆνλ λλ
temp.add()
μ΄μ²λΌ μ¬μ μ νμ΄μ¬μμ μ΄λ μ λμ λͺ λ Ήμ μ μν΄λ λ©μλλ€μ΄ μ‘΄μ¬
_
(Single UnderScore ; single underbar) μ __
(Double UnderScore - DunderScore ; double underbar)
μμ μμ±μ ν¨μλͺ
μ΄ __init__
μ΄μλ€λ©΄ μ λ€λ‘ λΆμ μΈλλ°λ μ΄λ€ μλ―Έ?
- μ£Όλ‘ λ³μλ ν¨μμ νΉλ³ν μλ―Έλ₯Ό λΆμ¬ν λ μ¬μ©
- μμ±μ ν¨μλ 'ν΄λμ€λ₯Ό ν΅ν΄μ μΈμ€ν΄μ€λ₯Ό μμ±νκ² ν΄μ£Όλ νΉλ³ν μ©λμ ν¨μ'μ΄κΈ° λλ¬Έμ μλ€λ‘ λ κ°μ μΈλλ° μ¬μ©
Single UnderScore
- νμ΄μ¬ ν΄λμ€ λ΄λΆμμ λ°λ‘ λ³μλ κ°μ μ μ₯ν λ μ¬μ©
- ν΄λμ€ λ΄λΆ λ³μλ κ°μΌλ‘ μ¬μ©νλλΌλ
νμ΄μ¬μμλ
μΈλΆμμ μ κ·Ό κ°λ₯
class Pokemon:
_health = 100
def __init__(self, a='pikachu'):
self.pokemon_a = a
poke_a = Pokemon()
print(poke_a._health) #=> 100
Double UnderScore(DunderScore)
- νμ΄μ¬ ν΄λμ€ λ΄λΆμμλ§ κ΄λ¦¬νλλ‘ λ°μ€μ 2κ° μ¬μ©
class Pokemon:
__health = 100
def __init__(self, a='pikachu'):
self.pokemon_a = a
poke_a = Pokemon()
print(poke_a.__health) #=> ERROR λ°μ
μ΄λ νμ΄μ¬μ Name Mangling
μΌλ‘ λ°μνλ μν©
λ°μ€μ 2κ° μ¬μ©νκ² λλ©΄ μ ν΄μ€ μ΄λ¦μ μ¬μ©νμ§ μκ³ _<ν΄λμ€ μ΄λ¦>__<λ³μ νΉμ ν¨μ μ΄λ¦>
μΌλ‘ λ³κ²½λ©λλ€.
μ¦, κ²°κ΅μ
class Pokemon:
__health = 100
def __init__(self, a='pikachu'):
self.pokemon_a = a
poke_a = Pokemon()
print(poke_a._Pokemon__health) #=> 100 μΆλ ₯λ¨
μμ κ°μ΄ μμ±νλ©΄ μμ single under scoreμ κ°μ κ°μ λ΄κ² λ©λλ€.
μ¦, νμ΄μ¬μμλ μΈλΆμμ μ κ·Όμ νλ€κ² ν μλ μμ§λ§ μ¨μ ν privateμ κ°λ μ΄ μμ΅λλ€.
μ¬μ©μλ€μ μ΄λ κ² λ°μ€μ΄ μ‘΄μ¬νλ κ°λ€μ λ μ‘°μ¬ν λ€λ£¨κ² λμ£ . νμ§λ§ μ묡μ μΌλ‘ λμνλ λΆλΆμΈ λ§νΌ κ°μ λλ κ²μ μμ΅λλ€.
κ΄λ ¨ν΄μ μ½μ΄λ³΄λ©΄ μ’μ λ΄μ© : μ½λ© 컨벀μ
'πΏ Data > λΆνΈμΊ ν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TIL]54. API (0) | 2022.01.27 |
---|---|
[TIL]53. Web_Scraping (0) | 2022.01.27 |
[TIL]51. Section3_sprint1_challenge (0) | 2022.01.24 |
[TIL]50.DB_ API (0) | 2022.01.21 |
[TIL]49_Transaction(BEGIN, COMMIT/ROLLBACK)_ACID (0) | 2022.01.20 |