Python

์งˆ๋ฌธ์€ Top 100 Python Interview Questions You Must Prepare In 2021 - edureka!์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Table of Contents


#1

What is the difference between list and tuples in Python?

๋ฆฌ์ŠคํŠธ๋Š” mutable(๋ณ€๊ฒฝ ๊ฐ€๋Šฅ), ํŠœํ”Œ์€ immutable(๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ)์ด๋ผ๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌ์ŠคํŠธ๋Š” ์„ ์–ธ ํ›„์—๋„ ๊ฐ’์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ, ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํŠœํ”Œ์€ ์„ ์–ธ ํ›„์— ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ๋ฆฌ์ŠคํŠธ๋Š” ํŠœํ”Œ๋ณด๋‹ค ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ•˜๋‚˜์˜ ํŠœํ”Œ/๋ฆฌ์ŠคํŠธ์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ํ•จ๊ป˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋Š” ๋Œ€๊ด„ํ˜ธ [ ]๋ฅผ, ํŠœํ”Œ์€ ์†Œ๊ด„ํ˜ธ ( )๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚˜ํƒ€๋‚ธ๋‹ค.

References


#2

What are the key features of Python?

ํŒŒ์ด์ฌ์ด ์ฃผ์š” ํŠน์ง•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด(Interpreter Language)

    • ํŒŒ์ด์ฌ์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ด๋ฏ€๋กœ, ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ปดํŒŒ์ผ์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

    • ์ž์„ธํ•œ ๋‚ด์šฉ์€ Python an interpreted language. Explain. ์ฐธ๊ณ 

  • ๋™์ ํƒ€์ดํ•‘(Dynamic Typing)

    • ํŒŒ์ด์ฌ์€ ์‹คํ–‰์‹œ๊ฐ„์— ์ž๋ฃŒํ˜•์„ ๊ฒ€์‚ฌํ•˜๋ฏ€๋กœ, ์„ ์–ธํ•  ๋•Œ ๋ณ€์ˆ˜ ์œ ํ˜•(ex.int, double, ...)์„ ๋ช…์‹œํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

    • typing์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ๋ณ€์ˆ˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ •ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ง€์ •(assign)์€ ์ •์  ๋˜๋Š” ๋™์  ํƒ€์ดํ•‘์œผ๋กœ ๋ถ„๋ฅ˜๋˜๋Š”๋ฐ, ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ ์‹œ์— ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ฒดํฌํ•˜๋Š” C, C++๊ณผ ๊ฐ™์€ ์–ธ์–ด๋Š” ์ •์  ํƒ€์ž…(static typed) ์–ธ์–ด๋ผ๊ณ  ํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์— ํƒ€์ž…์„ ์ฒดํฌํ•˜๋Š” python์€ ๋™์  ํƒ€์ž…(dynamic typed) ์–ธ์–ด์ด๋‹ค.

  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)

    • ํŒŒ์ด์ฌ์€ ํด๋ž˜์Šค์™€ ๊ตฌ์„ฑ ๋ฐ ์ƒ์†์„ ํ•จ๊ป˜ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋งค์šฐ ์ ํ•ฉํ•˜๋‹ค.

  • ์ผ๊ธ‰๊ฐ์ฒด(First-class citizen)

    • ํŒŒ์ด์ฌ์—์„œ ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๋‹ค. ์ผ๊ธ‰๊ฐ์ฒด๋Š” ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์— ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ด ์™ธ ํŠน์ง•

  • ํŒŒ์ด์ฌ์€ ๋“ค์—ฌ์“ฐ๊ธฐ(indentation) ์™€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์‰ฌ์šด ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค.

  • ๋ณ€์ˆ˜, ์ธ์ˆ˜(argument)๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น๋˜์–ด ํŽธ๋ฆฌํ•˜๋‹ค.

  • ํ•จ์ˆ˜(function) ๋˜๋Š” ๋ชจ๋“ˆ(module) ์ถ”๊ฐ€๊ฐ€ ์šฉ์ดํ•˜์—ฌ ํ™•์žฅ์„ฑ๊ณผ ์ด์‹์„ฑ์ด ์ข‹๋‹ค.

  • ํŒŒ์ด์ฌ์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ๋™์ž‘ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ ์–ธ์–ด์— ๋น„ํ•ด ๋‹ค์†Œ ๋А๋ฆฌ๋‹ค.

    • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•ด์„œ ์‹คํ–‰๊ฐ€๋Šฅ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋น„ํ•ด, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ฝ”๋“œ๋ฅผ ํ•œ์ค„์”ฉ ์‹คํ–‰์‹œ๊ฐ„๋งˆ๋‹ค ๋ฒˆ์—ญํ•ด์„œ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

References


#3

What type of language is python? Programming or scripting?

ํŒŒ์ด์ฌ์€ ์ •ํ™•ํ•˜๊ฒŒ๋Š”, ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด๋‹ค. ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋‚˜, ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ด์ฌ์€ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด์ž, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ๋žŒ๋“ค์€ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์— ํŒŒ์ด์ฌ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ชฉ์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชฉ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ’ก ์Šคํฌ๋ฆฝํŒ…(scripting/Scripting Language) ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ž€ ์ปดํŒŒ์ผ์ด ํ•„์š”์—†์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ปดํŒŒ์ผ ๊ณผ์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ถ€ํ„ฐ ๋ฐ”๋กœ ๋ช…๋ น์–ด๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

References


#4

Python an interpreted language. Explain.

์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์›์‹œ์ฝ”๋“œ ๋ช…๋ น์–ด๋“ค์„ ํ•œ๋ฒˆ์— ํ•œ ์ค„์”ฉ ์ฝ์–ด๋“ค์—ฌ์„œ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋Š” ์‹คํ–‰์‹œ๊ฐ„(runtime) ์ „์— ๊ธฐ๊ณ„ ๋ ˆ๋ฒจ ์ฝ”๋“œ(machine-level code)๋ฅผ ๋งŒ๋“œ๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด์™€ ๋‹ค๋ฅด๊ฒŒ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š” ์–ธ์–ด์ด๋ฉฐ, ํŒŒ์ด์ฌ์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์— ํ•ด๋‹นํ•œ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์™€ ๋™์ผํ•œ ์˜๋ฏธ์ด๋‹ค. ์Šคํฌ๋ฆฝํŒ…/์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์— ๋Œ€ํ•œ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์€ What type of language is python? Programming or scripting?์„ ์ฐธ๊ณ ํ•œ๋‹ค.

References


#5

What is pep 8?

PEP(Python Enhancement Proposal)๋Š” Python ์ฝ”๋“œ๋ฅผ ํฌ๋งทํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•˜๋Š” ๊ทœ์น™ ์ง‘ํ•ฉ์ด๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ์›ํ™œํ•˜๊ฒŒ ํ˜‘์—…ํ•˜๋ ค๋ฉด ๊ณตํ†ต๋œ ์Šคํƒ€์ผ ๊ณต์œ ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ผ๊ด€์„ฑ ์žˆ๋Š” ์Šคํƒ€์ผ์€ ๋‚˜์ค‘์— ์ˆ˜์ •ํ•˜๊ธฐ๋„ ์‰ฝ๋‹ค. PEP8์€ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•  ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋กœ์„œ์˜ ์—ญํ• ์„ ํ•œ๋‹ค. Python formatting tool์—๋Š” black, flake8, autopep8, yamf ๋“ฑ์ด ์žˆ๋‹ค.

PEP8 ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ์˜ˆ์‹œ

  • whitespace

    • ํ•œ ์ค„์˜ ๋ฌธ์ž ๊ธธ์ด๊ฐ€ 79์ž ์ดํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

    • ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๋Š” ๋นˆ ์ค„ ๋‘๊ฐœ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

  • naming

    • ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ์†์„ฑ : lowercase_underscore

    • ๋ณดํ˜ธ(protected) ์ธ์Šคํ„ด์Šค ์†์„ฑ : _leading_underscore

    • ๋น„๊ณต๊ฐœ(private) ์ธ์Šคํ„ด์Šค ์†์„ฑ : __double_leading_undersocre

References


#6

How is memory managed in Python?

Python์€ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ํŒŒ์ด์ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž๊ฐ€ ์ž๋™์œผ๋กœ ๊ฐ์ฒด์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ํŒŒ์ด์ฌ์€ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ํž™(heap)์€ ๋™์ ํ• ๋‹น์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ํž™์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด, ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„์šฐ๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋ชจ๋“  ํŒŒ์ด์ฌ ๊ฐ์ฒด ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” python private heap ๊ณต๊ฐ„์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ด ๊ณต๊ฐ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ , ๋Œ€์‹  ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋Œ€์‹ ํ•ด์„œ ๊ด€๋ฆฌํ•œ๋‹ค.

๋” ์ž์„ธํžˆ๋ณด๊ธฐ

ํŒŒ์ด์ฌ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํž™ ๊ณต๊ฐ„ ํ• ๋‹น์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์„ ํŒŒ์ด์ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž(Python Memory Manager) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. Python ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž์—๋Š” ๊ฐ์ฒด๋ณ„ ํ• ๋‹น์ž๊ฐ€์žˆ๊ธฐ ๋•Œ๋ฌธ์— int, string ๋“ฑ๊ณผ ๊ฐ™์€ ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌํ™œ์šฉํ•˜๊ณ  ํž™ ๊ณต๊ฐ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋‚ด์žฅ Garbage Collector(GC) ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

References


#7

What is namespace in Python?

namespace๋Š” ์ด๋ฆ„ ์ง€์ • ์ถฉ๋Œ(naming conflicts)์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์ด ๊ณ ์œ ํ•œ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„ ์ง€์ • ์‹œ์Šคํ…œ(naming system)์ด๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค(namespace, ์ด๋ฆ„๊ณต๊ฐ„)๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ํŠน์ •ํ•œ ๊ฐ์ฒด(Object)๋ฅผ ์ด๋ฆ„(Name)์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํŒŒ์ด์ฌ ๋‚ด๋ถ€์˜ ๋ชจ๋“ ๊ฒƒ์€ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์ด๋“ค ๊ฐ๊ฐ์€ ํŠน์ • ์ด๋ฆ„๊ณผ์˜ ๋งคํ•‘ ๊ด€๊ณ„๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋งคํ•‘์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ˆ˜ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ๋ชจ๋“  ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ๋ฐ ์ด๋“ค ๋ชจ๋‘๋ฅผ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์ •ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด์—์„œ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ•˜์—ฌ, ํŠน์ •ํ•œ ํ•˜๋‚˜์˜ ์ด๋ฆ„์ด ํ†ต์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•œ๋‹ค. ์ฆ‰, ์†Œ์†๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ๊ฐ™์€ ์ด๋ฆ„์ด ๋‹ค๋ฅธ ๊ฐœ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํŒŒ์ด์ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ํŠน์ง•

  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

  • ๋ชจ๋“  ์ด๋ฆ„ ์ž์ฒด๋Š” ๋ฌธ์ž์—ด๋กœ ๋˜์–ด์žˆ๊ณ  ๊ฐ๊ฐ์€ ํ•ด๋‹น ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ฒ”์œ„์—์„œ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

  • ์ด๋ฆ„๊ณผ ์‹ค์ œ ๊ฐ์ฒด ์‚ฌ์ด์˜ ๋งคํ•‘์€ ๊ฐ€๋ณ€์ (Mutable)์ด๋ฏ€๋กœ ๋Ÿฐํƒ€์ž„๋™์•ˆ ์ƒˆ๋กœ์šด ์ด๋ฆ„์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค.

  • ๋นŒํŠธ์ธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ํ•จ๋ถ€๋กœ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.

