μ§λ¬Έμ Top 100 Python Interview Questions You Must Prepare In 2021 - edureka!μ μ°Έκ³ νμμ΅λλ€.
- What is the difference between list and tuples in Python?
- What are the key features of Python?
- What type of language is python? Programming or scripting?
- Python an interpreted language. Explain.
- What is pep 8?
- How is memory managed in Python?
- What is namespace in Python?
- What is PYTHONPATH?
- What are python modules? Name some commonly used built-in modules in Python?
- What are local variables and global variables in Python?
- Is python case sensitive?
- What is type conversion in Python?
- How to install Python on Windows and set path variable?
- Is indentation required in python?
- What is the difference between Python Arrays and lists?
- What are functions in Python?
- What is
__init__
? - What is a lambda function?
- What is self in Python?
- How does break, continue and pass work?
- What does
[::-1]
do? - How can you randomize the items of a list in place in Python?
- Whatβs the difference between iterator and iterable?
- How can you generate random numbers in Python?
- What is the difference between range & xrange?
- How do you write comments in python?
- What is pickling and unpickling?
- What are the generators in python?
- How will you capitalize the first letter of string?
- How will you convert a string to all lowercase?
- How to comment multiple lines in python?
- What are docstrings in Python?
- What is the purpose of is, not and in operators?
- What is the usage of help() and dir() function in Python?
- Whenever Python exits, why isnβt all the memory de-allocated?
- What is a dictionary in Python?
- How can the ternary operators be used in python?
- What does this mean:
*args
,**kwargs
? And why would we use it? - What does len() do?
- Explain split(), sub(), subn() methods of βreβ module in Python.
- What are negative indexes and why are they used?
- What are Python packages?
- How can files be deleted in Python?
- What are the built-in types of python?
- What advantages do NumPy arrays offer over (nested) Python lists?
- How to add values to a python array?
- How to remove values to a python array?
- Does Python have OOps concepts?
- What is the difference between deep and shallow copy?
- How is Multithreading achieved in Python?
- What is the process of compilation and linking in python?
- What are Python libraries? Name a few of them.
- What is split used for?
- How to import modules in python?
- Explain Inheritance in Python with an example.
- How are classes created in Python?
- What is monkey patching in Python?
- Does python support multiple inheritance?
- What is Polymorphism in Python?
- Define encapsulation in Python?
- How do you do data abstraction in Python?
- Does python make use of access specifiers?
- How to create an empty class in Python?
- What does an object() do?
- What is map function in Python?
- Is python numpy better than lists?
- What is GIL in Python language?
- What makes the CPython different from Python?
- What are Decorators in Python?
- What is object interning?
- What is @classmethod, @staticmethod, @property?
리μ€νΈλ mutable(λ³κ²½ κ°λ₯), ννμ immutable(λ³κ²½ λΆκ°λ₯)μ΄λΌλ νΉμ§μ κ°μ§κ³ μλ€. λ°λΌμ 리μ€νΈλ μ μΈ νμλ κ°μ λν λ³κ²½, μμ κ° κ°λ₯νμ§λ§, ννμ μ μΈ νμ κ°μ λ³κ²½νκ±°λ μμ νλ κ²μ΄ λΆκ°λ₯νλ€. λν 리μ€νΈλ ννλ³΄λ€ λ리λ€λ λ¨μ μ κ°μ§κ³ μμΌλ©°, νλμ νν/리μ€νΈμ λ€λ₯Έ νμ
μ κ°μ ν¨κ» μ μ₯ν μ μλ€λ 곡ν΅μ μ΄ μλ€. 리μ€νΈλ λκ΄νΈ [ ]
λ₯Ό, ννμ μκ΄νΈ ( )
λ₯Ό μ¬μ©ν΄μ λνλΈλ€.
νμ΄μ¬μ΄ μ£Όμ νΉμ§μ μλμ κ°λ€.
- μΈν°νλ¦¬ν° μΈμ΄(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) μΆκ°κ° μ©μ΄νμ¬ νμ₯μ±κ³Ό μ΄μμ±μ΄ μ’λ€.
- νμ΄μ¬μ μΈν°ν리ν°λ‘ λμνλ μ€ν¬λ¦½νΈ μΈμ΄μ΄λ―λ‘ λ€λ₯Έ μ»΄νμΌ μΈμ΄μ λΉν΄ λ€μ λ리λ€.
- μ»΄νμΌλ¬κ° μ½λλ₯Ό κΈ°κ³μ΄λ‘ λ²μν΄μ μ€νκ°λ₯ νμΌμ λ§λλ κ²μ λΉν΄, μΈν°ν리ν°λ μ½λλ₯Ό νμ€μ© μ€νμκ°λ§λ€ λ²μν΄μ μ€ννκΈ° λλ¬Έμ΄λ€.
- Python μμνκΈ° - crystalcube
- νμ΄μ¬ λμ νμ΄νκ³Ό μΊμ€ν - μ€μ€λ‘ λ°°μ°λ μ½λ©
- python 리μ€νΈ, νν, λμ λ리 λΉκ΅ - bskyvision
- Python μΌκΈκ°μ²΄(FIRST-CLASS CITIZEN)- νμ°¬κΈ°
- μΈν°νλ¦¬ν° μΈμ΄μ μ»΄νμΌ μΈμ΄μ μ°¨μ΄ - jhkang-dev
νμ΄μ¬μ μ ννκ²λ, μ€ν¬λ¦½νΈ μΈμ΄μ΄λ€. λͺ¨λ μ€ν¬λ¦½νΈ μΈμ΄λ νλ‘κ·Έλλ° μΈμ΄λ‘ λ³Ό μ μμΌλ, λͺ¨λ νλ‘κ·Έλλ° μΈμ΄κ° μ€ν¬λ¦½νΈ μΈμ΄λ‘ λΆλ₯λλ κ²μ μλλ€. λ°λΌμ νμ΄μ¬μ μ€ν¬λ¦½νΈ μΈμ΄μ΄μ, νλ‘κ·Έλλ° μΈμ΄μ΄λ€. κ·Έλ¬λ μ¬λλ€μ μΌλ°μ μΈ κ²½μ°μ νμ΄μ¬μ νλ‘κ·Έλλ° μΈμ΄μ λͺ©μ μΌλ‘ λΆλ₯νκ³ , νλ‘κ·Έλλ° λͺ©μ μΌλ‘ λ§μ΄ μ¬μ©νλ€.
π‘ μ€ν¬λ¦½ν (scripting/Scripting Language)
μ€ν¬λ¦½νΈ μΈμ΄λ μ»΄νμΌμ΄ νμμμ΄ μ€νλ μ μλ λͺ λ Ήμ΄μ μ§ν©μ΄λ€. μ€ν¬λ¦½νΈ μΈμ΄λ μΈν°ν리ν°λ₯Ό μ¬μ©νλλ°, μΈν°ν리ν°λ μ»΄νμΌ κ³Όμ μ΄ νμνμ§ μμΌλ©°, μμ€μ½λλ‘ λΆν° λ°λ‘ λͺ λ Ήμ΄λ₯Ό ν΄μν μ μλ€.
μΈν°ν리ν°λ κ³ κΈ μΈμ΄λ‘ μμ±λ μμμ½λ λͺ λ Ήμ΄λ€μ νλ²μ ν μ€μ© μ½μ΄λ€μ¬μ μ€ννλ νλ‘κ·Έλ¨μ΄λ€. μΈν°νλ¦¬ν° μΈμ΄λ μ€νμκ°(runtime) μ μ κΈ°κ³ λ 벨 μ½λ(machine-level code)λ₯Ό λ§λλ μ»΄νμΌ μΈμ΄μ λ€λ₯΄κ² μμ€μ½λλ₯Ό λ°λ‘ μ€ννλ μΈμ΄μ΄λ©°, νμ΄μ¬μ μΈν°νλ¦¬ν° μΈμ΄μ ν΄λΉνλ€.
μΈν°νλ¦¬ν° μΈμ΄λ μ€ν¬λ¦½νΈ μΈμ΄μ λμΌν μλ―Έμ΄λ€. μ€ν¬λ¦½ν /μ€ν¬λ¦½νΈ μΈμ΄μ λν μ§λ¬Έκ³Ό λ΅λ³μ What type of language is python? Programming or scripting?μ μ°Έκ³ νλ€.
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
- ν¨μ, λ³μ, μμ± :
Pythonμ λͺ¨λ κ²μ κ°μ²΄λ‘ κ΄λ¦¬νλ€. κ°μ²΄κ° λμ΄μ νμνμ§ μμΌλ©΄ νμ΄μ¬ λ©λͺ¨λ¦¬ κ΄λ¦¬μκ° μλμΌλ‘ κ°μ²΄μμ λ©λͺ¨λ¦¬λ₯Ό νμνλ λ°©μμ μ¬μ©νλ―λ‘, νμ΄μ¬μ λμ λ©λͺ¨λ¦¬ ν λΉ λ°©μμ μ¬μ©νλ€κ³ λ§ν μ μλ€. ν(heap)μ λμ ν λΉμ ꡬννλλ° μ¬μ©λλ€. νμ μ¬μ©νμ¬ λμ μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ©΄, νμνμ§ μμ λ©λͺ¨λ¦¬λ₯Ό λΉμ°κ³ μ¬μ¬μ©ν μ μλ€λ μ₯μ μ΄ μλ€. λͺ¨λ νμ΄μ¬ κ°μ²΄ λλ μλ£κ΅¬μ‘°λ python private heap 곡κ°μμ κ΄λ¦¬λλ©°, νλ‘κ·Έλλ¨Έλ μ΄ κ³΅κ°μ μ κ·Όν μ μκ³ , λμ νμ΄μ¬ μΈν°ν리ν°κ° λμ ν΄μ κ΄λ¦¬νλ€.
λ μμΈν보기
νμ΄μ¬ κ°μ²΄μ λν ν κ³΅κ° ν λΉμ λ΄λΉνλ κ²μ νμ΄μ¬ λ©λͺ¨λ¦¬ κ΄λ¦¬μ(Python Memory Manager) λΌκ³ λΆλ₯Έλ€. Python λ©λͺ¨λ¦¬ κ΄λ¦¬μμλ κ°μ²΄λ³ ν λΉμκ°μκΈ° λλ¬Έμ int, string λ±κ³Ό κ°μ νΉμ κ°μ²΄μ λν΄ λ©λͺ¨λ¦¬λ₯Ό λͺ ννκ² ν λΉ ν μ μλ€. λν, μ¬μ©λμ§ μλ λͺ¨λ λ©λͺ¨λ¦¬λ₯Ό μ¬νμ©νκ³ ν 곡κ°μμ μ¬μ©ν μ μλλ‘ νλ λ΄μ₯ Garbage Collector(GC) λ₯Ό κ°μ§κ³ μλ€.
- [λ©λͺ¨λ¦¬ κ΄λ¦¬] νμ΄μ¬(Python)μμ λ©λͺ¨λ¦¬ κ΄λ¦¬νκΈ° - DEVLOG/κ°λ°μΌκΈ°
- νμ΄μ¬ λ°νμκ³Ό λ©λͺ¨λ¦¬ κ΄λ¦¬ - muchogusto
namespaceλ μ΄λ¦ μ§μ μΆ©λ(naming conflicts)μ νΌνκΈ° μν΄ μ΄λ¦μ΄ κ³ μ νμ§ νμΈνλ λ° μ¬μ©λλ μ΄λ¦ μ§μ μμ€ν (naming system)μ΄λ€. λ€μμ€νμ΄μ€(namespace, μ΄λ¦κ³΅κ°)λ νλ‘κ·Έλλ° μΈμ΄μμ νΉμ ν κ°μ²΄(Object)λ₯Ό μ΄λ¦(Name)μ λ°λΌ ꡬλΆν μ μλ λ²μλ₯Ό μλ―Ένλ€. νμ΄μ¬ λ΄λΆμ λͺ¨λ κ²μ κ°μ²΄λ‘ ꡬμ±λλ©° μ΄λ€ κ°κ°μ νΉμ μ΄λ¦κ³Όμ 맀ν κ΄κ³λ₯Ό κ°κ² λλλ° μ΄ λ§€νμ ν¬ν¨νκ³ μλ 곡κ°μ λ€μμ€νμ΄μ€λΌκ³ νλ€.
λ€μμ€νμ΄μ€κ° νμν μ΄μ λ λ€μκ³Ό κ°λ€. νλ‘κ·Έλλ°μ μννλ€λ³΄λ©΄ λͺ¨λ λ³μ μ΄λ¦κ³Ό ν¨μ μ΄λ¦μ μ νλ κ²μ΄ μ€μνλ° μ΄λ€ λͺ¨λλ₯Ό κ²ΉμΉμ§ μκ² μ νλ κ²μ μ¬μ€μ λΆκ°λ₯νλ€. λ°λΌμ νλ‘κ·Έλλ°μΈμ΄μμλ λ€μμ€νμ΄μ€λΌλ κ°λ μ λμ νμ¬, νΉμ ν νλμ μ΄λ¦μ΄ ν΅μ©λ μ μλ λ²μλ₯Ό μ ννλ€. μ¦, μμλ λ€μμ€νμ΄μ€κ° λ€λ₯΄λ€λ©΄ κ°μ μ΄λ¦μ΄ λ€λ₯Έ κ°μ²΄λ₯Ό κ°λ¦¬ν€λλ‘ νλ κ²μ΄ κ°λ₯νλ€.
νμ΄μ¬ λ€μμ€νμ΄μ€μ νΉμ§
- λ€μμ€νμ΄μ€λ λμ λ리 ννλ‘ κ΅¬νλλ€.
- λͺ¨λ μ΄λ¦ μ체λ λ¬Έμμ΄λ‘ λμ΄μκ³ κ°κ°μ ν΄λΉ λ€μμ€νμ΄μ€μ λ²μμμ μ€μ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
- μ΄λ¦κ³Ό μ€μ κ°μ²΄ μ¬μ΄μ 맀νμ κ°λ³μ (Mutable)μ΄λ―λ‘ λ°νμλμ μλ‘μ΄ μ΄λ¦μ΄ μΆκ°λ μ μλ€.
- λΉνΈμΈ λ€μμ€νμ΄μ€λ ν¨λΆλ‘ μΆκ°νκ±°λ μμ ν μ μλ€.
νμ΄μ¬ λ€μμ€νμ΄μ€μ 3κ°μ§ λΆλ₯
λΉνΈμΈ λ€μμ€νμ΄μ€(build-in namespace)
: κΈ°λ³Έ λ΄μ₯ ν¨μ λ° κΈ°λ³Έ μμΈλ€μ μ΄λ¦λ€μ΄ μμλλ€. νμ΄μ¬μΌλ‘ μμ±λ λͺ¨λ μ½λ λ²μκ° ν¬ν¨λλ€.μ μ λ€μμ€νμ΄μ€(global namespace)
: λͺ¨λλ³λ‘ μ‘΄μ¬νλ©°, λͺ¨λ μ 체μμ ν΅μ©λ μ μλ μ΄λ¦λ€μ΄ μμλλ€.μ§μ λ€μμ€νμ΄μ€(local namespace)
: ν¨μ λ° λ©μλ λ³λ‘ μ‘΄μ¬νλ©°, ν¨μ λ΄μ μ§μ λ³μλ€μ μ΄λ¦λ€μ΄ μμλλ€.
λͺ¨λμ 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)
- sys.path, PYTHONPATH: νμ΄μ¬ νμΌ νμ κ²½λ‘ - λ°©μ±λ² (Bang Seongbeom)
- Python sys module, path μ 리 - μΌλ₯λ μΌλ₯μμ λΆν°
λͺ¨λμ΄λ Python μ½λλ₯Ό ν¬ν¨νλ νμΌλ‘μ¨, ν¨μλ λ³μ λλ ν΄λμ€λ₯Ό λͺ¨μ λμ νμΌμ΄λ€. λͺ¨λμ λ€λ₯Έ νμ΄μ¬ νλ‘κ·Έλ¨μμ λΆλ¬μ μ¬μ©ν μ μκ²λ λ§λ νμ΄μ¬ νμΌμ΄λΌκ³ λ ν μ μλ€. μ€ν κ°λ₯ν μ½λλ₯Ό ν¬ν¨νλ, νμ΄μ¬ νμ₯μ .py
λ‘ λ§λ νμ΄μ¬ νμΌμ λͺ¨λ λͺ¨λμ΄λ€. λͺ¨λμ μ¬μ©νλ©΄, λ€λ₯Έ μ½λμ μ μ©νκΈ°κ° μ¬μμ§λ―λ‘ μ΄μμ±μ΄ μ’μμ§λ€.
μμ£Ό μ¬μ©λλ λΉνΈμΈ λͺ¨λ(built-in module)μ μμλ λ€μκ³Ό κ°λ€.
os
sys
math
random
datetime
JSON
**μ μ λ³μ(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()
ν¨μμ λ‘컬 λ³μμ μ‘μΈμ€νλ €κ³ νλ©΄ μ€λ₯κ° λ°μνλ€.
νμ΄μ¬μ λμλ¬Έμλ₯Ό ꡬλΆνλ μΈμ΄μ΄λ€. μλ₯Όλ€μ΄, a
μ A
λ λ€λ₯Έ λ³μμ΄λ€.
type conversionμ νμ μΊμ€ν (type casting)κ³Ό λμΌν μλ―Έλ₯Ό κ°μ§λ©°, μ΄λ μ΄λ€ λ°μ΄ν° νμ μ λ€λ₯Έ λ°μ΄ν° νμ μΌλ‘ λ³ννλ κ²μ λ§νλ€.
νμ μΊμ€ν ν¨μμ μ’ λ₯
int()
: μ μνμΌλ‘ λ³ννλ€.float()
: μ€μνμΌλ‘ λ³ννλ€.ord()
: λ¬Έμνμ μ μνμΌλ‘ λ³ννλ€.hex()
: μ μνμ 10μ§μλ‘ λ³ννλ€.oct()
: μ μνμ 8μ§μλ‘ λ³ννλ€.tuple()
: νννμΌλ‘ λ³ννλ€.set()
: setμΌλ‘ λ³ννλ€.list()
: listλ‘ λ³ννλ€.dict()
: (key,value) μμλ‘ μ΄λ€μ§ ννμ λμ λ리νμΌλ‘ λ³ννλ€.str()
: μ μνμ λ¬ΈμνμΌλ‘ λ³ννλ€.complex(real, image)
: μ€μλ₯Ό 볡μμλ‘ λ³ννλ€.
Windowsμ Pythonμ μ€μΉνλ €λ©΄ λ€μ λ¨κ³λ₯Ό κ±°μ³μΌνλ€.
- λ§ν¬μμ pythonμ μ€μΉνλ€.
- PCμ λ€μ΄λ‘λ λ°μ pythonμ μ€μΉνλ©΄μ,
Add Python 3.6 to PATH
μ 체ν¬νκ³ , μλ΄μ λ°λΌ μ€μΉνλ©° pythonμ μ€μΉν μμΉλ₯Ό μ μ₯ν΄λλ€. μμ€ν > μμ€ν μ 보 > κ³ κΈ μμ€ν μ€μ > νκ²½λ³μ
μΌλ‘ μ΄λνμ¬ μμ€ν λ³μλ₯Ό νΈμ§νμ¬ 2λ²μμ μ μ₯ν΄λ python.exe μ€ννμΌμ΄ μλ κ²½λ‘λ₯Ό μΆκ°ν΄μ£Όλ©΄ λλ€.
Pythonμ Indentation(λ€μ¬μ°κΈ°)μ΄ νμνλ€. νμ΄μ¬μ {}
μ μ¬μ©νμ¬ μμμ μ§μ νμ§ μκ³ , λ€μ¬μ°κΈ°λ₯Ό μ¬μ©νμ¬ μ½λλΈλ‘μ μ§μ νκΈ° λλ¬Έμ νμ΄μ¬μμ λ€μ¬μ°κΈ°λ λ¬Έλ²μ μΈ κ°μ μ¬νμ΄λ€. if, for, class, def
λ±μ λͺ¨λ μ½λλ λ€μ¬μ°κΈ° λΈλ‘ λ΄μμ μ§μ λλ€. λ€μ¬μ°κΈ°μ λ°©λ²μ 1μΉΈ, 2μΉΈ, 4μΉΈ, ν λ± μ¬λ¬κ°μ§ λ°©μμ΄ μλ€. μΌλ°μ μΌλ‘ νμ΄μ¬μ λ€ κ°μ 곡백 λ¬Έμλ₯Ό μ¬μ©νμ¬ λ€μ¬μ°κΈ°λ₯Ό μννλ€.
μ½λκ° μ ννκ² λ€μ¬μ°μ¬μ§μ§ μμΌλ©΄ μ€νλμ§ μκ³ μ€λ₯λ λ°μνλ€. μ€μν κ²μ κ°μ λΈλ‘ λ΄μμλ λ€μ¬μ°κΈ° μΉΈ μκ° κ°μμΌνλ€λ κ²μ΄λ€. λ€μ¬μ°κΈ° κ·μΉ μλ°μμλ IndentationError: unexpected indent
μλ¬λ₯Ό μΆλ ₯νλ€.
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]
ν¨μλ νΈμΆλ λλ§ μ€νλλ μ½λ λΈλ‘μ΄λ€. Python ν¨μλ₯Ό μ μνκΈ° μν΄ def ν€μλκ° μ¬μ©λλ€. λ°λ³΅λλ λΆλΆμ ν¨μλ‘ λ§λ€μ΄μ μ¬μ©νλ©΄, λκ°μ μ½λλ₯Ό μ¬λ¬λ² λ°λ³΅νμ¬ μ°μ§ μμλ λκ³ , νλ‘κ·Έλ¨μ νλ¦μ μ½κ² νμ ν μ μλ€λ μ₯μ μ΄ μλ€.
def new_func():
print("Hi, Welcome to Edureka")
new_func(); # ν¨μ νΈμΆ
# Output: Hi, Welcome to Edureka
__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 νλ‘κ·Έλ¨μ΄ λλ ν 리λ₯Ό μ²μ κ°μ Έμ¬ λ μλμΌλ‘ μ€νλλ ν¨ν€μ§ μ΄κΈ°ν νμΌ μν μ νκ³ , λͺ¨λμ λ€μμ€νμ΄μ€ μ΄κΈ°ν μν μ νλ€.
- 7.5. νΉλ³ν λ©μλλ€ - μμ΄λ³΄λ₯Ό μν Python
- ν¨ν€μ§ init.py νμΌλ€ - κ·Έκ²μΌλ‘ λ§λ―Έμμ,
μ΅λͺ
ν¨μ(μ΄λ¦μ΄ μλ ν¨μ)λ₯Ό λλ€ ν¨μλΌκ³ νλ€. λλ€ ν¨μλ def
ν€μλλ₯Ό ν΅ν΄μ ν¨μλ₯Ό μμ±νλ 리ν°λ΄ νκΈ°λ²μ λ± ν μ€μ μ½λλ‘ ννν μ μκ² ν΄μ£Όλ©°, lambda μΈμ : ννμ
μ νμμΌλ‘ νννλ€. λλ€ν¨μλ κ²°κ³Ό λΆλΆμ return ν€μλ μμ΄ μλμΌλ‘ returnνλ€. λλ€ν¨μλ₯Ό μ¬μ©νλ©΄ μ½λκ° κ°κ²°ν΄μ§κ³ λ©λͺ¨λ¦¬κ° μ μ½λλ€λ μ₯μ μ΄ μλ€. κ·Έλ¬λ ν¨μμ μ΄λ¦μ΄ μκ³ , μ μ₯λ λ³μκ° μκΈ° λλ¬Έμ λ€μ μ¬μ©νκΈ° μν΄μλ λ€μ μ½λλ₯Ό μ μ΄μ£Όκ±°λ, λλ€ν¨μλ₯Ό λ³μμ λ΄μμ£Όμ΄μΌνλ€. λ°λΌμ, μ¬μ¬μ©ν μ΄μ κ° μλ€λ©΄ lambda ν¨μλ₯Ό μμ±νμ¬ λ겨주λ νΈμ΄ μ’λ€.
λλ€ν¨μμ ννλ²μ κ·Έλ¦ΌμΌλ‘ νννλ©΄ μλμ κ°λ€.
a = lambda x, y : x + y
print(a(5, 6))
# Output: 11
- 3.5 λλ€(lambda) - μμ΄λ³΄λ₯Ό μν Python - WikiDocs
- 4) λλ€ν¨μ(μ΅λͺ ν¨μ) - μ λλ‘ νμ΄μ¬ - WikiDocs
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
μ μΈμ€ν΄μ€λ₯Ό λ£κ³ μ΄ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νμ¬ μΈμ€ν΄μ€ λ©μλλ₯Ό μ€νν μ μκ² λλ€.
- self μ΄ν΄νκΈ° - νμ΄μ¬μΌλ‘ λ°°μ°λ μκ³ λ¦¬μ¦ νΈλ μ΄λ©
- Python's Instance, Class, and Static Methods Demystified - Real Python
- Why must βselfβ be used explicitly in method definitions and calls? - Python Documentation
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
- 루νμ break μ continue λ¬Έ, κ·Έλ¦¬κ³ else μ - Python Documentation
- pass λ¬Έ - Python Documentation
νμ΄μ¬ μνμ€ μλ£νμ κ°μ΄ μ°μμ μΌλ‘ μ΄μ΄μ§ μλ£νμΌλ‘, 리μ€νΈ, νν, range, λ¬Έμμ΄μ΄ μλ€. μνμ€ μλ£νμ μνμ€ κ°μ²΄μ μΌλΆλ₯Ό μλΌλΌ μ μλ **μ¬λΌμ΄μ±(slicing)**μ΄λΌλ κΈ°λ₯μ μΈ μ μλ€. μ¬λΌμ΄μ±μ seq[start:end:step]
μ²λΌ μΈ μ μμΌλ©°, start
λ μμ μΈλ±μ€, end
λ λ μΈλ±μ€(λ²μμ ν¬ν¨νμ§λ μμ), step
μ μΈλ±μ€ μ¦κ°νμ λ§νλ€. step
μ΄ μμμ΄λ©΄ μ¦κ°νκ³ , μμμ΄λ©΄ κ°μνλ€.
λ€μ λμμ seq[::-1]
μ start
μ end
λ μμ μΈλ±μ€μ λ μΈλ±μ€λ₯Ό μλ΅νμλλ°, μ΄λ΄ κ²½μ° μ 체 μνμ€λ₯Ό κ°μ Έμ€λ©°, μ¦κ°νμ΄ -1μ΄λ―λ‘ end-1
λΆν° μμν΄ start
μμΌλ‘ μμλ₯Ό κ°μ Έμ¨λ€. μ¦, seq[::-1]
μ μνμ€λ₯Ό μμ (reverse)μν¨λ€.
- μνμ€ μλ£ν νμ©νκΈ° - νμ΄μ¬ μ½λ© λμ₯
- μ¬λΌμ΄μ€ μ¬μ©νκΈ° - νμ΄μ¬ μ½λ© λμ₯
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]
- Shuffle a list, string, tuple in Python (random.shuffle, sample) - note.nkmk.me
- random - Python Documentation
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 κ°μ²΄λ₯Ό μμ±ν΄μ£Όλ©΄ λλ€.
- π μ λλ μ΄ν°(Generator) - μ½λ©νλνκ·μ μ μ₯μ
- Iterable κ³Ό Iterator - νμ΄μ¬ - κΈ°λ³Έμ κ°κ³ λ¦μ!
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]
νμ΄μ¬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
- python range() μ xrange() μ°¨μ΄ - γ γ γ γ·
- [python] range, xrange μ°¨μ΄ - μ½λ©μ₯μ΄
- range() vs xrange() in Python - GeeksforGeeks
#
μ μ¬μ©νμ¬ μ£Όμμ λ¬ μ μλ€.
# this is my comment
λ°μ΄νλ₯Ό μ΄μ©ν μ£Όμμ Docstring νμμΌλ‘ μμΈν λ΄μ©μ #32λ₯Ό μ°Έκ³ !
μ°μ μ§λ ¬ν(Serialization)
μ μ μ§λ ¬ν(Deserialization)
μ κ°λ
μ μμμΌ νλ€. μ§λ ¬ν
λ κ°μ²΄λ₯Ό λ°μ΄νΈ μ€νΈλ¦Ό(byte stream)μΌλ‘ λ³ννμ¬ λμ€ν¬μ μ μ₯νκ±°λ λ€νΈμν¬λ‘ λ³΄λΌ μ μλλ‘ λ§λ€μ΄μ£Όλ κ²μ λ§νλ€. λ°λλ‘ λ°μ΄νΈ μ€νΈλ¦Όμ νμ΄μ¬ κ°μ²΄λ‘ λ³ννλ κ²μ μ μ§λ ¬ν
λΌκ³ νλ€.
pickle λͺ¨λμ νμ΄μ¬ κ°μ²΄μ μ§λ ¬νμ μ μ§λ ¬νλ₯Ό μννλ λͺ¨λμ΄λ€. μ΄ λ νμ΄μ¬ κ°μ²΄λ₯Ό μ§λ ¬νν λλ₯Ό pickling
μ΄λΌκ³ νλ©°, λ°μ΄νΈ μ€νΈλ¦Όμ μ μ§λ ¬νν λλ₯Ό unpickling
μ΄λΌκ³ νλ€.
- pickle β νμ΄μ¬ κ°μ²΄ μ§λ ¬ν - Python Documentation
- The Python pickle Module: How to Persist Objects in Python - Real 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 ν¨μλ‘ νΈμΆλ λ κ°μ μμ±νκ³ ν΄λΉ κ°λ§ λ©λͺ¨λ¦¬μ μ¬λ¦°λ€! μ¦, λ©λͺ¨λ¦¬λ₯Ό μ μ½ν μ μλ€. μμ λ°μ΄ν°λΌλ©΄ μκ΄μμ§λ§ ν° λ°μ΄ν°μμλ μ λλ μ΄ν° μ¬μ©μ΄ νμμ΄λ€.
- π μ λλ μ΄ν°(Generator) - μ½λ©νλνκ·μ μ μ₯μ
- How to Use Generators and yield in Python - Real Python
λ¬Έμμ΄ λ©μλ capitalize
λ₯Ό μ¬μ©νλ©΄ λλ€.
string = "boostcamp ai tech"
print(string.capitalize()) # Boostcamp ai tech
μμΈν λ¬Έμμ΄ λ©μλλ μ¬κΈ°λ₯Ό μ°Έκ³ !
λ¬Έμμ΄ λ©μλ lower
μ μ¬μ©νλ©΄ λλ€.
string = "BOOSTCAMP AI TECH"
print(string.lower()) # boostcamp ai tech
#
μ μ¬λ¬ μ€ μ¬μ©νμ¬ μ¬λ¬ μ€μ μ£Όμμ λ¬ μ μλ€.
# this is my comment
# I am commenting multiple lines
# - boostcamp ai tech team 4
λ°μ΄νλ₯Ό μ΄μ©ν μ£Όμμ Docstring νμμΌλ‘ μμΈν λ΄μ©μ #32λ₯Ό μ°Έκ³ !
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λ μ΄ μ½λλ₯Ό μ¬μ©ν μ¬μ©μλ€μ΄ μ΄ν΄νκΈ° μ½λλ‘ λ¨κ²¨λλ κ²μ΄λ€.
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
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
- λ΄μ₯ ν¨μ: help() - Python Documentation
- λ΄μ₯ ν¨μ: dir() - Python Documentation
- 10 Python built-in functions you should know
λ€λ₯Έ κ°μ²΄λ μ μ λ€μμ€νμ΄μ€μμ μ°Έμ‘°λλ κ°μ²΄λ₯Ό μν μ°Έμ‘°νλ νμ΄μ¬ λͺ¨λμ νμ ν΄μ λμ§λ μλλ€. λν C λΌμ΄λΈλ¬λ¦¬κ° μμ½ν λ©λͺ¨λ¦¬μ ν΄λΉ λΆλΆμ ν΄μ νλ κ²μ λΆκ°λ₯νλ€. κ·Έλ¬λ―λ‘ νμ΄μ¬ μ’ λ£ μ, λͺ¨λ λ©λͺ¨λ¦¬κ° ν΄μ λμ§λ μλλ€.
π‘ μν μ°Έμ‘°(Circular Reference)
λ κ°μ²΄κ° μλ‘ μ°Έμ‘°νλ κ²½μ°λ₯Ό λ§νλ€.
π‘ μ μ λ€μμ€νμ΄μ€(Global Namespace)
λ€μμ€νμ΄μ€(namespace)λ νλ‘κ·Έλλ° μΈμ΄μμ νΉμ κ°μ²΄λ₯Ό μ΄λ¦μ λ°λΌ ꡬλΆν μ μλ λ²μλ₯Ό μλ―Ένλ€. μ μ λ€μμ€νμ΄μ€λ importν λͺ¨λλ€μ μ΄λ¦μ ν¬ν¨νλ©°, μ€ν¬λ¦½νΈκ° λλ λκΉμ§ μ§μλλ€.
- Releasing memory in Python - Net-informations.com
- Whenever you exit Python, is all memory de-allocated? - BYTES
- Circular References in Python - hearsaysocial
- [Python] λ€μμ€νμ΄μ€ κ°λ μ 리 - Hyungcheol Noh's Blog
- λ€μμ€νμ΄μ€ - μ λλ‘ νμ΄μ¬
λμ λ리λ 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'}
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
*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)
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
νμ΄μ¬μμ μ κ·ννμμ μ¬μ©νκΈ° μν΄ β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)
- νμ΄μ¬ β μ κ·μννμ(Regular Expression) λͺ¨λ - devanix
- νμ΄μ¬ μ κ·ννμ(re) μ¬μ©λ² - 05. μ£Όμ, μΉν, λΆλ¦¬ - YW & YY's Python, Machine & Deep Learning
μΈλ±μ€
- μνμ€ κ°μ²΄μ
[]
(λκ΄νΈ)λ₯Ό λΆμ¬ μ¬μ© - μνμ€ κ°μ²΄μ μΈλ±μ€λ νμ 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
λͺ¨λ
λͺ¨λμ νμ΄μ¬ μ½λλ₯Ό λ
Όλ¦¬μ μΌλ‘ λ¬Άμ΄μ κ΄λ¦¬νκ³ μ¬μ©ν μ μλλ‘ νλ κ²μΌλ‘, λ³΄ν΅ νλμ νμ΄μ¬ .py
νμΌμ΄ νλμ λͺ¨λμ΄ λλ€. λͺ¨λ μμλ ν¨μ, ν΄λμ€, νΉμ λ³μλ€μ΄ μ μλ μ μμΌλ©°, μ€ν μ½λλ₯Ό ν¬ν¨ν μλ μλ€.
λͺ¨λμ κ΄ν μμΈν λ΄μ©μ #9. λͺ¨λ μ°Έκ³ !
ν¨ν€μ§
ν¨ν€μ§λ νΉμ κΈ°λ₯κ³Ό κ΄λ ¨λ μ¬λ¬ λͺ¨λμ λ¬Άμ κ²μΌλ‘ ν¨ν€μ§λ λͺ¨λμ namespaceλ₯Ό μ 곡νλ€. ν¨ν€μ§λ νλμ λλ ν 리μ λμ¬μ§ λͺ¨λλ€μ μ§ν©μ κ°λ¦¬ν€λλ°, κ·Έ λλ ν 리μλ μΌλ°μ μΌλ‘ __init__.py
λΌλ ν¨ν€μ§ μ΄κΈ°ν νμΌμ΄ μ‘΄μ¬νλ€.
ν¨ν€μ§λ λͺ¨λλ€μ 컨ν μ΄λλ‘μ ν¨ν€μ§ μμλ λλ€λ₯Έ μλΈ ν¨ν€μ§λ₯Ό ν¬ν¨ν μλ μλ€. νμΌμμ€ν μΌλ‘ λΉμ νλ©΄ ν¨ν€μ§λ μΌλ°μ μΌλ‘ λλ ν 리μ ν΄λΉνκ³ , λͺ¨λμ λλ ν 리 μμ νμΌμ ν΄λΉνλ€.
ν¨ν€μ§λ€μ λͺ¨μμΈ λΌμ΄λΈλ¬λ¦¬μ λν λ΄μ©μ #52. λΌμ΄λΈλ¬λ¦¬ μ°Έκ³ !
- νμ΄μ¬ ν¨ν€μ§μ λͺ¨λ μμ보기 - μΉν¨
- ν¨ν€μ§ - μμ λ‘ λ°°μ°λ νμ΄μ¬ νλ‘κ·Έλλ°
os λͺ¨λμ import ν ν os.remove()
ν¨μλ₯Ό μ¬μ©νμ¬ νμΌμ μμ ν μμλ€.
import os
os.remove("ai-tech-interview.txt")
μμΈν λ΄μ©μ os.remove - Python documentation μ°Έκ³ !
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 μ°Έκ³ ν κ².
numpy arrayλ νλμ λ°μ΄ν° νμ λ§ μ μκ° κ°λ₯νλ€. Python listμ λ¬λ¦¬ λ€μ΄λλ―Ή νμ΄νμ μ§μνμ§ μμΌλ©°, Cμ Arrayλ₯Ό μ¬μ©νμ¬ λ°°μ΄μ μμ±νκΈ° λλ¬Έμ μλκ° λΉ λ₯΄λ€.
Python listλ λ°μ΄ν° μ£Όμκ°μ μ μ₯νκ³ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ λλ ν΄λΉ μ£Όμμ κ°μ λ°μ΄ν°λ₯Ό κ°μ Έμ¨λ€. λ°λ©΄ Numpy arrayλ Cμ λ°°μ΄κ³Ό μ μ¬νμ¬ μ°μλ μ£Όμλ₯Ό κ°μ§κ³ μμ΄ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ λλ μμλλ‘ κ°μ Έμ€λ©΄ λκΈ° λλ¬Έμ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νλ€.
Numpyμ λν λ΄μ©μ #66. Numpy μ°Έκ³ !
append()
, extend()
, insert()
ν¨μλ₯Ό μ¬μ©νμ¬ listμ valueλ₯Ό μΆκ°ν μ μλ€.
append()
list.append(x)
ννλ‘ μ¬μ©νλ©°,
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)
ννλ‘ μ¬μ©νλ©°,
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)
ννλ‘ μ¬μ©νλ©°,
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
ννλ‘ μ¬μ©νλ©°,
nums = [1, 2, 4, 6, 1, 5]
print(nums + [10, 9, 8, 7]) # [1, 2, 4, 6, 1, 5, 10, 9, 8, 7]
- νμ΄μ¬ append( ), extend( ), insert( ) ν¨μ μ°¨μ΄ / μμμΆκ°ν¨μ λΉκ΅ (Python) - μμ§κ³΅μ§
- νμ΄μ¬ μλ£ν λ³ μ£Όμ μ°μ°μμ μκ° λ³΅μ‘λ (Big-O) - μ΄λ³΄λͺ½ν€μ κ°λ°κ³΅λΆλ‘κ·Έ
remove()
, pop()
ν¨μλ₯Ό μ¬μ©νμ¬ listμ valueλ₯Ό μμ ν μ μλ€.
remove()
remove()
λ μ§μ°κ³ μ νλ μΈλ±μ€κ° μλ, κ°μ μ
λ ₯νλ λ°©μμ΄λ€. λ§μ½ μ§μ°κ³ μ νλ κ°μ΄ 리μ€νΈ λ΄μ 2κ° μ΄μμ΄ μλ€λ©΄ μμμ κ°μ₯ μμ μλ κ°μ μ§μ°κ² λλ€. κ°μ μμ ν λ μμ λ κ°μ λ°ννμ§ μλλ€. remove()
λ μκ°λ³΅μ‘λ
example = [1, 2, 3, 4, 5, 1]
example.remove(1)
print(example) # [2, 3, 4, 5, 1]
pop()
pop()
μ 리μ€νΈμμ μ§μ°κ³ μ νλ κ°μ μΈλ±μ€λ₯Ό λ°μμ μ§μ°λ λ°©μμ΄λ€. κ°μ μμ ν λ μμ λ κ°μ λ°ννλ€. μΈλ±μ€λ₯Ό μ§μ νμ§ μμΌλ©΄ 리μ€νΈμ λ§μ§λ§ μμκ° μμ λλ©° λ°νλλ€. pop()
μ μκ°λ³΅μ‘λ
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]
ννλ‘ μ¬μ©νλ©°, μκ°λ³΅μ‘λ
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]
Pythonμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° μΈμ΄μ΄λ€. Pythonμ μ£Όμ OOP κ°λ μλ Class, Object, Method, Inheritance(μμ), Polymorphism(λ€νμ±), Data Abstraction(λ°μ΄ν° μΆμν), Encapsulation(μΊ‘μν)μ ν¬ν¨νλ€.
λ μμΈν λ΄μ©μ #55. Inheritance, #59. Polymorphism, #60. Encapsulation, #61. Data Abstraction μ°Έκ³ !
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]
νμ΄μ¬μμ λ©ν° μ°λ λλ₯Ό ꡬννλ λ°©λ²μ 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λμμ΄ λ λ§μ νλ‘κ·Έλ¨μμλ λ©ν° μ°λ λλ§μΌλ‘ μ±λ₯μ μΌλ‘ ν° ν¨κ³Όλ₯Ό μ»μ μ μλ€.
- [Python] νμ΄μ¬ λ©ν° μ°λ λ(thread)μ λ©ν° νλ‘μΈμ€(process) by Nathan Kwon
- [μ΄μ체μ ] Concurrency : locks- blackinkgj
- What is GIL in Python language?
νμ΄μ¬ νμΌ(.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
- Compiling and Linking in Python - Net-informations.com
- What is the process of compilation and linking in python? - tutorialspoint
- Python Compilation/Interpretation Process - stackoverflow
- How does Python work? - towards data science
- Is Python interpreted or compiled? Yes. - Ned Batchelder
- Can Python be compiled? is it compiled or interpreted? - astateofdata
νμ΄μ¬ λΌμ΄λΈλ¬λ¦¬λ ν¨ν€μ§μ λͺ¨μμ΄λ€.
μ£Όλ‘ μ¬μ©λλ νμ΄μ¬ λΌμ΄λΈλ¬λ¦¬λ‘λ Numpy
, Pandas
, Matplotlib
, Scikit-learn
λ±μ΄ μλ€.
ν¨ν€μ§μ λν λ μμΈν λ΄μ©μ #42. ν¨ν€μ§ μ°Έκ³ !
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']
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
μμμ ν΅ν΄ μμ (λΆλͺ¨) ν΄λμ€μ λ©€λ² ν¨μ, λ©€λ² λ³μλ€μ λͺ¨λ νμ (μμ) ν΄λμ€κ° κ°μ§ μ μλ€. μμ ν΄λμ€λ₯Ό μμν¨μΌλ‘μ¨ μ½λ μ¬μ¬μ©μ±μ΄ λ μ’μμ§κ³ , κ΄λ¦¬κ° μ©μ΄ν΄μ§λ€.
νμ΄μ¬μ λΆλͺ¨ ν΄λμ€ A λ₯Ό μμ ν΄λμ€ B κ° μμνλ Single Inheritance, λΆλͺ¨ ν΄λμ€ A λ₯Ό μμ ν΄λμ€ B κ° λ€μ B λ₯Ό μμ ν΄λμ€ C κ° μμνλ Multi-level Inheritance, λΆλͺ¨ ν΄λμ€ A κ° μ¬λ¬ μμ ν΄λμ€μ μμλλ Hierarchical Inheritance, νλμ μμ ν΄λμ€κ° μ¬λ¬ λΆλͺ¨ ν΄λμ€λ₯Ό μμνλ Multiple Inheritance κ° μλ€.
class ν€μλλ₯Ό μ¬μ©νμ¬ ν΄λμ€λ₯Ό λ§λ€ μ μλ€. μ΄ λ, ν΄λμ€λͺ μ κ΄νΈμ μμλ°μ λΆλͺ¨ ν΄λμ€λ₯Ό μ€μ ν μλ μλ€.
κΈ°λ³Έμ μΌλ‘ __init__
μ΄λΌλ λ§€μ§ λ©μλλ₯Ό ν΅ν΄ λ©€λ² λ³μλ€μ μΈν
ν μ μλ€. μμΈνλ ν΄λμ€κ° κ°μ²΄λ‘ μ μΈλ λ, λ©€λ² λ³μμ κ°μ μ΄κΈ°ννλ μν μ λ΄λΉνλ€.
ν΄λμ€ λ΄μμλ λ©€λ² ν¨μλ₯Ό λ§λ€ μ μκ³ , ν΄λμ€ κ°μ²΄μμ λ©€λ² ν¨μλ₯Ό μ¬μ©ν μ μλ€.
class MyClass():
def __init__(self, feature):
self.feature = feature
...
def my_method(self):
...
μ£Όλ‘ ν μ€νΈλ₯Ό μν΄ λ§μ΄ μ¬μ©λλ λ°©λ²μΌλ‘, μ΄λ€ ν΄λμ€λ λͺ¨λμ μΌλΆ (ν¨μλ λ³μ λ±) λ₯Ό λ‘컬μμ λ°νμμΌλ‘λ§ 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 κ° λμ
νμ΄μ¬μ μλ°μ λ€λ₯΄κ² multiple inheritance μ μ§μνλ€. multiple inheritance μ κ°λ μ #55 μμ μ°Έκ³ ν μ μλ€.
μμλ μλμ κ°λ€.
class P_A():
...
class P_B():
...
class C(P_A, P_B): #P_A μ P_B ν΄λμ€λ₯Ό λμμ μμ
...
λ€νμ±μ κ°μ²΄μ§ν₯μ μ£Όμ κ°λ μΌλ‘ μ¬λ¬κ°μ§ ννλ₯Ό κ°μ§ μ μλ λ₯λ ₯μ λ§νλ€. λ€νμ±μ μ½λμ μ μ§λ³΄μμ λμμ μ€λ€.
νμ΄μ¬μ λ€νμ±μ μ§μνλλ°, + μ°μ°μ΄λ len μ°μ°μ λν΄ μκ°ν΄λ³Ό μ μλ€. μ΄λ€μ μ¬λ¬ νμ μ λ³μμ λν΄μλ λμΌν κΈ°λ₯μ μ 곡νλλ° overriding κ³Ό overloading μ ν΅ν΄ κ°κΈ° λ€λ₯Έ νμ μ λ³μμλ λ°μνλλ‘ λ€νμ±μ μ£ΌμκΈ° λλ¬Έμ κ°λ₯νλ€.
μΊ‘μνλ μ£Όμ λ³μλ ν¨μλ₯Ό μΈλΆλ‘λΆν° 보νΈνλ λ°©λ²μ λ§νλ€. μΊ‘μνλ₯Ό ν΅ν΄ μ½λμ μμ μ±μ λμΌ μ μλ€.
νμ΄μ¬μμλ ν΄λμ€λ₯Ό μκ°ν΄λ³Ό μ μλ€. ν΄λμ€μ λ©€λ² λ³μλ λ©€λ² ν¨μμ μ κ·ΌνκΈ° μν΄μλ ν΄λμ€μ λν κ°μ²΄λ₯Ό λ§λ€μ΄μΌ νλ€. κ°μ²΄λ₯Ό ν΅ν΄ λ©€λ²μ μ κ·ΌνκΈ° λλ¬Έμ μ§μ λ³μλ₯Ό μλλ κ²λ³΄λ€ λ°μ΄ν°λ₯Ό λ μμ νκ² μ§ν¬ μ μλ€.
λ°μ΄ν° μΆμνλ κ°μ²΄μ§ν₯μ μ£Όμ κ°λ μΌλ‘ μ¬μ©μμκ² λ°μ΄ν°μ μ£Όμ μ λ³΄λ§ μ 곡νμ¬ κ΅¬μ²΄μ μΈ κ΅¬νμ λͺ°λΌλ μ¬μ©ν μ μκ² λ§λλ λ°©λ²μ΄λ€.
νμ΄μ¬μμλ abstract class λ₯Ό ν΅ν΄ λ°μ΄ν° μΆμνλ₯Ό ν μ μλ€. abstract class λ₯Ό μ¬μ©νκΈ° μν΄μλ abc
λͺ¨λμ import νκ³ metaclass=ABCClass
μ @abstractmethod
λ₯Ό μ¬μ©ν΄μΌ νλ€.
from abc import *
class μΆμν΄λμ€λͺ
(metaclass=ABCMeta):
@abstractmethod
def μΆμλ©μλ(self):
pass
νμ΄μ¬μ λ€λ₯Έ μΈμ΄μ λ¬λ¦¬ private, protected λ±μ μ κ·Ό μ νμλ₯Ό μ§μ λͺ μνμ§ μκ³ λ³μλͺ μ ν΅ν΄ μ κ·Ό μ μ΄λ₯Ό νλ€.
μ λμ¬ _ κ° ν κ° μλ κ²½μ°μλ protected, μ λμ¬ _ κ° λ κ° μλ κ²½μ°μλ private, μ λμ¬ _ κ° μκ±°λ μ λ―Έμ¬ _ κ° λ κ° μ΄μ μλ κ²½μ°μλ public μ΄λ€.
νμ΄μ¬μμ ν΄λμ€ λ΄λΆμ μ무 λ΄μ© μμ΄ μ μΈλ§ νκΈ° μν΄μλ pass
λ ...
μ μ¬μ©ν μ μλ€. μΆκ°μ μΌλ‘ empty class λ₯Ό μ μΈν ν, μΈλΆμμ κ°μ²΄λ₯Ό ν΅ν΄ ν΄λμ€μ λ³μλ ν¨μλ₯Ό λ§λ€ μλ μλ€.
class empty():
... # or pass
e = empty()
e.a = 10
print(e.a) # 10
νμ΄μ¬μ λͺ¨λ κ²μ΄ κ°μ²΄μ΄λ€. λ°λΌμ κΈ°λ³Έμ μΌλ‘ object ν΄λμ€λ₯Ό μμλ°κ³ μλ€. object()
ν¨μλ₯Ό μ¬μ©νλ©΄ μλ‘μ΄ κΈ°λ³Έ object κ°μ²΄λ₯Ό λ°νλ°μ μ μλ€.
map ν¨μλ iterable ν κ°μ²΄μ λͺ¨λ μμμ λμΌν ν¨μλ₯Ό μ μ©νλ κΈ°λ₯μ νλ€.
첫 μΈμλ‘ μ μ©ν ν¨μλ₯Ό, λλ²μ§Έ μΈμλ‘ iterable ν κ°μ²΄λ₯Ό λ£μΌλ©΄, iterable ν map κ°μ²΄ ννλ‘ κ° μμμ λν΄ ν¨μκ° μ μ©λ λ¬Άμλ€μ΄ λ΄κ²¨ λμ¨λ€.
int_arr = list(map(int, input().split()))
νμ΄μ¬μ 리μ€νΈλ κ° μμλ€μ κ°μ μ§μ μ¬μ©νμ§ μκ³ μμλ€μ μ£Όμλ₯Ό μ°Έμ‘°νλ λ°©μμ μ¬μ©νκΈ° λλ¬Έμ μμλ€μ νμ μ΄ μ ν΄μ§μ§ μμ νΈλ¦¬νμ§λ§ λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ¬μ©νκ³ λ리λ€λ λ¨μ μ΄ μλ€.
λ°λ©΄, λνμ΄λ C κΈ°λ°μΌλ‘ ꡬνλμ΄ μμλ€μ νμ μ 미리 μ€μ νμ¬ λ©λͺ¨λ¦¬λ₯Ό μ κ² μ¬μ©νκ³ λΉ λ₯΄λ€. λν νλ ¬κ³Ό μ νλμμ νΈλ¦¬ν ν¨μλ€μ μ 곡νλ€λ μ₯μ λ μλ€.
λ©ν°μ°λ λ©μ ν λ, 곡μ μμμ λν΄ μ¬λ¬ μ°λ λκ° λμμ μ κ·Όνλ€λ©΄ κ°±μ λ λ΄μ©μ΄ μ μ€λλ λ±μ λ¬Έμ κ° λ°μν μ μλ€. μ΄λ₯Ό λ§κΈ° μν΄ νμ΄μ¬μ GIL (Global Interpreter Lock) μ ν΅ν΄ python interpreter μ ν μ°λ λλ§ μ κ·Όνμ¬ λͺ¨λ μμμ μ¬μ©ν μ μκ² νλ€.
μ ννλ λ©ν° μ°λ λκ° bytecode(=instruction) ν λΌμΈμ©μ λ€κ³ μκΈ° λλ¬Έμ, ν μ°λ λμ bytecode ν μ€μ λν΄μλ§ GIL μ νμ©νλ€.
- [python] GIL, Global interpreter Lockμ 무μμΌκΉ? - μνκ³Όμ μ’μΆ©μ°λ νλ‘κ·Έλλ°
- μ Pythonμλ GILμ΄ μλκ° - κ°λ°μλ°λΈλ‘κ·Έ
νμ΄μ¬μ μΌλ°μ μΌλ‘ C λ‘ κ΅¬νλ μΈν°νλ¦¬ν° μΈμ΄μ΄λ€. μΌλ°μ μΈ C μΈμ΄μ ꡬλΆνκΈ° μν΄ νμ΄μ¬ ꡬν체 C λ₯Ό CPython μ΄λΌκ³ λΆλ₯Έλ€.
CPython μ μΈν°ν리ν°μ΄λ©΄μ μ»΄νμΌλ¬λ‘ Python μ½λλ₯Ό C κ° μλ bytecode λ‘ μ»΄νμΌν΄μ£Όκ³ , μ΄λ₯Ό interpreter(virtual machine) κ° μ€ννκ² λ§λ λ€. μ΄λ¬ν CPython μ interpreter μ μΈ νΉμ§μ΄ νμ΄μ¬μ μ°¨λ³λκ² λ§λ€μλ€.
ν¨μλ₯Ό μΈμλ‘ λ°κ³ λ΄λΆ ν¨μμμ μΈμλ‘ λ°μ ν¨μλ₯Ό μ¬μ©νλ ν΄λμ€λ ν¨μκ° μμ λ, μΈμλ‘ μ¬μ©ν ν¨μλ₯Ό κ°νΈνκ² μ§μ ν΄μ£Όλ μν μ νλ κ²μ΄ 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)
νμ΄μ¬μμλ λͺ¨λ κ²μ΄ κ°μ²΄μ΄λ―λ‘ λ³μλ€μ κ°μ λ°λ‘ κ°μ§μ§ μκ³ κ°μ κ°μ§ μ£Όμλ₯Ό μ°Έμ‘°νκ² λλ€.
object interning μ μμ£Ό μ¬μ©λ , μ¦ μ¬νμ©λ object μ λν΄ λ§€λ² μλ‘μ΄ μ£Όμλ₯Ό ν λΉνλ κ²μ λΉν¨μ¨μ μ΄λ―λ‘, νλμ μ£Όμμ κ°μ μ£Όκ³ κ·Έ μ£Όμλ₯Ό μ¬νμ©νλ μμ μ λ§νλ€.
κΈ°λ³Έμ μΌλ‘ νμ΄μ¬μμλ -5~256, [a-Az-Z0-9_]
μ λν΄ κ³ μ λ μ£Όμλ₯Ό ν λΉνμ¬ interning μ νκ³ μλ€.
@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)
- 44. class μ 리, μ μ λ©μλ @classmethodμ @staticmethodμ μ 리 - νμ΄μ¬ κΈ°λ³Έμ κ°κ³ λ¦μ!
- νμ΄μ¬μμ @property μ λν΄ μμ보μ. - HAMA λΈλ‘κ·Έ