Python/κΈ°μ΄ˆλ¬Έλ²•

[BASIC] λ¬Έμžμ—΄

Kim_gorilla 2020. 3. 22. 22:56

 

πŸ‘¨‍πŸ’» Python String 문법

λͺ©ν‘œ: νŒŒμ΄μ¬μ„ μ΄μš©ν•΄μ„œ λ¬Έμžμ—΄μ„ 화면에 좜λ ₯ν•˜λŠ” μ—¬λŸ¬κ°€μ§€ λ°©λ²•μ„ λ°°μ›λ‹ˆλ‹€.

πŸ“Œ 문자 와 λ¬Έμžμ—΄?

μš°λ¦¬λŠ” μ‚΄λ©΄μ„œ 정말 λ§Žμ€ λ¬Έμžλ“€μ„ λ΄…λ‹ˆλ‹€. λŒ€ν•œλ―Όκ΅­μ—μ„œ νƒœμ–΄λ‚¬λ‹€λ©΄ λŒ€κ°œ 처음으둜 보게 λ˜λŠ” λ¬Έμžκ°€ 'κ°€' 'λ‚˜' 'λ‹€' '라' 와 μ΄κ² μ§€μš”.

 

⚑ λ¬Έμžλž€

μ΄λ ‡κ²Œ 'κ°€λ‚˜λ‹€λΌ'와 같이 μ–Έμ–΄μ˜ 전달 μˆ˜λ‹¨μ˜ ν•˜λ‚˜λ‘œ μ‚¬μš©λ˜λŠ” λΆ€ν˜Έ, 점·μ„  λ“±μœΌλ‘œ μ‘°ν•©ν•œκ²ƒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

 

⚑ λ¬Έμžμ—΄μ΄λž€

κ·Έλ ‡λ‹€λ©΄ λ¬Έμžμ—΄μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

ν•˜λ‚˜ μ΄μƒμ˜ λ¬Έμžλ“€μ˜ 집합을 μ˜λ―Έν•˜λŠ”λ°μš”, 예λ₯Όλ“€μ–΄ "μ•ˆλ…•ν•˜μ„Έμš”."λŠ” 각각의 'μ•ˆ', 'λ…•', 'ν•˜', 'μ„Έ', 'μš”' κ°€ λͺ¨μ—¬μ„œ λ§Œλ“€μ–΄μ§„ λ¬Έμžμ—΄μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

πŸ“Œ λ¬Έμžμ—΄ λ§Œλ“€κΈ°

νŒŒμ΄μ¬μ—λŠ” Cμ–Έμ–΄λ‚˜ JAVA처럼 λ³€μˆ˜μ˜ νƒ€μž…μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ–΄λ–€ 값을 μ§‘μ–΄λ„£λŠλƒμ— 따라 κ·Έ λ³€μˆ˜κ°€ λ¬Έμžν˜• λ³€μˆ˜ ν˜Ήμ€ μˆ«μžν˜• λ³€μˆ˜ 등등이 λ˜μ–΄μ§‘λ‹ˆλ‹€.

 

μ΄λ²ˆμ— μ €ν¬λŠ” λ¬Έμžμ—΄μ„ 담은 λ¬Έμžν˜• λ³€μˆ˜λ₯Ό λ§Œλ“€μ–΄ λ³Όν…λ°μš” μ•„λž˜μ˜ μ‚¬μ§„μ²˜λŸΌ μ†ŒμŠ€μ½”λ“œλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”.

exampleμ΄λΌλŠ” λ³€μˆ˜λ₯Ό λ§Œλ“€κ³  κ·Έμ•ˆμ— μŒλ”°μ˜΄ν‘œ ν˜Ήμ€ λ”°μ˜΄ν‘œ["" or '']λ₯Ό μ΄μš©ν•˜μ—¬ "μ•ˆλ…•ν•˜μ„Έμš” λ°˜κ°‘μŠ΅λ‹ˆλ‹€." λΌλŠ” λ¬Έμžμ—΄μ„ λ‹΄μ•„μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ λ¬Έμžμ—΄μ„ λ§Œλ“€λ•ŒλŠ” μŒλ”°μ˜΄ν‘œ ν˜Ήμ€ λ”°μ˜΄ν‘œλ₯Ό μ΄μš©ν•΄ ν•΄λ‹Ή 문자λ₯Ό 감싸주면 λ¬Έμžμ—΄μ΄ λ˜μ–΄μ§‘λ‹ˆλ‹€. 그리고 이 λ¬Έμžμ—΄μ„ λ³€μˆ˜μ— λ‹΄μœΌλ©΄ λ¬Έμžν˜• λ³€μˆ˜κ°€ λ˜μ–΄μ§€λŠ” κ²λ‹ˆλ‹€.

 