ํŒŒ์ด์ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ 3๊ฐ€์ง€ ๋ถ„๋ฅ˜

  • ๋นŒํŠธ์ธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(build-in namespace): ๊ธฐ๋ณธ ๋‚ด์žฅ ํ•จ์ˆ˜ ๋ฐ ๊ธฐ๋ณธ ์˜ˆ์™ธ๋“ค์˜ ์ด๋ฆ„๋“ค์ด ์†Œ์†๋œ๋‹ค. ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“  ์ฝ”๋“œ ๋ฒ”์œ„๊ฐ€ ํฌํ•จ๋œ๋‹ค.

  • ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(global namespace): ๋ชจ๋“ˆ๋ณ„๋กœ ์กด์žฌํ•˜๋ฉฐ, ๋ชจ๋“ˆ ์ „์ฒด์—์„œ ํ†ต์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„๋“ค์ด ์†Œ์†๋œ๋‹ค.

  • ์ง€์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(local namespace): ํ•จ์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ ๋ณ„๋กœ ์กด์žฌํ•˜๋ฉฐ, ํ•จ์ˆ˜ ๋‚ด์˜ ์ง€์—ญ ๋ณ€์ˆ˜๋“ค์˜ ์ด๋ฆ„๋“ค์ด ์†Œ์†๋œ๋‹ค.

References


#8

What is PYTHONPATH?

๋ชจ๋“ˆ์„ importํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜์ด๋‹ค. ๋ชจ๋“ˆ์„ importํ•  ๋•Œ๋งˆ๋‹ค PYTONPATH๋ฅผ ์กฐํšŒํ•˜์—ฌ ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์ด ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œํ•  ๋ชจ๋“ˆ์„ ๊ฒฐ์ •ํ•œ๋‹ค.

PYTHONPATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด, ํŒŒ์ด์ฌ์€ ์ด ๊ฒฝ๋กœ๋“ค์„ sys.path์— ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŒŒ์ด์ฌ ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒŒ์ด์ฌ ์ฝ”๋“œ ๋ฐ–์—์„œ๋„ sys.path๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. PYTHONPATH์—๋Š” sys.path์— ์ถ”๊ฐ€ํ•  ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋“ค์ด ๋“ค์–ด๊ฐ„๋‹ค. ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” /foo:/bar์ฒ˜๋Ÿผ :๋กœ ๋‘ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ , ์œˆ๋„์šฐ์—์„œ๋Š” /foo;/bar์ฒ˜๋Ÿผ ;๋กœ ๋‘ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์ด์™ธ์—๋„ sys.path์—๋Š” ํŒŒ์ด์ฌ์— ํฌํ•จ๋œ ์—ฌ๋Ÿฌ ๋‚ด์žฅ ๋ชจ๋“ˆ ๋“ฑ์„ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

sys.path์˜ ์ˆœ์„œ

import๋Š” sys.path ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด์žˆ๋Š” ๊ฒฝ๋กœ๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋ถˆ๋Ÿฌ์˜ฌ ํŒŒ์ด์ฌ ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค. ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด์žˆ๋Š” ๋งจ ์ฒ˜์Œ ๊ฒฝ๋กœ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜์—ฌ, ํŠน์ • ๊ฒฝ๋กœ์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ ํŒŒ์ผ์„ ์ฐพ์•˜๋‹ค๋ฉด ๋‚จ์€ ๊ฒฝ๋กœ๋ฅผ ๋” ์ฐพ์•„๋ณด์ง€ ์•Š๊ณ  ํƒ์ƒ‰์„ ์ค‘์ง€ํ•œ๋‹ค. sys.path์˜ ๊ธฐ๋ณธ๊ฐ’์€ ์•„๋ž˜์˜ ์ˆœ์„œ๋Œ€๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

  • .py ํŒŒ์ผ์ด ์†ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ

  • PYTHONPATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜

  • ๊ธฐํƒ€ ๊ธฐ๋ณธ ๊ฒฝ๋กœ

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ sys.path๋ฅผ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

import sys
print(sys.path)

References


#9

What are python modules? Name some commonly used built-in modules in Python?

๋ชจ๋“ˆ์ด๋ž€ Python ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ๋กœ์จ, ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜ ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋ชจ์•„ ๋†“์€ ํŒŒ์ผ์ด๋‹ค. ๋ชจ๋“ˆ์€ ๋‹ค๋ฅธ ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋งŒ๋“  ํŒŒ์ด์ฌ ํŒŒ์ผ์ด๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š”, ํŒŒ์ด์ฌ ํ™•์žฅ์ž .py๋กœ ๋งŒ๋“  ํŒŒ์ด์ฌ ํŒŒ์ผ์€ ๋ชจ๋‘ ๋ชจ๋“ˆ์ด๋‹ค. ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋‹ค๋ฅธ ์ฝ”๋“œ์— ์ ์šฉํ•˜๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง€๋ฏ€๋กœ ์ด์‹์„ฑ์ด ์ข‹์•„์ง„๋‹ค.

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋นŒํŠธ์ธ ๋ชจ๋“ˆ(built-in module)์˜ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • os

  • sys

  • math

  • random

  • datetime

  • JSON

References


#10

What are local variables and global variables in Python?

**์ „์—ญ ๋ณ€์ˆ˜(Global Variable)**๋Š” ํ•จ์ˆ˜ ์™ธ๋ถ€ ๋˜๋Š” ์ „์—ญ ๊ณต๊ฐ„์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ํ•จ์ˆ˜์—์„œ ์ „์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (Whenever Python exits, why isnโ€™t all the memory de-allocated? ์ฐธ๊ณ )

**๋กœ์ปฌ ๋ณ€์ˆ˜(Local Variable)**๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ๋กœ์ปฌ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๊ณต๊ฐ„์ด ์•„๋‹Œ ๋กœ์ปฌ ๊ณต๊ฐ„์— ์žˆ๋‹ค.

a=2
def add():
    b=3
    c=a+b
    print(c)
add()

# ์ถœ๋ ฅ: 5

# global var: a
# local var: b, c

add() ํ•จ์ˆ˜์˜ ์™ธ๋ถ€์—์„œ add() ํ•จ์ˆ˜์˜ ๋กœ์ปฌ ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


#11

Is python case sensitive?

ํŒŒ์ด์ฌ์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์–ธ์–ด์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, a์™€ A๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜์ด๋‹ค.


#12

What is type conversion in Python?

type conversion์€ ํƒ€์ž… ์บ์ŠคํŒ…(type casting)๊ณผ ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

ํƒ€์ž… ์บ์ŠคํŒ… ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜

  • int(): ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • float(): ์‹ค์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • ord(): ๋ฌธ์žํ˜•์„ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • hex(): ์ •์ˆ˜ํ˜•์„ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • oct(): ์ •์ˆ˜ํ˜•์„ 8์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • tuple(): ํŠœํ”Œํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • set(): set์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • list(): list๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • dict(): (key,value) ์ˆœ์„œ๋กœ ์ด๋ค„์ง„ ํŠœํ”Œ์„ ๋”•์…”๋„ˆ๋ฆฌํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • str(): ์ •์ˆ˜ํ˜•์„ ๋ฌธ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • complex(real, image): ์‹ค์ˆ˜๋ฅผ ๋ณต์†Œ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.


#13

How to install Python on Windows and set path variable?

Windows์— Python์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผํ•œ๋‹ค.

  1. ๋งํฌ์—์„œ python์„ ์„ค์น˜ํ•œ๋‹ค.

  2. PC์— ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ python์„ ์„ค์น˜ํ•˜๋ฉด์„œ, Add Python 3.6 to PATH์— ์ฒดํฌํ•˜๊ณ , ์•ˆ๋‚ด์— ๋”ฐ๋ผ ์„ค์น˜ํ•˜๋ฉฐ python์„ ์„ค์น˜ํ•œ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด๋‘”๋‹ค.

  3. ์‹œ์Šคํ…œ > ์‹œ์Šคํ…œ ์ •๋ณด > ๊ณ ๊ธ‰ ์‹œ์Šคํ…œ ์„ค์ • > ํ™˜๊ฒฝ๋ณ€์ˆ˜์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ํŽธ์ง‘ํ•˜์—ฌ 2๋ฒˆ์—์„œ ์ €์žฅํ•ด๋‘” python.exe ์‹คํ–‰ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

References


#14

Is indentation required in python?

Python์€ Indentation(๋“ค์—ฌ์“ฐ๊ธฐ)์ด ํ•„์š”ํ•˜๋‹ค. ํŒŒ์ด์ฌ์€ {}์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜์—ญ์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ , ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ธ”๋ก์„ ์ง€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ด์ฌ์—์„œ ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ๋ฌธ๋ฒ•์ ์ธ ๊ฐ•์ œ์‚ฌํ•ญ์ด๋‹ค. if, for, class, def ๋“ฑ์˜ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ ๋ธ”๋ก ๋‚ด์—์„œ ์ง€์ •๋œ๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ์˜ ๋ฐฉ๋ฒ•์€ 1์นธ, 2์นธ, 4์นธ, ํƒญ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ด์ฌ์€ ๋„ค ๊ฐœ์˜ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฝ”๋“œ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋“ค์—ฌ์“ฐ์—ฌ์ง€์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์˜ค๋ฅ˜๋„ ๋ฐœ์ƒํ•œ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ฐ™์€ ๋ธ”๋ก ๋‚ด์—์„œ๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ ์นธ ์ˆ˜๊ฐ€ ๊ฐ™์•„์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ ๊ทœ์น™ ์œ„๋ฐ˜์‹œ์—๋Š” IndentationError: unexpected indent ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

References


#15

What is the difference between Python Arrays and lists?

Python์—์„œ๋Š” array๊ณผ list๊ฐ€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ฐจ์ด์ ์€, ๋ฐฐ์—ด์€ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์š”์†Œ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, ๋ฆฌ์ŠคํŠธ์—๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์š”์†Œ๋“ค์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. array์˜ ์„ ์–ธ ๋ฐฉ๋ฒ•์€ arrayName = array(type, [Values])์ฒ˜๋Ÿผ ์ž๋ฃŒํ˜•์„ ์ •ํ•˜๊ณ , ์ง€์ •ํ•œ/๋™์ผํ•œ ์ž๋ฃŒํ˜•๋งŒ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด์žˆ๋‹ค. list์€ ๋ณ€์ˆ˜์— []๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ๋ฌถ์–ด์„œ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

