Created at : 2024-11-02 15:53
Auther: Soo.Y
πλ©λͺ¨
python 3.6
- λμ λ리μ μμκ° μλ€. (μ€μ λ‘λ 3.7λΆν° μ μ©μ΄λΌκ³ μλ €μ§)
- f-sting λ³μ ν¬ν¨ κ°λ₯ :
{}
μμ λ³μ λͺ μ μ§μ ν΄μ λ¬Έμμ΄μ μμ±ν μ μμ - Type hint λμ
def my_function(name: str) -> str:
return f"Hello, my name is {name}"
python 3.7
- dataclass λ°μ½λ μ΄λ :
@dataclass
λ₯Ό μ¬μ©ν΄μ ν΄λμ€λ₯Ό κ°κ²°νκ² μ μν μ μμ΅λλ€. νΉν id, name, email μ²λΌ λ³μ λͺ μ λμ΄ν΄μ μ μΈν νμκ° μμ΅λλ€. λνprint
λ¬Έμ μ¬μ©ν΄μ μΆλ ₯ν΄μΌ νreturn
νμμ__repr__
λ§€μ§ λ©μλμ μ μΈμ ν΄μΌ νλλ°dataclass
λ μλμΌλ‘ μ μΈλ©λλ€.
Basic class
# Basic class
class User:
def __init__(self, id, name, email):
self.id = id
self.name = name
self.email = email
def __repr__(self):
return (f'{self.__class__.__qualname__}{self.id, self.name, self.email}')
user = User(123, 'hojun', 'hojun@gmail')
print(user)
# User(123, 'hojun', 'hojun@gmail')
dataclass
# using dataclass
from dataclasses import dataclass
@dataclass
class User:
id: int
name: str
email : str
user = User(123, 'hojun', 'hojun@gmail')
print(user)
python 3.8
1. ν λΉ ννμ( := μ°μ°μ, λ°λ€μ½λΌλ¦¬ μ°μ°μ)
ν λΉ ννμμ μ¬μ©νλ©΄ ννμ λ΄μμ λ³μλ₯Ό ν λΉν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λλ₯Ό λ κ°κ²©νκ² μμ±ν μ μμ΅λλ€.
- κΈ°μ‘΄ λ°©μμμλ len(my_list)μ κ²°κ³Όλ₯Ό λ³λλ‘ λ³μ nμ ν λΉν ν 쑰건문μμ μ¬μ©νμΌλ, ν λΉ ννμμ μ¬μ©νλ©΄ 쑰건문μ λ΄μμ μ§μ λ³μλ₯Ό ν λΉνκ³ μ¬μ©ν μ μμ΄ μ½λκ° κ°κ²°ν΄μ§λλ€.
# κΈ°μ‘΄ λ°©μ
n = len(my_list)
if n > 10:
print(f"리μ€νΈ κΈΈμ΄: {n}")
# ν λΉ ννμ μ¬μ©
if (n := len(my_list)) > 10:
print(f"리μ€νΈ κΈΈμ΄: {n}")
2. μμΉ μ μ© λ§€κ°λ³μ
ν¨μ μ μ μ /
κΈ°νΈλ₯Ό μ¬μ©νμ¬ νΉμ λ§€κ°λ³μλ₯Ό μμΉ μ μ©μΌλ‘ μ§μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μΈμκ° λ°λμ μμΉλ‘λ§ μ λ¬λλλ‘ κ°μ ν μ μμ΅λλ€.
/
μμ λ§€κ°λ³μ aμ bλ μμΉ μ μ©μ λλ€. λ€μ cμ dλ μμΉ, μ΄λ¦ λ λ€ κ°λ₯νμ§λ§ aμ bλ μ€μ§ μμΉ λ§€κ°λ³μλ‘λ§ λ°μ μ μμ΅λλ€.
def func(a, b, /, c, d):
print(a, b, c, d)
# μ¬λ°λ₯Έ νΈμΆ
func(1, 2, c=3, d=4)
# μ€λ₯ λ°μ
func(a=1, b=2, c=3, d=4) # TypeError: func() got some positional-only arguments passed as keyword arguments: 'a, b'
3. f-λ¬Έμμ΄ ν₯μ ( =
μ§μ)
f-λ¬Έμμ΄ λ΄μμ =
λ₯Ό μ¬μ©νμ¬ λ³μλͺ
κ³Ό κ°μ ν¨κ» μΆλ ₯ν μ μμ΅λλ€. μ΄λ λλ²κΉ
μ μ μ©νκ² μ¬μ©λ©λλ€.
- fβ{x=}βλ λ³μ xμ μ΄λ¦κ³Ό κ°μ ν¨κ» μΆλ ₯ν©λλ€.
- λλ²κΉ μ λ³μμ μνλ₯Ό μ½κ² νμΈν μ μμ΅λλ€.
x = 10
y = 20
print(f"{x=}, {y=}")
# μΆλ ₯: x=10, y=20
4. μλ‘μ΄ μν ν¨μ
- math.prod() : μνμ€μ λͺ¨λ μμμ κ³±μ κ³μ°ν©λλ€.
- math.isqrt() : μ μμ μ μ μ κ³±κ·Όμ κ³μ°ν©λλ€.
import math
# math.prod μμ
numbers = [1, 2, 3, 4]
product = math.prod(numbers)
print(product) # μΆλ ₯: 24
# math.isqrt μμ
number = 16
sqrt = math.isqrt(number)
print(sqrt) # μΆλ ₯: 4
# math.isqrt μμ
number = 18 # 18μ΄μ§λ§ 16κ³Ό κ°μ κ²°κ³Όκ° λμ΄
sqrt = math.isqrt(number)
print(sqrt) Β # μΆλ ₯: 4
python 3.9
1. λμ
λ리 λ³ν© λ° μ
λ°μ΄νΈ μ°μ°μ (|
λ° |=
)
λμ
λ리λ₯Ό λ³ν©νκ±°λ μ
λ°μ΄νΈνκΈ° μν μλ‘μ΄ μ°μ°μ |
μ |=
κ° μΆκ°λμμ΅λλ€. μ΄λ λμ
λ리μ λ³ν©μ λ κ°κ²°νκ² μ§κ΄μ μΌλ‘ μνν μ μκ² λμμ€λλ€.
|
μ°μ°μλ λ λμ λ리λ₯Ό λ³ν©ν μλ‘μ΄ λμ λ리λ₯Ό μμ±ν©λλ€.|=
μ°μ°μλ κΈ°μ‘΄ λμ λ리λ₯Ό λ€λ₯Έ λμ λλ¦¬λ‘ μ λ°μ΄νΈν©λλ€.- ν€κ° μ’ λ³΅λ κ²½μ°, μ°μΈ‘ λμ λ리μ κ°μ΄ μ°μ ν©λλ€.
# κΈ°μ‘΄ λ°©μ
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged_dict = {**dict1, **dict2}
print(merged_dict) # μΆλ ₯: {'a': 1, 'b': 3, 'c': 4}
# μλ‘μ΄ λ°©μ (| μ°μ°μ μ¬μ©)
merged_dict = dict1 | dict2
print(merged_dict) # μΆλ ₯: {'a': 1, 'b': 3, 'c': 4}
# κΈ°μ‘΄ λμ
λ리 μ
λ°μ΄νΈ
dict1 |= dict2
print(dict1) # μΆλ ₯: {'a': 1, 'b': 3, 'c': 4}
2. νμ νν κ°μ (λ΄μ₯ 컬λ μ μ λν μ λ€λ¦ μ§μ)
μ΄μ list, dict, tupe
λ± λ΄μ₯ 컬λ μ
νμ
μμ μ§μ μ λ€λ¦ νμ
ννΈλ₯Ό μ¬μ©ν μ μμ΅λλ€. μ΄μ μλ typing λͺ¨λμ μ λ€λ¦ νμ
μ μ¬μ©ν΄μΌ νμ΅λλ€.
- μ΄μ μλ
typing.List
λtyping.Dict
λ₯Ό μ¬μ©ν΄μΌ νμ§λ§, μ΄μ λlist[int], dict[str, int]
μ κ°μ΄ λ΄μ₯ νμ μ μ§μ νμ μΈμλ₯Ό μ λ¬ν μ μμ΅λλ€. - μ΄λ μ½λμ κ°κ²°μ±κ³Ό κ°λ μ±μ ν₯μμν΅λλ€.
from typing import List, Dict
# κΈ°μ‘΄ λ°©μ
def process_items(items: List[int]) -> Dict[str, int]:
return {str(item): item for item in items}
# μλ‘μ΄ λ°©μ
def process_items(items: list[int]) -> dict[str, int]:
return {str(item): item for item in items}
3. μλ‘μ΄ λ¬Έμμ΄ λ©μλ
λ¬Έμμ΄μμ νΉμ μ λμ¬λ μ λ―Έμ¬λ₯Ό μ κ±°νλ λ©μλκ° μΆκ°λμμ΅λλ€.
removeprefix(prefix)
λ λ¬Έμμ΄μ΄ μ§μ λ μ λμ¬λ‘ μμνλ©΄ κ·Έ μ λμ¬λ₯Ό μ κ±°ν μλ‘μ΄ λ¬Έμμ΄μ λ°νν©λλ€.removesuffix(suffix)
λ λ¬Έμμ΄μ΄ μ§μ λ μ λ―Έμ¬λ‘ λλλ©΄ κ·Έ μ λ―Έμ¬λ₯Ό μ κ±°ν μλ‘μ΄ λ¬Έμμ΄μ λ°νν©λλ€.- λ¬Έμμ΄μ΄ μ§μ λ μ λμ¬λ μ λ―Έμ¬λ‘ μμνμ§ μκ±°λ λλμ§ μμΌλ©΄ μλ³Έ λ¬Έμμ΄μ κ·Έλλ‘ λ°νν©λλ€.
text = "python_rocks"
# κΈ°μ‘΄ λ°©μ
if text.startswith("python_"):
result = text[len("python_"):]
else:
result = text
print(result) # μΆλ ₯: rocks
# μλ‘μ΄ λ°©μ (removeprefix μ¬μ©)
result = text.removeprefix("python_")
print(result) # μΆλ ₯: rocks
# removesuffix μ¬μ©
filename = "report.pdf"
name = filename.removesuffix(".pdf")
print(name) # μΆλ ₯: report
4. zoneinfo
λͺ¨λ μΆκ°
νμ€ μκ°λ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ§μνλ zoneinfo
λͺ¨λμ΄ μΆκ°λμμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νμμ‘΄ μ²λ¦¬κ° λμ± κ°νΈν΄μ‘μ΅λλ€.
ZoneInfo
ν΄λμ€λ₯Ό μ¬μ©νμ¬ νμμ‘΄ μ 보λ₯Ό κ°μ Έμ¬ μ μμ΅λλ€.datetime
κ°μ²΄μ ν¨κ» μ¬μ©νμ¬ νμμ‘΄ κ°μ μκ° λ³νμ΄ κ°λ₯ν©λλ€.- μμ€ν μ μ€μΉλ¨ IANA μκ°λ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©ν©λλ€.
from zoneinfo import ZoneInfo
from datetime import datetime, timedelta
# νΉμ νμμ‘΄μ νμ¬ μκ° κ°μ Έμ€κΈ°
seoul_time = datetime.now(ZoneInfo("Asia/Seoul"))
print("μμΈ μκ°:", seoul_time)
# νμμ‘΄ κ° μκ° κ³μ°
new_york_time = seoul_time.astimezone(ZoneInfo("America/New_York"))
print("λ΄μ μκ°:", new_york_time)
5. μ ν΄λ¦¬λ 거리 κ³μ° λͺ¨λ
math.dist()
: λ€μ°¨μ 곡κ°μμ λ μ μ¬μ΄μ μ ν΄λ¦¬λ 거리λ₯Ό κ³μ°ν©λλ€.math.hypot()
: μ¬λ¬ μ’νμ μ ν΄λ¦¬λ λμ κ³μ°ν©λλ€.
import math
# math.dist μμ
point1 = [0, 0, 0]
point2 = [3, 4, 5]
distance = math.dist(point1, point2)
print(distance) # μΆλ ₯: 7.0710678118654755
# math.hypot μμ
norm = math.hypot(*point2)
print(norm) # μΆλ ₯: 7.0710678118654755