Code about AI/Python

λ¬Έμžμ—΄μ„ 더 λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©ν•  μˆ˜λŠ” μ—†μ„κΉŒ? (Raw String, docstring, λ¬Έμ„œν™”)

도비(Doby) 2024. 5. 4. 11:40

πŸ€” Problem

였늘 ν¬μŠ€νŒ…μ€ μ–΄λ–€ λ¬Έμ œμ μ„ κ²ͺμ—ˆλ‹€κΈ°λ³΄λ‹€λŠ” μƒˆλ‘œμš΄ 것을 λ°œκ²¬ν•œ κ²ƒμ—μ„œ μ‹œμž‘ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. 많이 μ ‘ν•œ λ¬Έλ²•μ΄μ§€λ§Œ, 이것이 무엇인지 μ–΄λ–»κ²Œ ν™œμš©ν•  수 μžˆλŠ”μ§€λ₯Ό 닀루어보렀 ν•©λ‹ˆλ‹€.

 

μ˜€ν”ˆμ†ŒμŠ€λ₯Ό 보면, 이런 μ½”λ“œλ“€μ„ 많이 보게 λ©λ‹ˆλ‹€.

class Model(nn.Module):
    r"""
    param(1): ~~~ν•  λ•Œ, ~~~둜 μ§€μ •
    param(2): ~~~ν•  λ•Œ, ~~~둜 μ§€μ •
    """

    def __init__(self, param1, param2):
        super().__init__()

 

처음 νŒŒμ΄μ¬μ„ 곡뢀할 λ•ŒλŠ” λ”°μ˜΄ν‘œλ₯Ό 3번 μ“°λŠ” 것이 μ—¬λŸ¬ 쀄 μ£Όμ„μ΄λΌλŠ” κ°œλ…μœΌλ‘œ μ•Œκ³  μžˆμ—ˆμ§€λ§Œ, μ‹œκ°„μ΄ μ§€λ‚˜μ„œ λ‹€μ‹œ μ €κ±Έ 찾아봀을 λ•ŒλŠ” docstring이라 뢈리고 μžˆμ—ˆκ³ , λ¬Έμžμ—΄ μ•žμ— λΆ™λŠ” r은 Raw Stringμ΄λΌλŠ” 것을 μ˜λ―Έν•˜λ”λΌκ³ μš”.

 

κ·Έλž˜μ„œ, 이 두 κ°€μ§€ κ°œλ…μ΄ μ–΄λ–€ 것인지 기둝을 해두렀고 ν•©λ‹ˆλ‹€.


πŸ˜€ Solution

1️⃣ docstring

docstring은 Documentation String의 μ€„μž„λ§μž…λ‹ˆλ‹€. 보톡 μ½”λ“œλ₯Ό λ¬Έμ„œν™”ν•  λ•Œ, 많이 μ‚¬μš©ν•©λ‹ˆλ‹€.

일반적으둜 μ˜€ν”ˆμ†ŒμŠ€μ˜ 클래슀, ν•¨μˆ˜, λͺ¨λ“ˆ, λ©”μ„œλ“œλΌλ©΄ λͺ¨λ‘ μ–΄λ–€ 역할을 ν•˜κ³ , μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ–΄λ–€ 것을 ν•„μš”λ‘œ ν•˜λŠ”μ§€ κ°€μ΄λ“œλΌμΈμ΄ ν•„μš”ν•©λ‹ˆλ‹€. docstring이 κ·Έ 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

 

docstring의 μœ„μΉ˜λŠ” 클래슀, ν•¨μˆ˜, λ©”μ„œλ“œλΌλ©΄ μ„ μ–Έ λ°”λ‘œ μ•„λž«μ€„μ— λ‚˜νƒ€λ‚΄κ³ , λͺ¨λ“ˆμ΄λΌλ©΄ μ½”λ“œμ˜ 첫 번째 쀄에 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