array์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import array as arr

My_Array=arr.array('i',[1,2,3,4])
My_list=[1,'abc',1.20]
print(My_Array)
print(My_list)

# Output: array(โ€˜iโ€™, [1, 2, 3, 4]) [1, โ€˜abcโ€™, 1.2]

References


#16

What are functions in Python?

ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋  ๋•Œ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก์ด๋‹ค. Python ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด def ํ‚ค์›Œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„์„ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋ฉด, ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•˜์—ฌ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

def new_func():
  print("Hi, Welcome to Edureka")

new_func(); # ํ•จ์ˆ˜ ํ˜ธ์ถœ

# Output: Hi, Welcome to Edureka

References


#17

What is __init__?

__init__๋Š” ํŒŒ์ด์ฌ์—์„œ ํŠน๋ณ„ํ•˜๊ฒŒ ์•ฝ์†๋œ ๋ฉ”์„œ๋“œ ๊ฐ€์šด๋ฐ ํ•˜๋‚˜๋กœ, ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ ํ˜น์€ ์ƒ์„ฑ์ž๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค์˜ ์ƒˆ ๊ฐœ์ฒด/์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฉฐ, ๊ทธ ๊ฐ์ฒด๊ฐ€ ๊ฐ–๊ฒŒ ๋  ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„ฑ์งˆ์„ ์ •ํ•ด์ค€๋‹ค. ๋ชจ๋“  ํด๋ž˜์Šค์—๋Š” __init__ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.

class Employee:
  def __init__(self, name, age,salary):
    self.name = name
    self.age = age
    self.salary = 20000

E1 = Employee("XYZ", 23, 20000)

# E1์€ Employee ํด๋ž˜์Šค์˜ ๊ฐ์ฒด
# __init__ ๋Š” E1์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•จ

print(E1.name)
print(E1.age)
print(E1.salary)

'''
์ถœ๋ ฅ:

XYZ
23
20000
'''

๐Ÿ’ก __init__.py์€ ๋ฌด์—‡์ธ๊ฐ€? python 3.3 ์ดํ•˜ ๋ฒ„์ „์—์„œ, package importํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ทœ์น™์ด๋‹ค. 3.3 ์ดํ›„์˜ ๋ฒ„์ „์—์„œ๋Š” ์ด ์ œ์•ฝ์‚ฌํ•ญ์ด ํ•ด์ œ๋˜์—ˆ๋‹ค. __init__.py๋Š” python ํ”„๋กœ๊ทธ๋žจ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฒ˜์Œ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํŒจํ‚ค์ง€ ์ดˆ๊ธฐํ™” ํŒŒ์ผ ์—ญํ• ์„ ํ•˜๊ณ , ๋ชจ๋“ˆ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ดˆ๊ธฐํ™” ์—ญํ• ์„ ํ•œ๋‹ค.

References


#18

What is a lambda function?

์ต๋ช… ํ•จ์ˆ˜(์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜)๋ฅผ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ๋žŒ๋‹ค ํ•จ์ˆ˜๋Š” def ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฆฌํ„ฐ๋Ÿด ํ‘œ๊ธฐ๋ฒ•์„ ๋”ฑ ํ•œ ์ค„์˜ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ, lambda ์ธ์ž : ํ‘œํ˜„์‹์˜ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ๋žŒ๋‹คํ•จ์ˆ˜๋Š” ๊ฒฐ๊ณผ ๋ถ€๋ถ„์„ return ํ‚ค์›Œ๋“œ ์—†์ด ์ž๋™์œผ๋กœ returnํ•œ๋‹ค. ๋žŒ๋‹คํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ ˆ์•ฝ๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•จ์ˆ˜์— ์ด๋ฆ„์ด ์—†๊ณ , ์ €์žฅ๋œ ๋ณ€์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ์ ์–ด์ฃผ๊ฑฐ๋‚˜, ๋žŒ๋‹คํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋‹ด์•„์ฃผ์–ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์žฌ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด lambda ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋„˜๊ฒจ์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค.

๋žŒ๋‹คํ•จ์ˆ˜์˜ ํ‘œํ˜„๋ฒ•์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

a = lambda x, y : x + y
print(a(5, 6))

# Output: 11

References


#19

What is self in Python?

class MyClass:
    def method(self):
        return 'instance method', self

obj = MyClass
print(obj.method())

# >> ('instance method', <__main__.MyClass object at 0x7f10aa8e68b0>)

์šฐ์„  self๊ฐ€ ์–ด๋””์—์„œ ์“ฐ์ด๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค. self๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ(instance method)์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž์ด๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, ํŒŒ์ด์ฌ์€ self์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋„ฃ๊ณ  ์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

References


#20

How does break, continue and pass work?

break๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด for๋ฌธ์ด๋‚˜ while๋ฌธ์˜ ๋ฃจํ”„์—์„œ ๋น ์ ธ๋‚˜๊ฐ€๋„๋ก ํ•œ๋‹ค.

for i in range(10):
  if i == 5:
    break
  print(i, end=' ')

# >> 0 1 2 3 4

continue๋Š” ์ด๋ฒˆ ์ดํ„ฐ๋ ˆ์ด์…˜(iteration)์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค์Œ ์ดํ„ฐ๋ ˆ์ด์…˜์„ ์ด์–ด๋‚˜๊ฐ€๋„๋ก ํ•œ๋‹ค.

for i in range(10):
  if i == 5:
    continue
  print(i, end=' ')

# >> 0 1 2 3 4 6 7 8 9

pass๋Š” ๋ฌธ๋ฒ•์ ์œผ๋กœ ํ•„์š”ํ•˜์ง€๋งŒ, ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ฃผ๋กœ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ๋ถ€ํ„ฐ ์„ธ์šฐ๊ณ  ๋‚˜์ค‘์— ๊ตฌํ˜„์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

class MyClass:
    def not_implemented_method(self):
        pass

References


#21

What does [::-1] do?

ํŒŒ์ด์ฌ ์‹œํ€€์Šค ์ž๋ฃŒํ˜•์€ ๊ฐ’์ด ์—ฐ์†์ ์œผ๋กœ ์ด์–ด์ง„ ์ž๋ฃŒํ˜•์œผ๋กœ, ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, range, ๋ฌธ์ž์—ด์ด ์žˆ๋‹ค. ์‹œํ€€์Šค ์ž๋ฃŒํ˜•์€ ์‹œํ€€์Šค ๊ฐ์ฒด์˜ ์ผ๋ถ€๋ฅผ ์ž˜๋ผ๋‚ผ ์ˆ˜ ์žˆ๋Š” **์Šฌ๋ผ์ด์‹ฑ(slicing)**์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์Šฌ๋ผ์ด์‹ฑ์€ seq[start:end:step]์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, start๋Š” ์‹œ์ž‘ ์ธ๋ฑ์Šค, end๋Š” ๋ ์ธ๋ฑ์Šค(๋ฒ”์œ„์— ํฌํ•จํ•˜์ง€๋Š” ์•Š์Œ), step์€ ์ธ๋ฑ์Šค ์ฆ๊ฐํญ์„ ๋งํ•œ๋‹ค. step์ด ์–‘์ˆ˜์ด๋ฉด ์ฆ๊ฐ€ํ•˜๊ณ , ์Œ์ˆ˜์ด๋ฉด ๊ฐ์†Œํ•œ๋‹ค.

๋‹ค์‹œ ๋Œ์•„์™€ seq[::-1]์€ start์™€ end๋Š” ์‹œ์ž‘ ์ธ๋ฑ์Šค์™€ ๋ ์ธ๋ฑ์Šค๋ฅผ ์ƒ๋žตํ•˜์˜€๋Š”๋ฐ, ์ด๋Ÿด ๊ฒฝ์šฐ ์ „์ฒด ์‹œํ€€์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ, ์ฆ๊ฐํญ์ด -1์ด๋ฏ€๋กœ end-1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด start์ˆœ์œผ๋กœ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ์ฆ‰, seq[::-1]์€ ์‹œํ€€์Šค๋ฅผ ์—ญ์ „(reverse)์‹œํ‚จ๋‹ค.

References


#22

How can you randomize the items of a list in place in Python?

random ๋ชจ๋“ˆ์˜ shuffle ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. random.shuffle์€ ์‹œํ€€์Šค ๊ฐ์ฒด์˜ ์š”์†Œ๋ฅผ ์ž„์˜๋กœ ์„ž์–ด์„œ ํ•ด๋‹น ์‹œํ€€์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

import random

random.seed(2021)       # ์‹œ๋“œ ๊ณ ์ •
lst = list(range(10))
print(lst)              # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(lst)
print(lst)              # [2, 7, 9, 3, 0, 5, 1, 4, 8, 6]

References


#23

Whatโ€™s the difference between iterator and iterable?

lst = [1, 2]            # iterable ๊ฐ์ฒด : ๋ฆฌ์ŠคํŠธ
lst_iter = iter(lst)    # iterator ๊ฐ์ฒด

print(next(lst_iter))   # 1
print(next(lst_iter))   # 2
print(next(lst_iter))   # StopIteration ์˜ˆ์™ธ ๋ฐœ์ƒ

iterable ๊ฐ์ฒด๋Š” iter ํ•จ์ˆ˜์— ์ธ์ž๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•œ, ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋ฆฌ์ŠคํŠธ(list), ๋”•์…”๋„ˆ๋ฆฌ(dictionary), ์ง‘ํ•ฉ(set), ๋ฌธ์ž์—ด(string) ๋“ฑ์ด ์žˆ๋‹ค.

iterable ๊ฐ์ฒด๋ฅผ iter ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋„ฃ์œผ๋ฉด iterable ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์ด iterator ๊ฐ์ฒด์ด๋‹ค. iterator ๊ฐ์ฒด๋ฅผ next ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ฃผ๋ฉด iterable ๊ฐ์ฒด์˜ ์š”์†Œ์˜ ๊ฐ’์„ ์ฐจ๋ก€๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ iterable ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ–ˆ๋‹ค๋ฉด, StopIteration ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ๋งŒ์•ฝ ๋‹ค์‹œ ์ˆœํšŒ๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด iter ํ•จ์ˆ˜๋กœ ์ƒˆ๋กœ์šด iterator ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

References


#24

How can you generate random numbers in Python?

random ๋ชจ๋“ˆ๋กœ ๊ฐ„๋‹จํžˆ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด random ๋ชจ๋“ˆ์„ importํ•˜๊ณ  ์‹œ๋“œ๊ฐ’์„ 2021๋กœ ๊ณ ์ •ํ•˜์ž.

import random
random.seed(2021)
  • 0๊ณผ 1์‚ฌ์ด์˜ ์ž„์˜์˜ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

