μš”μ•½


1. λ„€μž„μŠ€νŽ˜μ΄μŠ€

μ •μ˜ 및 ν™œμš©

  • μ •μ˜: 개체λ₯Ό ꡬ뢄할 수 μžˆλŠ” λ²”μœ„
  • ν™œμš©: κ°μ²΄λ§ˆλ‹€ μžμ‹ μ˜ 영ν–₯λ ₯을 행사할 수 μžˆλŠ” λ²”μœ„λ₯Ό μ œν•œν•˜μ—¬ μ΄λ¦„μ˜ 쀑볡을 ν—ˆμš©

1.1 κ°œμš”

Python은 λͺ¨λ“  것이 객체둜 κ΅¬μ„±λ˜μ–΄ 있으며, 각자의 이름을 κ°€μ§€κ³  μžˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λ¦„λ§ŒμœΌλ‘œ 각 객체듀을 κ΅¬λΆ„μ§“κΈ°μ—λŠ” κ°μ²΄λ“€μ˜ μ’…λ₯˜κ°€ λ„ˆλ¬΄ λ§Žλ‹€. 예λ₯Ό λ“€μ–΄, ν•¨μˆ˜, λ³€μˆ˜, 클래슀 λ“± μ΄λŸ¬ν•œ κ°μ²΄λ“€μ˜ 이름을 λ”°λ‘œ κ΅¬λΆ„μ§“λŠ” 것은 λΉ„νš¨μœ¨μ μ΄λ‹€.

λ”°λΌμ„œ, λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό 톡해 객체의 영ν–₯λ ₯ λ²”μœ„λ₯Ό μ œν•œν•˜μ—¬ μ΄λ¦„λ§ŒμœΌλ‘œ κ΅¬λΆ„μ§“λŠ” ν•œκ³„λ₯Ό λ³΄μ™„ν•œλ‹€.

1.2 ν™œμš©

μ•„λž˜μ™€ 같이 ν•¨μˆ˜ func1 와 func2 μ•ˆμ˜ λ³€μˆ˜ name은 μ€‘λ³΅λ˜μ§€λ§Œ κ·Έ 영ν–₯λ ₯은 각 ν•¨μˆ˜μ— μ’…μ†λ˜μ–΄μžˆμœΌλ©°, ν•¨μˆ˜ κ°„ 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€.

def func1():
	name = 'HYUN'
def func2():
	name = 'SON'

이처럼 λ„€μž„μŠ€νŽ˜μ΄μŠ€λ“€μ€ locals() ν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œ 확인이 κ°€λŠ₯ν•˜μ—¬ 크게 3κ°€μ§€λ‘œ κ΅¬λΆ„λœλ‹€.

  1. μ§€μ—­ λ„€μž„μŠ€νŽ˜μ΄μŠ€(Local namespace): ν•¨μˆ˜(λ©”μ†Œλ“œ) λ³„λ‘œ κ΅¬λΆ„λ˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€
  2. κΈ€λ‘œλ²Œ λ„€μž„μŠ€νŽ˜μ΄μŠ€(Global namespace): λͺ¨λ“ˆ λ‹¨μœ„λ‘œ κ΅¬λΆ„λ˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€
  3. 빌트인 λ„€μž„μŠ€νŽ˜μ΄μŠ€(Built-in namespace): λ‚΄μž₯ ν•¨μˆ˜ ν¬ν•¨ν•œ 전체 μ½”λ“œ λ„€μž„μŠ€νŽ˜μ΄

객체λ₯Ό μ°Έκ³ ν•˜λŠ” μˆœμ„œλŠ” Local -> Global -> Built-in 순으둜 νƒμƒ‰ν•˜μ§€λ§Œ, μ—­μˆœ μ°Έμ‘°λŠ” λΆˆκ°€λŠ₯ν•˜λ‹€.

μ•„λž˜μ™€ 같이 ν•¨μˆ˜ WhoIsGoat 내뢀에 wordλΌλŠ” κ°μ²΄λŠ” λͺ…μ‹œλ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— κ·Έ λ‹€μŒ 탐색 μˆœμ„œμΈ λͺ¨λ“ˆ λ‹¨μœ„λ‘œ νƒμƒ‰ν•˜μ—¬ μ „μ—­(global) λ³€μˆ˜μ΄ wordλ₯Ό μ°Ύμ•„ 좜λ ₯ν•œλ‹€.

word = 'Shohei Ohtani'
 
def WhoIsGoat():
	print(word)
 
WhoIsGoat()
# "Shohei Ohtani"

2. μ‚¬μš© 이유?

__name__ 의 νŠΉμ§•μ€ __main__μ΄λΌλŠ” κ°’(λ„€μž„μŠ€νŽ˜μ΄μŠ€)으둜 μ„€μ •λ˜μ–΄ μžˆλ‹€.

print(__name__) # output: __main__

κ·ΈλŸ¬λ‚˜ .py νŒŒμΌμ„ λͺ¨λ“ˆλ‘œμ„œ λΆˆλŸ¬μ™€ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” __name__은 λͺ¨λ“ˆμ΄λ¦„을 λ°˜ν™˜ν•œλ‹€.

import numpy
 
print(numpy.__name__) # output: numpy

λ”°λΌμ„œ, if __name__ == "__main__"의 μ˜λ―ΈλŠ” ν•΄λ‹Ή ꡬ문이 μ‚¬μš©λœ 파이썬 νŒŒμΌμ„ 직접 μ‹€ν–‰ν•  λ•Œλ§Œ μ•„λž˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€. 즉, λ‹€λ₯Έ 파이썬 νŒŒμΌμ—μ„œ λͺ¨λ“ˆμ„ λΆˆλŸ¬μ™”μ„ λ•Œ ν•΄λ‹Ή ꡬ문 μ•„λž˜ μ½”λ“œλŠ” μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.

예λ₯Ό λ“€μ–΄, main.py 파일 λ‚΄μ—μ„œ example.py import만 ν–ˆμ„ 뿐인데, print 문이 좜λ ₯λ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

# example.py
print("Hello world!")
 
# main.py
import example
print("I'm not feeling well")
# output
# "Hello World"
# "I'm not feeling well"

λ”°λΌμ„œ, 이λ₯Ό λ°©μ§€ν•˜κ³ μž μ•„λž˜μ™€ 같이 μ½”λ“œκ°€ μž‘μ„±λœλ‹€. 이λ₯Ό ν†΅ν•΄μ„œ exampleλ₯Ό import 해도 print문이 좜λ ₯λ˜μ§€ μ•ŠλŠ”λ‹€!

# example.py
if __name__ == "__main__":
	print("Hello world!")
 
# main.py
import example
print("I'm not feeling well")
# output
# "I'm not feeling well"

μ°Έκ³ μ‚¬μ΄νŠΈ