그리고, λ”°μ˜΄ν‘œλ₯Ό 3개 μ‚¬μš©ν•΄μ„œ λ‚˜νƒ€λ‚΄λ©΄ docstring 선언이 λλ‚©λ‹ˆλ‹€. 맀우 κ°„λ‹¨ν•΄μš”!

 

그러면, 이 docstring(λ¬Έμ„œ)λ₯Ό μ–΄λ–»κ²Œ ν™•μΈν• κΉŒμš”? 이것도 κ°„λ‹¨ν•©λ‹ˆλ‹€. docstring을 μž‘μ„±ν•œ λͺ¨λ“ˆ, 클래슀, ν•¨μˆ˜, λ©”μ„œλ“œμ—λŠ” __doc__μ΄λΌλŠ” 속성이 μƒκΉλ‹ˆλ‹€. 이 속성이 λ¬Έμ„œμ˜ λ‚΄μš©μ„ λ‹΄κ³  μžˆλŠ” λ¬Έμžμ—΄μ΄κΈ° λ•Œλ¬Έμ— κ·Έμ € 좜λ ₯만 ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

model = Model()

print(type(model.__doc__))
print(model.__doc__)
print(Model.__doc__)

#Output
<class 'str'>

    param(1): ~~~ν•  λ•Œ, ~~~둜 μ§€μ •
    param(2): ~~~ν•  λ•Œ, ~~~둜 μ§€μ •


    param(1): ~~~ν•  λ•Œ, ~~~둜 μ§€μ •
    param(2): ~~~ν•  λ•Œ, ~~~둜 μ§€μ •

그리고, λ§ˆμ§€λ§‰μœΌλ‘œ docstring의 νŠΉμ΄ν•œ 점이 ν•˜λ‚˜ μžˆμŠ΅λ‹ˆλ‹€.

docstring이 λ§Œμ•½μ— μ•„λž˜μ™€ 같이 μž‘μ„±λœ 경우λ₯Ό λ΄…μ‹œλ‹€.

class Model(nn.Module):
    """
    param(1): ~~~ν•  λ•Œ, ~~~둜 μ§€μ •
    param(2): ~~~ν•  λ•Œ, ~~~둜 μ§€μ •
    'str1 ' "str2"
        tab1
            tab2
    """

μ›λž˜μ˜ λ¬Έμžμ—΄μ„ 선언을 ν•˜λŠ” κ²½μš°μ—λŠ” 쀄 λ„˜κΉ€, λ”°μ˜΄ν‘œ, 곡백(νƒ­) κ΄€λ ¨ 문자λ₯Ό λ„£κΈ° μœ„ν•΄μ„œλŠ” λ°±μŠ¬λž˜μ‹œλ‘œ μ΄μŠ€μΌ€μ΄ν”„ 문자λ₯Ό λ‚˜νƒ€λ‚΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ, docstring은 그런 κ²ƒμœΌλ‘œ κ³ λ €ν•˜μ§€ μ•Šκ³ , 정말 ν•˜λ‚˜μ˜ λ¬Έμ„œμ²˜λŸΌ μž‘μ„±ν•˜λ©° μ΄μŠ€μΌ€μ΄ν”„ 문자 없이 κ·ΈλŒ€λ‘œ 좜λ ₯ν•  수 μžˆλ‹€λŠ” 점이 νŠΉμ΄ν•œ 점이자 λ¬Έμ„œν™”λ₯Ό ν•  λ•Œ νŽΈν•œ μ μž…λ‹ˆλ‹€.

 

(+ 그러면 'μ΄μŠ€μΌ€μ΄ν”„ 문자둜 λ‚˜νƒ€λ‚Έ 쀄 λ„˜κΉ€, λ”°μ˜΄ν‘œ, 곡백(νƒ­)은 λͺ» ν•˜λŠ” 것이냐?'라고 μ§ˆλ¬Έν•  수 μžˆμŠ΅λ‹ˆλ‹€. λͺ» ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ—¬μ „νžˆ κ·Έ κΈ°λŠ₯λ“€ λ˜ν•œ μˆ˜ν–‰μ„ ν•©λ‹ˆλ‹€.)