print(random.random())          # 0.8363375023320742
  • ํŠน์ • ๋ฒ”์œ„ ๋‚ด์˜ ์ž„์˜์˜ ์ •์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

print(random.randint(0, 10))    # 10
  • ํŠน์ • ๋ฒ”์œ„ ๋‚ด์˜ n๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

n = 5
lst = range(1, 101)
print(random.sample(lst, 5))    # [70, 36, 32, 82, 5]

References


#25

What is the difference between range & xrange?

ํŒŒ์ด์ฌ2์—์„œ๋Š” range์™€ xrange ๋ชจ๋‘ ์กด์žฌํ•˜์ง€๋งŒ, ํŒŒ์ด์ฌ3๋ถ€ํ„ฐ๋Š” range๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ xrange๋กœ ๋™์ž‘ํ•˜๋„๋ก ๋ฐ”๋€Œ์–ด์„œ range๋งŒ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŒŒ์ด์ฌ2๋ฅผ ๊ธฐ์ค€์œผ๋กœ range์™€ xrange๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

range ๊ฐ์ฒด๋Š” ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ์ •์ˆ˜ ๋ฒ”์œ„์˜ ๊ฐ’์„ ์š”์†Œ๋กœ ๊ฐ™๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ range(3)๊ณผ [0, 1, 2]๋Š” ์™„์ „ํžˆ ๋™์ผํ•˜๋‹ค.

# python2
r = range(5)
print(r)            # [0, 1, 2, 3, 4]
print(type(r))      # <type 'list'>

xrange๋Š” ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋กœ, ์˜ค์ง ๋ฃจํ”„๋ฅผ ๋Œ๋•Œ๋งŒ ํ•ด๋‹น ๋ฒ”์œ„์˜ ์ •์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์— ๊ด€ํ•œ ์„ค๋ช…์€ ์—ฌ๊ธฐ์—์„œ!

#python2
r = xrange(5)
print(r)            # xrange(5)
print(type(r))      # <type 'xrange'>

for i in r:
    print i,
# >> 0 1 2 3 4

References


#26

How do you write comments in python?

#์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์„์„ ๋‹ฌ ์ˆ˜ ์žˆ๋‹ค.

# this is my comment

๋”ฐ์˜ดํ‘œ๋ฅผ ์ด์šฉํ•œ ์ฃผ์„์€ Docstring ํ˜•์‹์œผ๋กœ ์ž์„ธํ•œ ๋‚ด์šฉ์€ #32๋ฅผ ์ฐธ๊ณ !

References


#27

What is pickling and unpickling?

์šฐ์„  ์ง๋ ฌํ™”(Serialization)์™€ ์—ญ ์ง๋ ฌํ™”(Deserialization)์˜ ๊ฐœ๋…์„ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ง๋ ฌํ™”๋ž€ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ(byte stream)์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์„ ํŒŒ์ด์ฌ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์—ญ ์ง๋ ฌํ™”๋ผ๊ณ  ํ•œ๋‹ค.

pickle ๋ชจ๋“ˆ์€ ํŒŒ์ด์ฌ ๊ฐ์ฒด์˜ ์ง๋ ฌํ™”์™€ ์—ญ ์ง๋ ฌํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ์ด ๋•Œ ํŒŒ์ด์ฌ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•  ๋•Œ๋ฅผ pickling์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์„ ์—ญ ์ง๋ ฌํ™”ํ•  ๋•Œ๋ฅผ unpickling์ด๋ผ๊ณ  ํ•œ๋‹ค.

References


#28

What are the generators in python?

์ œ๋„ˆ๋ ˆ์ดํ„ฐ(Generator)๋ž€ Iterator ๊ฐ์ฒด๋ฅผ ๊ฐ„๋‹จํžˆ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 1) yield๋ฌธ๊ณผ ํ•จ์ˆ˜, 2) ํ‘œํ˜„์‹ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋ฐฉ๋ฒ• 1. yield๋ฌธ๊ณผ ํ•จ์ˆ˜

  • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜ ์ •์˜

def generator_list(value):
    for i in range(value):
        # ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์—ฌ๊ธฐ๋ฅผ ๊ธฐ์–ต
        yield i
  • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ next ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ

gen = generator_list(2)
print(next(gen))    # 0
print(next(gen))    # 1
print(next(gen))    # StopIteration ์—๋Ÿฌ ๋ฐœ์ƒ

๋ฐฉ๋ฒ• 2. ํ‘œํ˜„๋ฌธ

value = 2
gen = (i for i in range(value))
print(next(gen))    # 0
print(next(gen))    # 1
print(next(gen))    # StopIteration ์—๋Ÿฌ ๋ฐœ์ƒ

๊ทธ๋Ÿผ ์™œ ๋ฆฌ์ŠคํŠธ ๋Œ€์‹  ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ? ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ์— ๊ณต๊ฐ„์ด ํ• ๋‹น๋œ๋‹ค. ๋ฐ˜๋ฉด ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋Š” ๋ง๊ทธ๋Œ€๋กœ next ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋  ๋•Œ ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ๊ฐ’๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ๋‹ค! ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž‘์€ ๋ฐ์ดํ„ฐ๋ผ๋ฉด ์ƒ๊ด€์—†์ง€๋งŒ ํฐ ๋ฐ์ดํ„ฐ์—์„œ๋Š” ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ์ด ํ•„์ˆ˜์ด๋‹ค.

References


#29

How will you capitalize the first letter of string?

๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ capitalize๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

string = "boostcamp ai tech"
print(string.capitalize())      # Boostcamp ai tech

์ž์„ธํ•œ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ !

References


#30

How will you convert a string to all lowercase?

๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ lower์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

string = "BOOSTCAMP AI TECH"
print(string.lower())           # boostcamp ai tech

References


#31

How to comment multiple lines in python?

#์„ ์—ฌ๋Ÿฌ ์ค„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ค„์˜ ์ฃผ์„์„ ๋‹ฌ ์ˆ˜ ์žˆ๋‹ค.

# this is my comment
# I am commenting multiple lines
# - boostcamp ai tech team 4

๋”ฐ์˜ดํ‘œ๋ฅผ ์ด์šฉํ•œ ์ฃผ์„์€ Docstring ํ˜•์‹์œผ๋กœ ์ž์„ธํ•œ ๋‚ด์šฉ์€ #32๋ฅผ ์ฐธ๊ณ !

References


#32

What are docstrings in Python?