ν•œλ²ˆ 방금 μž…λ ₯ν•œ 결과물을 ν•¨κ»˜ ν™•μΈν•΄λ³΄μ‹œμ£ .

typeμ΄λΌλŠ” λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ μš°λ¦¬κ°€ λ§Œλ“  example λ³€μˆ˜κ°€ μ–΄λ–€ ν˜•νƒœμΈμ§€λ₯Ό 확인이 κ°€λŠ₯ν•˜κ³  결과둜 str 즉 string(=λ¬Έμžμ—΄)의 μ€„μž„λ§μ„ 확인이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

이 λ¬Έμžμ—΄μ€ ꡬ지 λ³€μˆ˜μ•ˆμ— 담지 μ•Šμ•„λ„ κ·Έ 자체λ₯Ό printμ•ˆμ— κΈ°μž…ν•΄μ„œ 좜λ ₯이 κ°€λŠ₯ν•˜λ©°, λ³€μˆ˜μ— 담은 μƒνƒœλ‘œλ„ 좜λ ₯이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

πŸ“Œ Escape 문자 μ‚¬μš©ν•˜κΈ°

EscapeλΌλŠ” λ‹¨μ–΄λŠ” 우리말둜 νƒˆμΆœμ΄λΌλŠ” 의미λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.

즉 escapre string은 νƒˆμΆœν•œ μ–Έμ–΄λΌλŠ” 의미λ₯Ό κ°€μ§€κ²Œ λ©λ‹ˆλ‹€.

 

νƒˆμΆœν•œ μ–Έμ–΄, κ³Όμ—° 무엇을 νƒˆμΆœν–ˆλ‹€λŠ” μ΄μ•ΌκΈ°μΌκΉŒμš”?

μ§€κΈˆλΆ€ν„° κ·Έ 이야기λ₯Ό λ‹€λ€„λ³΄κ³ μž ν•©λ‹ˆλ‹€.

 

Cμ–Έμ–΄λ“  Python이든 μ–Έμ–΄λ₯Ό λ§Œλ“€λ•Œ ν•΄λ‹Ή μ–Έμ–΄λ₯Ό λ§Œλ“  κ°œλ°œμžκ°€ λ¬Έλ²•μœΌλ‘œ 지정해둔 특수 μ½”λ“œλ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄ [ \ ] λ¬ΈμžλŠ” λ°±μŠ¬λž˜μ‰¬ 라고 읽으며 λ¬Έλ²•μ—μ„œλŠ” νŠΉμˆ˜ν•œ μš©λ„λ‘œ μ‚¬μš©λ˜μ–΄μ§‘λ‹ˆλ‹€. κ°€μž₯ 큰 예둜 κ°œν–‰μ„ ν• λ•Œ μ‚¬μš©λ˜μ–΄μ§€μ£ .

( [ \n ] 을 λ¬Έμžμ—΄ 맨 μ•žμ— μΆ”κ°€ν•˜λ©΄ 좜λ ₯μ‹œ λ¬Έμžμ—΄ μœ„μ— λΉ„μ–΄μžˆλŠ” ν•œμ€„μ˜ 곡백이 μƒκΉλ‹ˆλ‹€. )

μœ„μ— ν•˜μ΄λΌμ΄νŠΈλΆ€λΆ„μ΄ κ°œν–‰μ„ λͺ…λ Ήν•˜λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.

\(λ°±μŠ¬λž˜μ‰¬) 말고도 λ¬Έμžμ—΄μ„ λ§Œλ“€κΈ°μœ„ν•œ "(쌍 λ”°μ˜΄ν‘œ), '(λ”°μ˜΄ν‘œ) 도 λ§ˆμŒλŒ€λ‘œ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ μ½”λ“œλ“€μ€ κ°œλ°œμ„ μœ„ν•΄ λ¬Έλ²•μœΌλ‘œ μ§€μ •λœ μ½”λ“œλ“€μ΄κΈ° λ•Œλ¬Έμ— λ¬Έμžμ—΄λ‘œ μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ κ·Έλƒ₯ ν—ˆμš©λ˜μ–΄μ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ μ–΄λ–»κ²Œν•΄μ•Ό μ΄λŸ¬ν•œ λ¬Έμžλ“€μ„ λ¬Έμžμ—΄λ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν• κΉŒμš”?

정닡은 λ°”λ‘œ escape string으둜 λ§Œλ“€μ–΄μ£Όλ©΄ λ˜λŠ”κ²λ‹ˆλ‹€.