2️⃣ Raw String

docstring은 λ”°μ˜΄ν‘œ 3개둜 λ‚˜νƒ€λ‚Έλ‹€κ³  ν–ˆλŠ”λ°, 맨 μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” λ”°μ˜΄ν‘œ 3개 μ•žμ— rμ΄λΌλŠ” λ¬Έμžκ°€ λΆ™μŠ΅λ‹ˆλ‹€.

이것이 μ˜λ―Έν•˜λŠ” λ°”λŠ” docstring보닀 더 κ°„λ‹¨ν•˜λ©°, μ΄λŠ” Raw String을 μ˜λ―Έν•©λ‹ˆλ‹€.

 

Raw String의 r을 λ”°μ„œ λ‚˜νƒ€λ‚΄λŠ” ν‘œν˜„ν•œ λ¬Έλ²•μœΌλ‘œ, 'Raw Stringμ΄λž€ μ΄μŠ€μΌ€μ΄ν”„ 문자(λ°±μŠ¬λž˜μ‹œ)λ₯Ό μ „λΆ€ λ¬΄μ‹œν•œλ‹€'λŠ” 의미λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

 

μ˜ˆμ‹œλ₯Ό λ‚˜νƒ€λ‚΄λ³΄λ©΄, λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

a = "abc\nabc"
b = r"abc\nabc"
print(a)
print(b)

#Output
abc 
abc
abc\nabc

λ¬Έμžμ—΄ bκ°€ Raw String을 μ‚¬μš©ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€. μ΄μŠ€μΌ€μ΄ν”„ λ¬Έμžκ°€ μ μš©ν•˜λŠ” 문법을 λ¬΄μ‹œν•˜κ³  λ°±μŠ¬λž˜μ‹œλ₯Ό κ·ΈλŒ€λ‘œ 좜λ ₯ν•˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ docstring + Raw String

κ·Έλž˜μ„œ 두 문법은 μ½”λ“œμ˜ λ¬Έμ„œν™”λ₯Ό μœ„ν•΄ 쑰합을 μ‹œμΌœ 많이 μ‚¬μš©ν•©λ‹ˆλ‹€. μ™œλƒν•˜λ©΄, docstring λ‹¨λ½μ—μ„œ λ§ν•œ κ²ƒμ²˜λŸΌ docstring을 μ‚¬μš©ν•˜λ”λΌλ„ μ΄μŠ€μΌ€μ΄ν”„ λ¬ΈμžλŠ” κ·ΈλŒ€λ‘œ μ μš©ν•˜κΈ° λ•Œλ¬Έμ— λ¬Έμ„œμ—μ„œ λ°±μŠ¬λž˜μ‹œ κ΄€λ ¨ 문자λ₯Ό 좜λ ₯ν•˜κ³  싢을 λ•Œ, 두 쑰합을 많이 μ‚¬μš©ν•©λ‹ˆλ‹€. 


πŸ“‚ Reference

https://wikidocs.net/16050

 

24. Docstring - λ¬Έμ„œν™”

- νŒŒμ΄μ¬μ„ μ ‘ν•˜λ©΄μ„œ, μ—¬λŸ¬κ°€μ§€λ‘œ 멋지닀라고 μƒκ°ν–ˆλ˜ 것 쀑에 ν•˜λ‚˜ - docstring을 μž‘μ„±ν•˜λ©΄, ν”„λ‘œκ·Έλž˜λ°μ˜ μ†μ„±μœΌλ‘œ μ ‘κ·Όν• μˆ˜ 있음. ## 1. docstring μ΄λž€ …

wikidocs.net