docstrings์€ ์ฃผ์„์€ ์•„๋‹ˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ ์–ด๋†“์€ ๋ฌธ์„œ(documentation)์ด๋‹ค. docstrings๋Š” __doc__ ์†์„ฑ์ด๋‚˜ help() ๋‚ด์žฅ ํ•จ์ˆ˜๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. docstrings๋Š” ์ž‘์€ ๋”ฐ์˜ดํ‘œ(') ํ˜น์€ ํฐ ๋”ฐ์˜ดํ‘œ(") 3๊ฐœ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

def mult(a, b):
  """
  Returns the product of a and b
  - a(float): any real number
  - b(float): any real number
  """
  return a*b
print(help(mult))
print(mult.__doc__)

๐Ÿ’ก Comments(์ฃผ์„) vs Dosctrings comments์™€ docstrings์€ ๊ฐ๊ฐ #, """์„ ์“ด๋‹ค๋Š” ์ ์—์„œ ๋‹ค๋ฅด์ง€๋งŒ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ์ฝ๋Š” ๋Œ€์ƒ์ด๋‹ค. comments๋Š” ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋™๋ฃŒ ํ˜น์€ ๋‚˜์ค‘์— ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋‚˜์—๊ฒŒ ๋‚จ๊ฒจ๋†“๋Š” ๊ฒƒ์ด๊ณ  docstrings๋Š” ์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž๋“ค์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋‚จ๊ฒจ๋†“๋Š” ๊ฒƒ์ด๋‹ค.

References


#33

What is the purpose of is, not and in operators?

is๋Š” ๊ฐ์ฒด ๋น„๊ต ์—ฐ์‚ฐ์ž(identity operator)๋กœ ๋‘ ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด์˜ id๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ณดํ†ต ๋‘ ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

a = [1, 2, 3]
b = a
c = a.copy()

print(a is b) # True
print(a is c) # False

not์€ ๋‹จํ•ญ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž(logical operator)๋กœ ๋’ค์— ์˜ค๋Š” boolean ๊ฐ’์„ ๋’ค์ง‘๋Š”๋‹ค. ๋’ค์— ์˜ค๋Š” ๊ฐ’์ด True์ด๋ฉด False๋ฅผ, False์ด๋ฉด True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

print(not True)   # False
print(not False)  # True

in์€ ๋ฉค๋ฒ„ ์—ฐ์‚ฐ์ž(membership operator)๋กœ, ์š”์†Œ a์™€ ์‹œํ€€์Šค b๊ฐ€ ์žˆ๋Š” ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ a in b๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ๋งŒ์•ฝ a๊ฐ€ b ์•ˆ์— ์žˆ๋‹ค๋ฉด True๋ฅผ, ์—†์œผ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

b = "abc"
print("a" in b) # True
print("z" in b) # False

References


#34

What is the usage of help() and dir() function in Python?

help()๋Š” docstrings๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค๋ฉด ํ•ด๋‹น docstrings๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. docstrings์—๋Š” ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์— ๊ด€ํ•œ ๋‚ด์šฉ์ด ๋‹ด๊ฒจ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค. docstrings์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ #31 ์ฐธ๊ณ !

dir()์€ ์ธ์ž๋กœ ๋„ฃ์€ ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์š”์†Œ๋กœ ๊ฐ–๋Š” ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. dir์€ ์‚ฌ์šฉํ•  ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค. ๋‹ค๋งŒ ์ธ์ž๊ฐ€ ์—†๋‹ค๋ฉด ํ˜„์žฌ ์ง€์—ญ ์Šค์ฝ”ํ”„์—์„œ ์ •์˜๋œ ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

def func(x):
  return x

a = 3
print(dir(a))     # ๊ฐ์ฒด a์— ๋Œ€ํ•œ ์†์„ฑ, ๋ฉ”์„œ๋“œ
print(dir(func))  # ํ•จ์ˆ˜ func์— ๋Œ€ํ•œ ์†์„ฑ, ๋ฉ”์„œ๋“œ
print(dir())      # ์ง€์—ญ ์Šค์ฝ”ํ”„์— ์ •์˜๋œ a์™€ func

References


#35

Whenever Python exits, why isnโ€™t all the memory de-allocated?

๋‹ค๋ฅธ ๊ฐ์ฒด๋‚˜ ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ˆœํ™˜ ์ฐธ์กฐํ•˜๋Š” ํŒŒ์ด์ฌ ๋ชจ๋“ˆ์€ ํ•ญ์ƒ ํ•ด์ œ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋˜ํ•œ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์˜ˆ์•ฝํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ํ•ด๋‹น ๋ถ€๋ถ„์„ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŒŒ์ด์ฌ ์ข…๋ฃŒ ์‹œ, ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

๐Ÿ’ก ์ˆœํ™˜ ์ฐธ์กฐ(Circular Reference) ๋‘ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.

๐Ÿ’ก ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(Global Namespace) ๋„ค์ž„์ŠคํŽ˜์ด์Šค(namespace)๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ํŠน์ • ๊ฐ์ฒด๋ฅผ ์ด๋ฆ„์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” importํ•œ ๋ชจ๋“ˆ๋“ค์˜ ์ด๋ฆ„์„ ํฌํ•จํ•˜๋ฉฐ, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ์ง€์†๋œ๋‹ค.

References


#36

What is a dictionary in Python?

๋”•์…”๋„ˆ๋ฆฌ๋Š” key๊ฐ’๊ณผ ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” value๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์„ ๋งํ•œ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜จ ์ˆœ์„œ๊ฐ€ ์ƒ๊ด€์ด ์—†๊ณ , ์ธ๋ฑ์‹ฑ์ด ๋˜์–ด ์žˆ์–ด key๊ฐ’์œผ๋กœ ์š”์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ(= value) ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ, key๊ฐ’์€ ๊ณ ์œ  ๊ฐ’์ด๋ฏ€๋กœ key๊ฐ’ ์ค‘๋ณต์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฃผ๋กœ ์ž์ฒด์ ์œผ๋กœ ๋งŒ๋“  key๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋”•์…”๋„ˆ๋ฆฌ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋”•์…”๋„ˆ๋ฆฌ์˜ ๋œป์€ ์‚ฌ์ „์ด๋‹ค. ์˜ํ•œ ์‚ฌ์ „์—์„œ ๊ฐ ์˜๋‹จ์–ด(ex. beautiful)์— ๋Œ€์‘ํ•˜๋Š” ๋‹จ์–ด(ex. ์•„๋ฆ„๋‹ค์šด)๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์˜๋‹จ์–ด๊ฐ€ key๊ฐ’์ด๊ณ  ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” ๋‹จ์–ด๋ฅผ value๊ฐ’์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ง•1 : ๋”•์…”๋„ˆ๋ฆฌ๋Š” {, }๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ { key1 : value1, key2 : value2, ... } ๋กœ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • key๊ฐ’์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ , value๊ฐ’์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฐ’๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • key๊ฐ’์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐ’์ด ๋ณ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ type error๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

ex1 = {'name':'Groot', 'lover':'penguin', 'feature':'really cute'}

# ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ์ž๋กœ ์ง‘ํ•ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ
ex2 = dict(name='Groot', lover='penguin', feature='really cute')

# key๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’, value๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’๊ณผ ๋ณ€ํ•˜๋Š” ๊ฐ’ ๋‘˜ ๋‹ค ๊ฐ€๋Šฅ
ex3 = {[10, 3]:'birthday'}	# type error!

ํŠน์ง•2 : ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋”•์…”๋„ˆ๋ฆฌ ์Œ(key : value)์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ถ”๊ฐ€ : dict_ex[ ์ƒˆ๋กœ์šด key๊ฐ’ ] = ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” value๊ฐ’์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ œ๊ฑฐ : del ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ํŠน์ • ์Œ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ๋”•์…”๋„ˆ๋ฆฌ ์•ž์— del ํ‚ค์›Œ๋“œ๋ฅผ ์“ฐ๋ฉด ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ์™„์ „ํžˆ ์ œ๊ฑฐ๋œ๋‹ค.

ex = {'Kevin':180, 'Anna':165, 'Penelope':175}

# ์ƒˆ๋กœ์šด ๋”•์…”๋„ˆ๋ฆฌ ์Œ ์ถ”๊ฐ€
ex['Groot'] = 100
print(ex)		# {'Kevin': 180, 'Anna': 165, 'Penelope': 175, 'Groot': 100}

# del ํ‚ค์›Œ๋“œ๋กœ ๋”•์…”๋„ˆ๋ฆฌ ์Œ ์ œ๊ฑฐ
del ex['Penelope']
print(ex)		# {'Kevin': 180, 'Anna': 165, 'Groot': 100}

# del ํ‚ค์›Œ๋“œ๋กœ ๋”•์…”๋„ˆ๋ฆฌ ์™„์ „ ์ œ๊ฑฐ
del ex
print(ex)       	# name error!

ํŠน์ง•3 : ๋”•์…”๋„ˆ๋ฆฌ์˜ key๊ฐ’์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค.

  • key๊ฐ’์€ ๊ณ ์œ ๊ฐ’์ด๋ฏ€๋กœ 2๊ฐœ ์ด์ƒ์˜ key๊ฐ’์ด ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค.

    • key๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” value๊ฐ’์„ ์–ด๋–ค ๊ฑธ ๋ถˆ๋Ÿฌ์•ผํ• ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ.

  • key๊ฐ’์ด ์ค‘๋ณต๋  ๊ฒฝ์šฐ ํ•˜๋‚˜๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๊ฒƒ๋“ค์ด ๋ชจ๋‘ ๋ฌด์‹œ๋œ๋‹ค.

    • key๊ฐ’์— ๋Œ€์ž…ํ•œ ์ตœ๊ทผ์˜ value๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

ex = {'name': 'Groot', 'lover': 'Penguin', 'feature': 'cute', 'feature': 'handsome'}

print(ex)  # {'name': 'Groot', 'lover': 'Penguin', 'feature': 'handsome'}

References


#37

How can the ternary operators be used in python?

ternary operators(์‚ผํ•ญ ์—ฐ์‚ฐ์ž)๋Š” ์กฐ๊ฑด๋ฌธ์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์ž์ด๋ฉฐ [true_value] if [condition] else [false_value]์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋œ๋‹ค.

a = 123
print("a is 123" if a==123 else "a is not 123") # a is 123

a = 456
print("a is 123" if a==123 else "a is not 123") # a is not 123

References


#38

What does this mean: *args, **kwargs? And why would we use it?

*args๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” argument์˜ ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์—†๊ฑฐ๋‚˜, list๋‚˜ tuple์˜ argument๋“ค์„ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

ํŒŒ์ด์ฌ์—์„œ๋Š” ์–ด๋””์„œ๋ถ€ํ„ฐ ์–ด๋””๊นŒ์ง€ *args์— ๋‹ด์•„์•ผ ํ• ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋ฅผ ์•ž์— ๋‘๊ณ  ๊ทธ ๋’ค์— *args๋ฅผ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

def name(*args):
    print(args)

name("์ƒ๋ฆฌ", "ํŽญ๊ท„", "ํžˆ์Šค", "์›๋”œ")
# output: ('์ƒ๋ฆฌ', 'ํŽญ๊ท„', 'ํžˆ์Šค', '์›๋”œ')

**kwargs๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” keyword argument์˜ ์ˆ˜๋ฅผ ๋ชจ๋ฅด๊ฑฐ๋‚˜, dictionary์˜ keyword argument๋“ค์„ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

*args์™€ **kwargs๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ *args๋ฅผ **kwargs๋ณด๋‹ค ์•ž์— ๋‘์–ด์•ผ ํ•œ๋‹ค.

def name(**kwargs):
    print(kwargs)

name(sally="์ƒ๋ฆฌ", penguin="ํŽญ๊ท„", heath="ํžˆ์Šค", adc="์›๋”œ")
# output: {'sally': '์ƒ๋ฆฌ', 'penguin': 'ํŽญ๊ท„', 'heath': 'ํžˆ์Šค', 'adc': '์›๋”œ'}

์ผ๋ฐ˜ ๋ณ€์ˆ˜, *args, **kwargs๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

def function_name(์ผ๋ฐ˜๋ณ€์ˆ˜, *args, **kwargs)

References


#39

What does len() do?

len() ํ•จ์ˆ˜๋Š” object์˜ ๊ธธ์ด(item์˜ ์ˆ˜)๋ฅผ return ํ•œ๋‹ค.

argument๋กœ๋Š” sequence(string, bytes, tuple, list, range, ...), collection(dictionary, set, frozenset, ...)์„ ๋ฐ›๋Š”๋‹ค.

stg = "ai-tech-interview"
len(stg)  #17

ex_list = ["ai", "tech", "interview"]
len(ex_list)  # 3

References


#40

Explain split(), sub(), subn() methods of โ€œreโ€ module in Python.

ํŒŒ์ด์ฌ์—์„œ ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด โ€œreโ€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌธ์ž์—ด ์ˆ˜์ •์„ ์œ„ํ•ด Python์˜ โ€œreโ€ ๋ชจ๋“ˆ์€ 3 ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • re.split(pattern, string, maxplit=0): pattern์„ ๊ตฌ๋ถ„์ž๋กœ string์„ ๋ถ„๋ฆฌํ•˜์—ฌ list๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

re.split('<[^<>]*>', '<html> Wow <head> header </head> <body> Hey </body> </html>')
# output: ['', ' Wow ', ' header ', ' ', ' Hey ', ' ', '']
  • re.sub(pattern, repl, string, count=0): string์—์„œ pattern๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•˜์—ฌ repl๋กœ ๊ต์ฒดํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

re.sub('\d{4}', 'XXXX', '010-1234-5678')
# output: '010-XXXX-XXXX'
  • re.subn(pattern, repl, string, count=0): sub์™€ ๋™์ผํ•˜๋‚˜, ๊ฒฐ๊ณผ๋กœ (๊ฒฐ๊ณผ๋ฌธ์ž์—ด, ๋งค์นญํšŸ์ˆ˜)๋ฅผ ํŠœํ”Œ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

re.subn('\d{4}', 'XXXX', '010-1234-5678')
# output: ('010-XXXX-XXXX', 2)

References


#41

What are negative indexes and why are they used?

์ธ๋ฑ์Šค

  • ์‹œํ€€์Šค ๊ฐ์ฒด์— [](๋Œ€๊ด„ํ˜ธ)๋ฅผ ๋ถ™์—ฌ ์‚ฌ์šฉ

  • ์‹œํ€€์Šค ๊ฐ์ฒด์˜ ์ธ๋ฑ์Šค๋Š” ํ•ญ์ƒ 0๋ถ€ํ„ฐ ์‹œ์ž‘

  • ์‹œํ€€์Šค ๊ฐ์ฒด(list, tuple, range, ๋ฌธ์ž์—ด)์— ์‚ฌ์šฉ๊ฐ€๋Šฅ

  • ์‹œํ€€์Šค๊ฐ์ฒด[์ธ๋ฑ์Šค]

์Œ์ˆ˜ ์ธ๋ฑ์Šค

  • ์ธ๋ฑ์Šค๋ฅผ ์Œ์ˆ˜๋กœ ์ง€์ •ํ•˜๋ฉด ๋’ค์—์„œ๋ถ€ํ„ฐ ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค.

    • -1์€ ๋’ค์—์„œ ์ฒซ ๋ฒˆ์งธ, -5๋Š” ๋’ค์—์„œ ๋‹ค์„ฏ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋œปํ•œ๋‹ค.

  • ์‹œํ€€์Šค ๊ฐ์ฒด(list, tuple, range, ๋ฌธ์ž์—ด)์— ์‚ฌ์šฉ๊ฐ€๋Šฅ

example = ['Boostcamp', 'AI', 'Tech', 'penguin', 'sally', 'adc', 'heath']
print(example[5]) # adc
print(example[-2])  # adc
print(example[-4:]) # ['penguin', 'sally', 'adc', 'heath']

example = "BoostDevs"
print(example[:5])  # Boost
print(example[-4:-1]) # Dev

References


#42

What are Python packages?

๋ชจ๋“ˆ

๋ชจ๋“ˆ์€ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๋ณดํ†ต ํ•˜๋‚˜์˜ ํŒŒ์ด์ฌ .py ํŒŒ์ผ์ด ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด ๋œ๋‹ค. ๋ชจ๋“ˆ ์•ˆ์—๋Š” ํ•จ์ˆ˜, ํด๋ž˜์Šค, ํ˜น์€ ๋ณ€์ˆ˜๋“ค์ด ์ •์˜๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๋ชจ๋“ˆ์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ #9. ๋ชจ๋“ˆ ์ฐธ๊ณ !

ํŒจํ‚ค์ง€

ํŒจํ‚ค์ง€๋Š” ํŠน์ • ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ๋ฌถ์€ ๊ฒƒ์œผ๋กœ ํŒจํ‚ค์ง€๋Š” ๋ชจ๋“ˆ์— namespace๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํŒจํ‚ค์ง€๋Š” ํ•˜๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋†“์—ฌ์ง„ ๋ชจ๋“ˆ๋“ค์˜ ์ง‘ํ•ฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ, ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ __init__.py ๋ผ๋Š” ํŒจํ‚ค์ง€ ์ดˆ๊ธฐํ™” ํŒŒ์ผ์ด ์กด์žฌํ•œ๋‹ค.

ํŒจํ‚ค์ง€๋Š” ๋ชจ๋“ˆ๋“ค์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ์„œ ํŒจํ‚ค์ง€ ์•ˆ์—๋Š” ๋˜๋‹ค๋ฅธ ์„œ๋ธŒ ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํŒŒ์ผ์‹œ์Šคํ…œ์œผ๋กœ ๋น„์œ ํ•˜๋ฉด ํŒจํ‚ค์ง€๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ด๋‹นํ•˜๊ณ , ๋ชจ๋“ˆ์€ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์˜ ํŒŒ์ผ์— ํ•ด๋‹นํ•œ๋‹ค.

ํŒจํ‚ค์ง€๋“ค์˜ ๋ชจ์Œ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ #52. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฐธ๊ณ !

References


#43

How can files be deleted in Python?

os ๋ชจ๋“ˆ์„ import ํ•œ ํ›„ os.remove() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์‚ญ์ œํ• ์ˆ˜์žˆ๋‹ค.

import os
os.remove("ai-tech-interview.txt")

์ž์„ธํ•œ ๋‚ด์šฉ์€ os.remove - Python documentation ์ฐธ๊ณ !


#44

What are the built-in types of python?

Python์˜ Built-in type์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • Integer

  • Floating-point

  • Complex number

  • String

  • Boolean

  • Built-in function

์ž์„ธํ•œ ๋‚ด์šฉ์€ Built-in Types - Python documentation ์ฐธ๊ณ !

๐Ÿ’ก ๋นŒํŠธ์ธbuilt-in์ด๋ž€? ์–ด๋–ค ๊ธฐ๋Šฅ์ด๋‚˜ ํ•จ์ˆ˜ ๋“ฑ์ด ๋‚ด์žฅ ๋˜๋Š” ๋นŒํŠธ์ธ๋˜์–ด ์žˆ๋‹ค๋Š” ๋œป์€ ๊ทธ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋„๋ก ์ค€๋น„๋˜์–ด ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ basic-terminology-in-programming - shoark7 ์ฐธ๊ณ ํ•  ๊ฒƒ.


#45

What advantages do NumPy arrays offer over (nested) Python lists?

numpy array๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งŒ ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. Python list์™€ ๋‹ฌ๋ฆฌ ๋‹ค์ด๋‚˜๋ฏน ํƒ€์ดํ•‘์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, C์˜ Array๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

Python list๋Š” ๋ฐ์ดํ„ฐ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ํ•ด๋‹น ์ฃผ์†Œ์— ๊ฐ€์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๋ฐ˜๋ฉด Numpy array๋Š” C์˜ ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•˜์—ฌ ์—ฐ์†๋œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

Numpy์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ #66. Numpy ์ฐธ๊ณ !

References


#46

How to add values to a python list?

append(), extend(), insert() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ list์— value๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

append()

list.append(x) ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, $O(1)$์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ๊ด„ํ˜ธ ์•ˆ์— ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ list ๋งจ ๋์— ์ถ”๊ฐ€ํ•œ๋‹ค. ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๊ฐ์ฒด๋กœ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ž…๋ ฅํ•œ ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ iterable ์ž๋ฃŒํ˜•์ด๋”๋ผ๋„ ๊ฐ์ฒด๋กœ ์ €์žฅํ•œ๋‹ค.

nums = [1, 2, 3]
nums.append(4)
print(nums) # [1, 2, 3, 4]

nums.append([5, 6])
print(nums) # [1, 2, 3, 4, [5, 6]]

extend()

list.extend(iterable) ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, $O(N)$ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ž…๋ ฅํ•œ iterable ์ž๋ฃŒํ˜•์˜ ํ•ญ๋ชฉ ๊ฐ๊ฐ์„ list์˜ ๋์— ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•œ๋‹ค. iterable ์ž๋ฃŒํ˜•์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ iterable ์ž๋ฃŒํ˜• ์•ˆ์— ์žˆ๋Š” ํ•ญ๋ชฉ์ด ํ•˜๋‚˜์”ฉ ๋–ผ์–ด์ ธ์„œ ์ถ”๊ฐ€๋œ๋‹ค. append์™€ ๋™์ผํ•˜๊ฒŒ ์š”์†Œ๋ฅผ list์˜ ๋์— ์ถ”๊ฐ€ํ•˜์ง€๋งŒ append์™€ ๋‹ค๋ฅธ ์ ์€ ๊ด„ํ˜ธ ์•ˆ์—๋Š” iterable ์ž๋ฃŒํ˜•๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. iterable ์ž๋ฃŒํ˜•์ด ์•„๋‹Œ ๊ฒฝ์šฐ TypeError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

nums = [1, 2, 3]
nums.extend([4])
print(nums) # [1, 2, 3, 4]

nums.extend([5, 6])
print(nums) # [1, 2, 3, 4, 5, 6]

insert()

  • ์‹œ๊ฐ„๋ณต์žก๋„: ``

list.insert(i, x) ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, $O(N)$ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. list์˜ ์›ํ•˜๋Š” ์œ„์น˜ i ์•ž์— ์ถ”๊ฐ€ํ•  ๊ฐ’ x๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. i๋Š” ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. ์Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋์„ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ถ”๊ฐ€ํ•  ๊ฐ’ x๋Š” ๊ฐ์ฒด๋กœ ์ถ”๊ฐ€๋˜๋ฉฐ iterable ์ž๋ฃŒํ˜•์ด๋”๋ผ๋„ ๊ฐ์ฒด๋กœ ์ €์žฅ๋œ๋‹ค.

nums = [1, 2, 3]
nums.insert(0, 10)
print(nums) # [10, 1, 2, 3]

nums.insert(-1, 99)
print(nums) # [10, 1, 2, 99, 3]

nums.insert(len(nums), [20, 30])
print(nums) # [10, 1, 2, 99, 3, [20, 30]]

+ ์—ฐ์‚ฐ์ž

list_1 + list_2 ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, $O(1)$ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

nums = [1, 2, 4, 6, 1, 5]
print(nums + [10, 9, 8, 7]) # [1, 2, 4, 6, 1, 5, 10, 9, 8, 7]

References


#47

How to remove values to a python list?

remove(), pop() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ list์— value๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

remove()

remove()๋Š” ์ง€์šฐ๊ณ ์ž ํ•˜๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ, ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋งŒ์•ฝ ์ง€์šฐ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ ๋‚ด์— 2๊ฐœ ์ด์ƒ์ด ์žˆ๋‹ค๋ฉด ์ˆœ์„œ์ƒ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฐ’์„ ์ง€์šฐ๊ฒŒ ๋œ๋‹ค. ๊ฐ’์„ ์‚ญ์ œํ•  ๋•Œ ์‚ญ์ œ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. remove()๋Š” ์‹œ๊ฐ„๋ณต์žก๋„ $O(N)$๋ฅผ ๊ฐ–๋Š”๋‹ค.

example = [1, 2, 3, 4, 5, 1]
example.remove(1)
print(example)  # [2, 3, 4, 5, 1]

pop()

pop()์€ ๋ฆฌ์ŠคํŠธ์—์„œ ์ง€์šฐ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ›์•„์„œ ์ง€์šฐ๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ฐ’์„ ์‚ญ์ œํ•  ๋•Œ ์‚ญ์ œ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ์‚ญ์ œ๋˜๋ฉฐ ๋ฐ˜ํ™˜๋œ๋‹ค. pop()์€ ์‹œ๊ฐ„๋ณต์žก๋„ $O(N)$๋ฅผ ๊ฐ–๋Š”๋‹ค.

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(example.pop())  # 10
print(example)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(example.pop(3)) # 4
print(example)  # [1, 2, 3, 5, 6, 7, 8, 9, 10]

del

del list[i] ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‹œ๊ฐ„๋ณต์žก๋„ $O(N)$์„ ๊ฐ–๋Š”๋‹ค. ๊ฐ’์„ ์‚ญ์ œํ•  ๋•Œ ์‚ญ์ œ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del example[7]
print(example)  # [1, 2, 3, 4, 5, 6, 7, 9, 10]

example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del example[7:]
print(example)  # [1, 2, 3, 4, 5, 6, 7]

References


#48

Does Python have OOP concepts?

Python์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. Python์˜ ์ฃผ์š” OOP ๊ฐœ๋…์—๋Š” Class, Object, Method, Inheritance(์ƒ์†), Polymorphism(๋‹คํ˜•์„ฑ), Data Abstraction(๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”), Encapsulation(์บก์Аํ™”)์„ ํฌํ•จํ•œ๋‹ค.

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ #55. Inheritance, #59. Polymorphism, #60. Encapsulation, #61. Data Abstraction ์ฐธ๊ณ !

References


#49

What is the difference between deep and shallow copy?

Shallow copy๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด(๋ณ€์ˆ˜)๋ฅผ ๋งŒ๋“  ํ›„์— ์›๋ณธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ฐธ์กฐ(reference)๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์„œ๋กœ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ช…์ด์ง€๋งŒ ๋ณธ์งˆ์ ์œผ๋กœ ์„œ๋กœ ๊ฐ™์€ ๋Œ€์ƒ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜ ์—ญ์‹œ ์ˆ˜์ •์ด ๋œ๋‹ค.

๊ฐ€๋ณ€ํ˜•(mutable) ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด์„œ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ€๋ณ€ํ˜•(mutable) ์ž๋ฃŒํ˜•์€ ๊ฐ™์€ ์ฃผ์†Œ์—์„œ ๊ฐ’(value)์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–•์€ ๋ณต์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ˜๋ฉด ๋ถˆ๋ณ€ํ˜•(immutable) ์ž๋ฃŒํ˜•์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์žฌ๋ฐฐ์ •์„ ํ†ตํ•ด ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊พผ๋‹ค. ๋”ฐ๋ผ์„œ ์žฌ๋ฐฐ์ •์ด ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๋‹ฌ๋ผ์ง„๋‹ค.

a = [1, 2, 3, 4, 5]
b = a    # shallow copy
a[1] = 10
print(a, b) # [1, 10, 3, 4, 5] [1, 10, 3, 4, 5]

Deep copy๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด(๋ณ€์ˆ˜)๋ฅผ ๋งŒ๋“  ๋’ค์— ์›๋ณธ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋ณ€์ˆ˜์— ์ž…๋ ฅํ•œ๋‹ค. ์„œ๋กœ ๊ฐ’๋งŒ ๊ฐ™์„ ๋ฟ ๋ณธ์งˆ์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ณ€์ˆ˜๊ฐ€ ์ˆ˜์ •๋  ์‹œ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š๋Š”๋‹ค.

a = [1, 2, 3, 4, 5]
b = a[:]    # deep copy
a[1] = 10
print(a, b) # [1, 10, 3, 4, 5] [1, 2, 3, 4, 5]
import copy
a = [1, 2, 3, 4, 5]
b = copy.deepcopy(a)    # deep copy
a[1] = 10
print(a, b) # [1, 10, 3, 4, 5] [1, 2, 3, 4, 5]

References


#50

How is Multithreading achieved in Python?

ํŒŒ์ด์ฌ์—์„œ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ threding ๋ชจ๋“ˆ(High level)์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ thread ๋ชจ๋“ˆ(Low level)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํ˜„์žฌ thread ๋ชจ๋“ˆ์€ deprecated ๋˜์–ด threading ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹น์—ฐํžˆ ์†๋„๊ฐ€ ๋นจ๋ผ์งˆ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŒŒ์ด์ฌ์˜ GIL(Global Interpreter Lock) ์ •์ฑ…์œผ๋กœ ์ธํ•ด, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค ํ•˜๋”๋ผ๋„, ์†๋„๋Š” ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์™€ ๋ณ„๋ฐ˜ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.

ํ•˜๋‚˜์˜ ์ž์›์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋ฌด๋Ÿฐ ๊ทœ์น™์—†์ด ์ ‘๊ทผํ•˜๋ฉด, ์ž์› ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž์›์— lock์„ ๋‘๋Š”๋ฐ, Python์€ ๋ชจ๋“  ์ž์›์˜ lock์„ globalํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค. ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋กœ์ธํ•ด, ์ž์›์„ ๊ณต์œ ํ•˜๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰์‹œํ‚จ๋‹ค๊ณ  ํ•ด๋„, ๊ฒฐ๊ตญ GIL ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ’ก ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์ด ์œ ์šฉํ•œ ๊ฒฝ์šฐ GIL์€ cpu ๋™์ž‘์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ๋œ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ cpu ๋™์ž‘์„ ๋งˆ์น˜๊ณ  I/O ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ์—๋Š” ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ cpu ๋™์ž‘์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ cpu ๋™์ž‘์ด ๋งŽ์ง€ ์•Š๊ณ  I/O๋™์ž‘์ด ๋” ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋งŒ์œผ๋กœ ์„ฑ๋Šฅ์ ์œผ๋กœ ํฐ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

References


#51

What is the process of compilation and linking in python?

ํŒŒ์ด์ฌ ํŒŒ์ผ(.py)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์†Œ์Šค ์ฝ”๋“œ๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(byte code)๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ, .pyc, .pyo ํŒŒ์ผ ํ˜•์‹์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ์ด ๋•Œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์ปดํŒŒ์ผ(compilation) ๋‹จ๊ณ„๋ผ๊ณ  ํ•œ๋‹ค.

ํŒŒ์ด์ฌ ๊ฐ€์ƒ๋จธ์‹ (Python Virtual Machine)์ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด(machine code)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์–ด๋–ค ์šด์˜์ฒด์ œ๋“  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ด ๋•Œ ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ๊ณผ์ •์ด ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ๋งํฌ(linking) ๋‹จ๊ณ„๋ผ๊ณ  ํ•œ๋‹ค.

์ฐธ๊ณ ๋กœ dis ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

import dis

def mult(a, b):
    return a*b

dis.dis(mult)
# output:
# 4           0 LOAD_FAST                0 (a)
#             2 LOAD_FAST                1 (b)
#             4 BINARY_MULTIPLY
#             6 RETURN_VALUE

References


#52

What are Python libraries? Name a few of them.

ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŒจํ‚ค์ง€์˜ ๋ชจ์Œ์ด๋‹ค.

์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋Š” Numpy, Pandas, Matplotlib, Scikit-learn ๋“ฑ์ด ์žˆ๋‹ค.

ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ #42. ํŒจํ‚ค์ง€ ์ฐธ๊ณ !


#53

What is split used for?

split()์€ ํŠน์ • ๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

str.split(sep=None, maxsplit=-1)

sep์„ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์— ์žˆ๋Š” ๋‹จ์–ด list๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

sep์ด ์ง€์ •๋˜๋ฉด ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜๊ณ , sep์ด ์ง€์ •๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ None์ธ ๊ฒฝ์šฐ์—๋Š” whitespace๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•œ๋‹ค.

maxsplit์ด ์ง€์ •๋˜๋ฉด ๊ทธ ์ˆ˜๋งŒํผ์˜ ๋ถ„ํ• ์ด ์ˆ˜ํ–‰๋˜๊ณ , maxsplit์ด ์ง€์ •๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ -1์ธ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ถ„ํ• ์ด ์ˆ˜ํ–‰๋œ๋‹ค.

a = "ai tech interview"
print(a.split())  # ['ai', 'tech', 'interview']
a = "ai                    tech          interview"
print(a.split())  # ['ai', 'tech', 'interview']
a = "ai-tech-interview"
print(a.split("-")) # ['ai', 'tech', 'interview']
a = "ai-tech-interview"
print(a.split("-", 1))  # ['ai', 'tech-interview']

References


#54

How to import modules in python?

import [ํŒจํ‚ค์ง€/๋ชจ๋“ˆ]
from [ํŒจํ‚ค์ง€] import [๋ชจ๋“ˆ/๋ณ€์ˆ˜/ํ•จ์ˆ˜/ํด๋ž˜์Šค]
from [๋ชจ๋“ˆ] import [๋ณ€์ˆ˜/ํ•จ์ˆ˜/ํด๋ž˜์Šค]

import ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

import numpy        # importing using the original module name
import numpy as np  # importing using an alias name
from numpy import * # imports everything present in the numpy module
from numpy import argmax as arm # ์ด๋Ÿฐ๊ฑฐ๋„ ๋œ๋‹ค
nums = [1, 2, 3, 4, 5]
print(arm(nums)) # 4

References


#55

Explain Inheritance in Python with an example.

์ƒ์†์„ ํ†ตํ•ด ์ƒ์œ„ (๋ถ€๋ชจ) ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์„ ๋ชจ๋‘ ํ•˜์œ„ (์ž์‹) ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋” ์ข‹์•„์ง€๊ณ , ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค.

ํŒŒ์ด์ฌ์€ ๋ถ€๋ชจ ํด๋ž˜์Šค A ๋ฅผ ์ž์‹ ํด๋ž˜์Šค B ๊ฐ€ ์ƒ์†ํ•˜๋Š” Single Inheritance, ๋ถ€๋ชจ ํด๋ž˜์Šค A ๋ฅผ ์ž์‹ ํด๋ž˜์Šค B ๊ฐ€ ๋‹ค์‹œ B ๋ฅผ ์ž์‹ ํด๋ž˜์Šค C ๊ฐ€ ์ƒ์†ํ•˜๋Š” Multi-level Inheritance, ๋ถ€๋ชจ ํด๋ž˜์Šค A ๊ฐ€ ์—ฌ๋Ÿฌ ์ž์‹ ํด๋ž˜์Šค์— ์ƒ์†๋˜๋Š” Hierarchical Inheritance, ํ•˜๋‚˜์˜ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” Multiple Inheritance ๊ฐ€ ์žˆ๋‹ค.


#56

How are classes created in Python?

class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ, ํด๋ž˜์Šค๋ช… ์˜† ๊ด„ํ˜ธ์— ์ƒ์†๋ฐ›์„ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ __init__ ์ด๋ผ๋Š” ๋งค์ง ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์„ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํžˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ๊ฐ์ฒด๋กœ ์„ ์–ธ๋  ๋•Œ, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

ํด๋ž˜์Šค ๋‚ด์—์„œ๋Š” ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ํด๋ž˜์Šค ๊ฐ์ฒด์—์„œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

class MyClass():
    def __init__(self, feature):
        self.feature = feature
        ...

    def my_method(self):
        ...

#57

What is monkey patching in Python?

์ฃผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์–ด๋–ค ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์˜ ์ผ๋ถ€ (ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜ ๋“ฑ) ๋ฅผ ๋กœ์ปฌ์—์„œ ๋Ÿฐํƒ€์ž„์œผ๋กœ๋งŒ instance ๋ฅผ ํ†ตํ•ด ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.

์˜ˆ์‹œ๋กœ heath.py ํŒŒ์ผ์˜ A ํด๋ž˜์Šค์— a ๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ A ๋ฅผ import ํ•˜์—ฌ a ํ•จ์ˆ˜ ๋Œ€์‹  new_a ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

from heath import A

A.a = new_a
my_A = A() # A ํด๋ž˜์Šค ๊ฐ์ฒด ํ• ๋‹น
my_A.a # new_a ๊ฐ€ ๋™์ž‘

References


#58

Does python support multiple inheritance?

ํŒŒ์ด์ฌ์€ ์ž๋ฐ”์™€ ๋‹ค๋ฅด๊ฒŒ multiple inheritance ์„ ์ง€์›ํ•œ๋‹ค. multiple inheritance ์˜ ๊ฐœ๋…์€ #55 ์—์„œ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

class P_A():
    ...

class P_B():
    ...

class C(P_A, P_B): #P_A ์™€ P_B ํด๋ž˜์Šค๋ฅผ ๋™์‹œ์— ์ƒ์†
    ...

#59

What is Polymorphism in Python?

๋‹คํ˜•์„ฑ์€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ฃผ์š” ๊ฐœ๋…์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๋งํ•œ๋‹ค. ๋‹คํ˜•์„ฑ์€ ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์— ๋„์›€์„ ์ค€๋‹ค.

ํŒŒ์ด์ฌ์€ ๋‹คํ˜•์„ฑ์„ ์ง€์›ํ•˜๋Š”๋ฐ, + ์—ฐ์‚ฐ์ด๋‚˜ len ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋“ค์€ ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ overriding ๊ณผ overloading ์„ ํ†ตํ•ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋ณ€์ˆ˜์—๋„ ๋ฐ˜์‘ํ•˜๋„๋ก ๋‹คํ˜•์„ฑ์„ ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.

References


#60

Define encapsulation in Python?

์บก์Аํ™”๋Š” ์ฃผ์š” ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ์บก์Аํ™”๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์•ˆ์ „์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ด์ฌ์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋‚˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ๋ณ€์ˆ˜๋ฅผ ์†๋Œ€๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.


#61

How do you do data abstraction in Python?

๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ฃผ์š” ๊ฐœ๋…์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์š” ์ •๋ณด๋งŒ ์ œ๊ณตํ•˜์—ฌ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์€ ๋ชฐ๋ผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํŒŒ์ด์ฌ์—์„œ๋Š” abstract class ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. abstract class ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” abc ๋ชจ๋“ˆ์„ import ํ•˜๊ณ  metaclass=ABCClass ์™€ @abstractmethod ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

from abc import *
class ์ถ”์ƒํด๋ž˜์Šค๋ช…(metaclass=ABCMeta):

     @abstractmethod
        def ์ถ”์ƒ๋ฉ”์†Œ๋“œ(self):
            pass

#62

Does python make use of access specifiers?

ํŒŒ์ด์ฌ์€ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ private, protected ๋“ฑ์˜ ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜๋ช…์„ ํ†ตํ•ด ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํ•œ๋‹ค.

์ ‘๋‘์‚ฌ _ ๊ฐ€ ํ•œ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” protected, ์ ‘๋‘์‚ฌ _ ๊ฐ€ ๋‘ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” private, ์ ‘๋‘์‚ฌ _ ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ ‘๋ฏธ์‚ฌ _ ๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” public ์ด๋‹ค.

References


#63

How to create an empty class in Python?

ํŒŒ์ด์ฌ์—์„œ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์•„๋ฌด ๋‚ด์šฉ ์—†์ด ์„ ์–ธ๋งŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” pass ๋‚˜ ... ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ empty class ๋ฅผ ์„ ์–ธํ•œ ํ›„, ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.

class empty():
    ... # or pass

e = empty()
e.a = 10
print(e.a) # 10

#64

What does an object() do?

ํŒŒ์ด์ฌ์€ ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ object ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค. object() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ๋ณธ object ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.


#65

What is map function in Python?

map ํ•จ์ˆ˜๋Š” iterable ํ•œ ๊ฐ์ฒด์˜ ๋ชจ๋“  ์›์†Œ์— ๋™์ผํ•œ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

์ฒซ ์ธ์ž๋กœ ์ ์šฉํ•  ํ•จ์ˆ˜๋ฅผ, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ iterable ํ•œ ๊ฐ์ฒด๋ฅผ ๋„ฃ์œผ๋ฉด, iterable ํ•œ map ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๊ฐ ์›์†Œ์— ๋Œ€ํ•ด ํ•จ์ˆ˜๊ฐ€ ์ ์šฉ๋œ ๋ฌถ์Œ๋“ค์ด ๋‹ด๊ฒจ ๋‚˜์˜จ๋‹ค.

int_arr = list(map(int, input().split()))

#66

Is python numpy better than lists?

ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ์›์†Œ๋“ค์˜ ๊ฐ’์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์›์†Œ๋“ค์˜ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›์†Œ๋“ค์˜ ํƒ€์ž…์ด ์ •ํ•ด์ง€์ง€ ์•Š์•„ ํŽธ๋ฆฌํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๋ฐ˜๋ฉด, ๋„˜ํŒŒ์ด๋Š” C ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์›์†Œ๋“ค์˜ ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์„ค์ •ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๋น ๋ฅด๋‹ค. ๋˜ํ•œ ํ–‰๋ ฌ๊ณผ ์„ ํ˜•๋Œ€์ˆ˜์— ํŽธ๋ฆฌํ•œ ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค.


#67

What is GIL in Python language?

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ์„ ํ•  ๋•Œ, ๊ณต์œ  ์ž์›์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•œ๋‹ค๋ฉด ๊ฐฑ์‹ ๋œ ๋‚ด์šฉ์ด ์œ ์‹ค๋˜๋Š” ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ํŒŒ์ด์ฌ์€ GIL (Global Interpreter Lock) ์„ ํ†ตํ•ด python interpreter ์— ํ•œ ์“ฐ๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•˜์—ฌ ๋ชจ๋“  ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์ •ํ™•ํžˆ๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ bytecode(=instruction) ํ•œ ๋ผ์ธ์”ฉ์„ ๋“ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ์“ฐ๋ ˆ๋“œ์˜ bytecode ํ•œ ์ค„์— ๋Œ€ํ•ด์„œ๋งŒ GIL ์€ ํ—ˆ์šฉํ•œ๋‹ค.

References


#68

What is the CPython?

ํŒŒ์ด์ฌ์€ ์ผ๋ฐ˜์ ์œผ๋กœ C ๋กœ ๊ตฌํ˜„๋œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ C ์–ธ์–ด์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ด์ฌ ๊ตฌํ˜„์ฒด C ๋ฅผ CPython ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

CPython ์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ด๋ฉด์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ Python ์ฝ”๋“œ๋ฅผ C ๊ฐ€ ์•„๋‹Œ bytecode ๋กœ ์ปดํŒŒ์ผํ•ด์ฃผ๊ณ , ์ด๋ฅผ interpreter(virtual machine) ๊ฐ€ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ด๋Ÿฌํ•œ CPython ์˜ interpreter ์ ์ธ ํŠน์ง•์ด ํŒŒ์ด์ฌ์„ ์ฐจ๋ณ„๋˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

References


#69

What are Decorators in Python?

ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ณ  ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ ์ธ์ž๋กœ ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์žˆ์„ ๋•Œ, ์ธ์ž๋กœ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ง€์ •ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด Decorator ์ด๋‹ค.

Decorator ์˜ ์‚ฌ์šฉ ๋ฌธ๋ฒ•์€ ์ธ์ž๊ฐ€ ๋  ํ•จ์ˆ˜ ์œ„์— @์™ธ๋ถ€ํ•จ์ˆ˜์ด๋ฆ„ ์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด, Decorator ๋ฅผ ํ†ตํ•ด big_number ์™€ big_number2 ๋ผ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ make_time_checker ๊ฐ€ ์ธ์ž๋กœ ๋ฐ›์•„ ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

import time


def make_time_checker(func):
      def new_func(*args, **kwargs):
            start_time = time.perf_counter()
            result = func(*args, **kwargs)
            end_time = time.perf_counter()
            print('์‹คํ–‰์‹œ๊ฐ„:', end_time - start_time)
            return result
      return new_func

@make_time_checker
def big_number(n):
      return n ** n ** n

@make_time_checker
def big_number2(n):
      return (n+1) ** (n+1) ** (n+1)

References


#70

What is object interning?

ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด์ด๋ฏ€๋กœ ๋ณ€์ˆ˜๋“ค์€ ๊ฐ’์„ ๋ฐ”๋กœ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ๊ฐ’์„ ๊ฐ€์ง„ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

object interning ์€ ์ž์ฃผ ์‚ฌ์šฉ๋ , ์ฆ‰ ์žฌํ™œ์šฉ๋  object ์— ๋Œ€ํ•ด ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ์ฃผ์†Œ์— ๊ฐ’์„ ์ฃผ๊ณ  ๊ทธ ์ฃผ์†Œ๋ฅผ ์žฌํ™œ์šฉํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ด์ฌ์—์„œ๋Š” -5~256, [a-Az-Z0-9_] ์— ๋Œ€ํ•ด ๊ณ ์ •๋œ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜์—ฌ interning ์„ ํ•˜๊ณ  ์žˆ๋‹ค.

References


#71

What is @classmethod, @staticmethod, @property?

@classmethod

ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ํ•จ์ˆ˜ ์ค‘์— @classmethod ๋กœ ์„ ์–ธ๋œ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ๋ฐ”๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ํ•จ์ˆ˜์˜ ์ฒซ ์ธ์ž๋กœ ํด๋ž˜์Šค๋ฅผ ๋ฐ›์•„์„œ, ์ƒ์†๋˜์—ˆ์„ ๋•Œ ์ž์‹ ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋ฅด๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

@staticmethod

@staticmethod ๋Š” @classmethod ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ž˜์Šค๋ฅผ ์ธ์ž๋กœ ๋ฐ›์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ์†๋˜์—ˆ์„ ๋•Œ์—๋„ ์ž์‹ ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ์ฒ˜์Œ์— ํด๋ž˜์Šค์—์„œ ์„ ์–ธํ•œ ๋ฐ์ดํ„ฐ๋Œ€๋กœ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

class Language:
    default_language = "English"

    def __init__(self):
        self.show = '๋‚˜์˜ ์–ธ์–ด๋Š”' + self.default_language

    @classmethod
    def class_my_language(cls):
        return cls()

    @staticmethod
    def static_my_language():
        return Language()

    def print_language(self):
        print(self.show)


class KoreanLanguage(Language):
    default_language = "ํ•œ๊ตญ์–ด"


>>> from language import *
>>> a = KoreanLanguage.static_my_language()
>>> b = KoreanLanguage.class_my_language()
>>> a.print_language()
๋‚˜์˜ ์–ธ์–ด๋Š”English
>>> b.print_language()
๋‚˜์˜ ์–ธ์–ด๋Š”ํ•œ๊ตญ์–ด

@property

๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์—์„œ๋Š” ์บก์Аํ™”๋ฅผ ์œ„ํ•ด ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด์˜ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•˜๊ณ  ๋ฐ›์•„์˜ค๋Š” setter, getter ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํŒŒ์ด์ฌ์—์„œ๋Š” ์ด๋ฅผ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก @property ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

getter ๊ฐ€ ๋  ํ•จ์ˆ˜์— @property ๋ฅผ, setter ๊ฐ€ ๋  ํ•จ์ˆ˜์— @๋ณ€์ˆ˜.setter ๋ฅผ ๋ถ™์ด๋ฉด ๋œ๋‹ค.

class Test:

    def __init__(self):
        self.__color = "red"

    @property
    def color(self):
        return self.__color

    @color.setter
    def color(self,clr):
        self.__color = clr

if __name__ == '__main__':

    t = Test()
    t.color = "blue"

    print(t.color)

References


Last updated