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