즉, 문법을 νƒˆμΆœν•œ 언어인거죠!

 

μ΄λ ‡κ²Œ 문법을 νƒˆμΆœμ‹œμΌœμ£ΌκΈ° μœ„ν•΄μ„œλŠ” pythonμ—μ„œλŠ” ν•΄λ‹Ή λ¬Έμžμ— \(λ°±μŠ¬λž˜μ‰¬)λ₯Ό λΆ™μ—¬μ£ΌκΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

λ§Œμ•½ 화면에 λ°±μŠ¬λž˜μ‰¬λ₯Ό λ„μš°κ³  μ‹Άλ‹€λ©΄ [ \\ ]

λ§Œμ•½ 화면에 μŒλ”°μ˜΄ν‘œλ₯Ό λ„μš°κ³  μ‹Άλ‹€λ©΄ [ \" ] λ₯Ό μž…λ ₯ν•΄ μ£Όλ©΄ λ˜λŠ” 것이죠.

πŸ“Œ Python 인코딩

μΈμ½”λ”©μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

인코딩은 μ •λ³΄μ˜ ν˜•νƒœλ‚˜ ν˜•μ‹μ„ λ³€ν™˜ν•˜λŠ” μ²˜λ¦¬λ‚˜ 처리 방식을 μ˜λ―Έν•©λ‹ˆλ‹€. 

Cμ–Έμ–΄λ‘œ 예λ₯Όλ“€μ–΄ μ„€λͺ…ν•˜μžλ©΄, C언어에 Charν˜• μžλ£Œν˜•μ€ 1byte 크기λ₯Ό κ°€μ§€κ²Œ λ˜λŠ”λ° 1λ°”μ΄νŠΈλŠ” 8λΉ„νŠΈ 즉 2*2*2*2*2*2*2*2 κ°€μ§€μ˜ μˆ«μžν‘œν˜„μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

 

각 μˆ«μžλ§ˆλ‹€ νŠΉμ • 문자λ₯Ό λ§€μΉ­μ‹œν‚¨λ‹€κ³  κ°€μ •ν–ˆμ„λ•Œ 1byte둜  256κ°€μ§€μ˜ 문자λ₯Ό ν‘œν˜„ν•  수 μžˆλŠ”κ²ƒμ΄μ£ .

μ΄λ ‡κ²Œ 문자λ₯Ό ν‘œν˜„ν•˜λŠ” 방식은 μ—¬λŸ¬κ°€μ§€κ°€ 있고 이 방법에따라 μ΄μ§„μ½”λ“œλ₯Ό 읽어 문자둜 ν‘œν˜„ν•˜λ„λ‘ λͺ…μ‹œν•΄λ‘” 방식이 인코딩이라 μ΄μ•ΌκΈ°λ“œλ¦΄ 수 μžˆκ² μŠ΅λ‹ˆλ‹€.

 

μ—¬κΈ°μ„œ 저희가 μ‚¬μš©ν•˜λŠ” Python은 기본적으둜 Unicode기반이라고 ν•©λ‹ˆλ‹€. 

 

κ·Έλ ‡λ‹€λ©΄ μ—¬κΈ°μ„œ Unicode(μœ λ‹ˆμ½”λ“œ)κ°€ λ¬΄μ—‡μΌκΉŒμš”?

μœ λ‹ˆμ½”λ“œλž€, μˆ«μžμ™€ κΈ€μž, 즉 킀와 값이 1:1둜 λ§€ν•‘λœ ν˜•νƒœμ˜ μ½”λ“œ μœ λ‹ˆμ½”λ“œλΌκ³  ν•©λ‹ˆλ‹€.

μœ„μ—μ„œ μ„€λͺ…λ“œλ Έλ˜ 인코딩 방식이 μœ λ‹ˆμ½”λ“œ 방식인 μ…ˆμ΄μ£ .

 

λ‹€μ‹œλ§ν•΄ μ•„μŠ€ν‚€μ½”λ“œλ‘œ 0x41 = A 둜 λ§€ν•‘λœ 것 처럼, μ•„μŠ€ν‚€μ½”λ“œλ‘œ ν‘œν˜„ν•  수 μ—†λŠ” λ¬Έμžλ“€μ„ μœ λ‹ˆμ½”λ“œλΌλŠ” 이름 μ•„λž˜ μ „ μ„Έκ³„μ˜ λͺ¨λ“  문자λ₯Ό νŠΉμ • 숫자(ν‚€)와 1:1둜 λ§€ν•‘ν•œ κ²ƒμž…λ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ λ‹€μŒμ˜ 인코딩 방식쀑 어떀것듀이 μœ λ‹ˆμ½”λ“œ λ°©μ‹μΌκΉŒμš”?

(ASCII, EUC-KR, CP949, UTF8, UTF16)

 

μ •λ‹΅λΆ€ν„° λ§μ”€λ“œλ¦¬μžλ©΄ μ΄ 쀑에 μœ λ‹ˆμ½”λ“œ κ·Έ 자체인 것은 μ—†μŠ΅λ‹ˆλ‹€.

κ·Έλ‚˜λ§ˆ UTF-8, UTF-16λŠ” μœ λ‹ˆμ½”λ“œλ₯Ό 'μ‚¬μš©'ν•˜λŠ” 인코딩 방식이기 λ•Œλ¬Έμ— μœ λ‹ˆμ½”λ“œμ— 제일 가깝닀고 λ³Ό μˆ˜λŠ” μžˆκ² λ„€μš”.

 

자 이제 인코딩 이야기λ₯Ό κΊΌλ‚Έ 이유λ₯Ό μ„€λͺ…ν•  수 μžˆκ² λ„€μš”.

 

우리 vscode에 print문을 μ΄μš©ν•΄ β”Œβ”¬β”μ„ 좜λ ₯ν•΄λ³Όκ±°μ—μš”.  μ•„λ§ˆ κ·Έλƒ₯ κΈμ–΄μ„œ 좜λ ₯ν•˜λ©΄ 좜λ ₯이 μ•ˆλ˜μ‹€κΊΌλΌ 생각이 λ“­λ‹ˆλ‹€.

(μœˆλ„μš° μœ μ €λΌλŠ” κ°€μ •ν•˜μ—)

 

μ•žμ„œ λ§ν•œκ±°μ²˜λŸΌ νŒŒμ΄μ¬μ€ μœ λ‹ˆμ½”λ“œ 기반이기 λ•Œλ¬Έμ— β”Œβ”¬β”μ™€ 같은 특수문자λ₯Ό 화면에 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” 우리의 μ†ŒμŠ€μ½”λ“œ 졜 상단에 μ–΄λ–€ 인코딩 방식을 μ‚¬μš©ν• κ²ƒμΈμ§€ λͺ…μ‹œλ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•΄λ‹Ή 특수문자λ₯Ό 읽어듀일 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ν˜„μ œ 아직 μ–΄λ– ν•œ 인코딩 방식도 μ‚¬μš©ν•˜μ§€ μ•Šκ³ μžˆκΈ° λ•Œλ¬Έμ— 우리의 μ†ŒμŠ€μ½”λ“œ 졜 상단에 μ–΄λ–€ 인코딩 방식을 μ‚¬μš©ν•  것인지λ₯Ό λͺ…μ‹œν•΄ μ£Όμ–΄μ„œ 특수문자λ₯Ό 해독해 μ£Όμ–΄μ•Όν•©λ‹ˆλ‹€.

 

μ•„λž˜ 그림처럼 μž…λ ₯ ν›„ 화면에 좜λ ₯ν•΄ λ³Όκ²Œμš”.

μœ„μ— 그림처럼 졜 상단에 utf-8 인코딩을 μ‚¬μš©ν•˜κ² λ‹€λŠ” λͺ…μ‹œλ₯Ό 주석을 톡해 κ°€λŠ₯ν•˜κ³  μœ„μ™€κ°™μ΄ ν•΄μ£Όμ—ˆλ‹€λ©΄, μœ λ‹ˆμ½”λ“œλ₯Ό utf-8 인코딩 λ°©μ‹μœΌλ‘œ ν•΄λ…ν•˜κ²Œ λ©λ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ 3쀄에 특수문자 μ•žμ— uλŠ” λ¬΄μ—‡μΌκΉŒμš”?

 

일반적으둜 μœ λ‹ˆμ½”λ“œ λ¬ΈμžλΌλŠ”κ²ƒμ„ μ§€μΉ­ν• λ•ŒλŠ” ν•΄λ‹Ή λ¬Έμžμ—΄ μ•žμ— uλ₯Ό λΆ™μ—¬μ£Όμ–΄ ν‘œν˜„ν•΄μ€λ‹ˆλ‹€.

특수문자 말고 μœ λ‹ˆμ½”λ“œλ₯Ό λ‚˜μ—΄ν•œ ν…Œμ΄λΈ”μ— μžˆλŠ” λ°©λ²•μœΌλ‘œλ„ λ˜‘κ°™μ€ κ²°κ³Όλ₯Ό 좜λ ₯도 κ°€λŠ₯ν•©λ‹ˆλ‹€.