๐ python
๐ method
* sorted(,key = lambda x:(x,y)) ๋ฐ์ ๋ณ์๋ฅผ x ์ฆ ์ฒซ๋ฒ์งธ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
๊ทธ ๋ง์ฝ ์ ๋ ฌํ ๊ฐ์ด ๊ฐ์๊ฒ ์์ผ๋ฉด ๋๋ฒ์งธ y์ ๋ํด์ ์ ๋ ฌ ์ํจ๋ค.
* replace() : ๋ฌธ์์ด์ ๊ต์ฒดํ๋ ๋ฉ์๋, ๋์ฒด์๋ก ์ ์๊ฐ ๋์ค๋ฉด ์๋จ ์ ์๋ฉด replace(a,str(b) ํด์ผํจ
* replace() : ๋ฉ์๋๋ ์๋ ๋ฌธ์์ด์ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํ ํ๋ ๊ฒ์
* format() : ์ซ์๋ฅผ ๋ค๋ฅธ ์ง์์ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ ์ฌ์ฉ
- format(42, '#b') # '0b101010'
- format(42, '#o') # '0o52'
- format(42, '#x') # '0x2a'
- format(42, '#X') # '0X2A'
* int(a,2) : 2์ง์์ธ ๋ฌธ์์ด a ๋ฅผ ์ญ์ง์๋ก ์ ํ
- int('0b101010',2) # 42
- int('0o52', 8) # 42
- int('0x2a', 16) # 42
* bin(a) : ์ญ์ง์๋ฅผ 2์ง์๋ก ์ ํ 0bํฌํจ ๊ทธ๋์ [2:] ํ๋ฉด ์ด์ง์๋ง ์ถ๋ ฅ
- bin(42) # '0b101010'
- oct(42) # '0o52'
- hex(42) # '0x2a'
- bin(0b101010) # '0b101010'
- oct(0b101010) # '0o52'
- str(0b101010) # '42'
* s.find('123') : '123'์ด ์๋ ์ธ๋ฑ์ค ๋ฒํธ ๋ฐํ(๋ฌธ์์ด์์์ )
* s.index('123') : ๋์ผ
* sum() : ์ซ์ํ ๋ฆฌ์คํธ,ํํ ์์ ๊ฐ ๋ฐํ ๊ฐ๋ฅ
* index() : ์ด๋ค ํ์
์์๋ ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌธ์์ด,๋ฆฌ์คํธ,ํํ,range,... ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ์๋ฌ๋ฐ์
- array.index(x) : x ์ ์ธ๋ฑ์ค ๋ฐํ
- array.index(x,start) : start ๋ถํฐ ์ธ๋ฑ์ค ๋ฐํ
- array.index(x,start,stop) : start ๋ถํฐ stop x์ ์ธ๋ฑ์ค ๋ฐํ (stop-1)
* strip() : ์์ชฝ ๊ณต๋ฐฑ๋ง ์ง์์ง๊ณ ์ฌ์ด๊ณต๋ฐฑ์ ์์ง์์ง
* split() : ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋๋๋๋ฐ ๊ณต๋ฐฑ์ด ๊ฒน์ณ๋ ๊ฐ์ด ์ง์์ค๋ค .
(' ') ์ด๋ ๊ฒ ์ฌ์ฉํด์ผ ํ๋์ ๊ณต๋ฐฑ๋ง ํด์ ๋๋๋ค. ์์ชฝ ๊ณต๋ฐฑ๋ ์ ๊ฑฐ๋จ
* ord(๋ฌธ์) : ํด๋น ๋ฌธ์๋ฅผ ์ ๋์ฝ๋ ์ ์๋ก ๋ฐํ
* chr(์ ์) : 0~1,114,111 ์ ์๋ฅผ ํด๋น ๋ฌธ์๋ก ๋ฐํ
* filter(์กฐ๊ฑด, ์ํ ๊ฐ๋ฅํ ๋ฐ์ดํฐ) : ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ง ๋ฐํ ์ํค๋ ํจ์
* map(์ ์ฉํ ํจ์,iterable) : ํจ์๋ฅผ ์ ์ฉ์์ผ์ ๋ฐํ ,list(map()) ์ด๋ฐ์์ผ๋ก ํด์ผ ๊ฐ์ด ๋์ด
* sum() :list = [[1],[2,3]]
sum(list,[])
return [1,2,3]
* pop() : ์ธ๋ฑ์ค ์ง์ ,๋ฏธ์ง์ ์ ๋ง์ง๋ง ์ญ์ , ๊ฐ์ฒด๋ก ๋ฐํ!!
* remove() : ๊ฐ์ง์ ํด์ ์ญ์ , ํด๋น ๊ฐ์ด ์์ผ๋ฉด valueError
* __doc__ : ์ฃผ์์ ๋ณด๋ ํจ์
* ์ฌ๊ทํจ์ :
```
def factorial(n):
if n == 1 : # n<2
return 1
return n * factorial(n-1)
# n*n ์ด์ฐจ์ ๋ฐฐ์ด๋ง๋ค๊ธฐ
def solution(n):
answer=[[0]*n for _ in range(n)]
for i in range(n): answer[i][i]=1
return answer
* all() ํจ์ : ์์ ์กฐ๊ฑด์ด ๋ชจ๋ ๋ง์กฑํ ๊ฒฝ์ฐ ์ฐธ์ ๋ฐํ
def solution(arr):
return int(all(arr[i][j] == arr[j][i] for
i,v in enumerate(arr) for j in range(len(v))))
* 2์ฐจ์ ๋ฐฐ์ด์์์ sort() ํจ์
* sort() ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์คํธ์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ค. ํ์ง๋ง
key ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ ฌ๊ธฐ์ค์ ๋ณ๊ฒฝ ํ ์ ์๋ค.
key = lambda x : x[1] ์ ์ด์ ๋๋ฒ์งธ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ฒ ๋ค. # ์ฆ ๊ธฐ๋ณธ์ ์ธ ์ฒซ๋ฒ์งธ์์
2๋ฒ์จฐ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ฒ ๋ค ๋ผ๊ณ ํ๋๊ฒ์
* ๋์
๋๋ฆฌ์ ๊ฒฝ์ฐ .items() ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ๊ฐ๋ฅ x[1] ์ ๋์
๋๋ฆฌ์ ๋ฒจ๋ฅ ์๋ฏธ
sorted_data = sorted(data.items(), key = lambda x : x[1]
๐ copy
- ์์ ๋ณต์ฌ (shallow copy) : [:] ,copy()
- ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑ
- ์๋ณธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ (๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์)
- ๋ฐ์ดํฐ ๋
๋ฆฝ์ฑ ๋ฎ์ (๋ด๋ถ ๊ฐ์ฒด๋ ์๋ณธ๊ณผ ์ฐ๊ฒฐ)
- listํ์
์์ 1์ฐจ์ ๋ฐฐ์ด์ ์์ ๋ณต์ฌ๋ง์ผ๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ์ง๋ง 2์ฐจ์์ด์์ ๋ฐฐ์ด์์
1์ฐจ์๊น์ง์ ํ๋ง ๋ณต์ฌํ ๊ฒ์ด๊ณ 2์ฐจ์ ๋ด๋ถ์ ๊ฐ๋ค์ ์ ์ฒด๊ฐ ๋ค๊ฐ์ด ์ํฅ์ ๋ฐ์ ๋น๊ตํ๊ธฐ ์ด๋ ค์
- ๊น์ ๋ณต์ฌ (deep copy) : copy.deepcopy()
- ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑ
- ๋
๋ฆฝ์ ์ธ ์๋ก์ด ๊ฐ์ฒด ์์ฑ
- ๋
๋ฆฝ์ฑ ๋์ (๋ชจ๋ ์์ค์์ ๋
๋ฆฝ)
๐ Sequence
- ์์๊ฐ ์๋, ์ฌํ ๋น์ด ๊ฐ๋ฅํ, ์์ ์ด ๊ฐ๋ฅํ, ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ, ์ญ์ ๋ ๊ฐ๋ฅํ
- ๋ค์ํ ๋ฉ์๋๋ ์๋ฃ ๊ตฌ์กฐ ํํ์ ๋ ํผ๋ฐ์ค
* ์ง๋ฅํ ๋ฆฌ์คํธ (Comprehending list) : [(,) if,for~~if~]
- ๋งค๊ฐ๋ณ์ ์ ์ธ์ ๊ฐ ํ ๋น ๊ฐ๋ฅ : code = [i for i in chars]
* Geneartor : ()
- ๊ฒ์ผ๋ฅธ ๊ณ์ฐ : ๊ฐ์ ํ๊บผ๋ฒ์ ์์ฑํ์ง ์๊ณ ํ์ํ ๋๋ง ๊ณ์ฐํ๊ณ ๋ฐํ
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ์
- __iter__(),__next__() : ๋ฉ์๋ ์ ๊ณต
- ๋ค์์ ๋ฐํํ ๊ฐ๋ง ๊ฐ์ง๊ณ ์์
- ํ๋ฒ์ ํ๊ฐ์ ํญ๋ชฉ์ ์์ฑ (๋ฉ๋ชจ๋ฆฌ ์ ์ง x)
- yield ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๋๋ง๋ค ๊ฐ์ ์์ฑํ๋ ํจ์
a = (ord(s) for s in chars) # ๋ฐํ ์ค๋น ์ํ
print(next(a)) # ๊ฐ์ ํ๋ฒ์ฉ ๋ฐํ์ํด 1,5,2,3 ์ด ์์ผ๋ฉด ํ์ฌ 1์ด ์ถ๋ ฅ๋๋ ์ํ
* dict : hash ๊ฐ ์กด์ฌ
- key ๊ฐ -> ํด์ฌ์ฃผ์ -> key ์ ๋ํ value ์ฐธ์กฐ
+ ๊ฐ๋ณํ์ธ ๊ฒ์ ๊ณ ์ ์ ํด์๊ฐ์ ๊ฐ์ง๊ณ ์์ง ์๋ค.
๐ ์ผ๊ธ ํจ์
- ๋ฐํ์ ์ด๊ธฐํ
- ๋ณ์ ํ ๋น ๊ฐ๋ฅ
- ํจ์ ์ธ์ ์ ๋ฌ ๊ฐ๋ฅ
- ํจ์ ๊ฒฐ๊ณผ ๋ฐํ ๊ฐ๋ฅ(return)
* callable : ํธ์ถ ์ฐ์ฐ์ -> ๋ฉ์๋ ํํ๋ก ํธ์ถ์ด ๊ฐ๋ฅํ์ง ํ์ธ
__call__ ์ด๋ผ๋ ์ธ์๊ฐ ์์ผ๋ฉด ํจ์๋ฅผ ํธ์ถ ํ ์ ์์
print(callable(str),callable(a)) -> True,True
* partial(ํจ์,๊ณ ์ ํ ๊ฐ) : ์ธ์๋ฅผ ๊ณ ์ ์ํค๋ ํจ์ ,from functools import partial
- ex ) from operator import mul
from operator import partial
five = partial(mul,5)
six = parital(five,6) # ์ด๋ ๊ฒ 2๋ฒ ๊ณ ์ ์ํค๋ฉด ํธ์ถ๋ง ๊ฐ๋ฅํด์ง๋ค ๊ณ ์ ๋จ
print(five(10) -> 10 * 5 = 50
๐ closure ํจ์
- ์ธ๋ถ์์ ํธ์ถ๋ ํจ์์ ๋ณ์๊ฐ,์ํ(๋ ํผ๋ฐ์ค)๋ฅผ ๋ณต์ฌ ํ ์ ์ฅ ํ๋ ์ญํ -> ์ ์ฅํ ์ ๊ทผ(์์ธ์ค) ๊ฐ๋ฅ
- ํด๋ก์ ๋ ๊ณต์ ํ๋ Immutable, ๋ณ๊ฒฝ์ฌํญ์ ์ ๋ฌ ํ ๋๋ ์ฌ์ฉ
- ๋ถ๋ณ์๋ฃ๊ตฌ์กฐ ๋ฐ atom(์์์ฑ), STM -> ๋ฉํฐ์ค๋ ๋(coroutine) ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์
- ์์ ์์ญ์์ ์์ ๋ณ์๋ฅผ ์ ์ฅํ๊ณ ์์, ํด๋น์์ญ์ ์ํ๋ฅผ ๊ธฐ์ต!!
class Averager() :
def __init__(self) :
self._series = []
def __call__(self,v) :
self._series.append(v)
print(f'{self._series} / {len(self._series}')
return sum(self._series) / lens(self._series)
cls = Averager()
print(cls(10))
print(cls(30))
print(cls(50))
def closure_1() :
series = []
def averager(v) :
series.append(v)
print(f'{series} / {len(series)})
return sum(series) / len(series)
return averager
cls = closure_1()
print(cls(10))
print(cls(30))
print(cls(50))
def closure_2() :
cnt = 0
total = 0
def averager (v) :
cnt += 1
total += v
return total / cnt
return averager
def closure_3():
cnt = 0
total = 0
def averager(v) :
nonlocal cnt,total
cnt += 1
total += v
return total / cnt
return averager
cls3 = closure_3()
print(cls3(10))
print(cls3(30))
print(cls3(50))
๐ Decorator
- ์ฅ์
1. ์ค๋ณต์ ๊ฑฐ, ์ฝ๋๊ฐ๊ฒฐ, ๊ณตํต ํจ์ ์์ฑ
- ๋ก๊น
, ํ๋ ์์ํฌ, ์ ํจ์ฑ ์ฒดํฌ -> ๊ณตํต๊ธฐ๋ฅ
- ์กฐํฉํด์ ์ฌ์ฉ ์ฉ์ด
- ๋จ์
1. ๊ฐ๋
์ฑ์ด ๋จ์ด์ง ์ ์์
- ํน์ ๊ธฐ๋ฅ์ ํ์ ๋ ํจ์๋ -> ๋จ์ผ ํจ์๋ก ์์ฑํ๋ ๊ฒ์ด ์ ๋ฆฌํ ์ ์์
- ๋๋ฒ๊น
๋ถํธ
import time
def perf_clock(func) :
def perf_clocked(*args)
st = time.perf_counter()
result = func(*args)
et = time.perf_counter() - st
name = func.__name__
arg_str = ', '.join(repr(arg) for arg in args)
print('[%0.5fs] %s(%s) -> %r' % (et,name,arg_str,result))
return result
return perf_clocked
def time_func(seconds) :
time.sleep(seconds)
def sum_func(*numbers) :
return sum(numbers)
no_deco1 = perf_clock(time_func)
no_deco2 = perf_clock(sum_func)
no_deco1(1.5)
no_deco2(100,200,300,400,500)
@perf_clock
def time_func(seconds) :
time.sleep(seconds)
@perf_clock
def sum_func(*numbers) :
return sum(numbers)
time_func(1.5)
sum_func(100,200,300,400,500)
โจ Tip
* for๋ฌธ dict for key, value in mydict.items()
* sort ํจ์ ๊ธฐ๋ณธ ์ ๋ ฌ์ key ์ด๋ค ๋์
๋๋ฆฌ์์
* ๋์
๋๋ฆฌ์์ key ์ธ์๋ก dict.values() ๋ฅผ ์ฌ์ฉ ํ ์ ์๋ค. ๊ทธ๋์
- sorted(dict.items(), key =lambda x: x[1]) ์ด๋ฐ์์ผ๋ก ํด์ผํ๋ค.
* list comprehension : ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ผ๋ก ์์ฑํ๊ธฐ ์ํ ๋ฌธ๋ฒ
- [ํํ์ for ํญ๋ชฉ in ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด if ์กฐ๊ฑด๋ฌธ] : ํํ์ -> ๋ฆฌ์คํธ์ ์ถ๊ฐํ ๊ฐ์ด๋ ๊ณ์ฐ์
* ์กฐ๊ฑด๋ฌธ์์ ๋น ๊ณต๋ฐฑ์ด์ ์ ๊ฑฐํ๊ณ ์ถ์๋ : i for i in a if i : if i ๋น๋ฆฌ์คํธ๋ฉด false ๋๊น ๋๊ฒจ์ฃผ์ง ์๋๋ค
* []*(์์) : ๋น๋ฐฐ์ด ๋ก
* *unpacking : ํ๋ ํธ๋๊ฒ
- print(divmod(10,9),divemod(*(10,9)) -> (1,1)
print(*divmod(10,9) -> 1,1
- x, y, *rest = range(5) => x=0, y=,1 rest = [2,3,4]
- x, y, *rest = range(2) => x=0, y=1, rest= []
* tuple = tuple * 2 ,list => list * 2 -> ๋๋ค id ๊ฐ ๋ณํจ
* tuple *= 2 , list *= 2 => ํํ์ ๋ถ๋ณ์ด๋ผ id ๊ฐ์ด ๋ณํ๊ณ list ๋ ๊ฐ๋ณ์ด๋ผ id ๊ฐ์ด ๋ณํ์ง ์๋๋ค
ํ์ด์ฌ์ ์ค๋ฅธ์ชฝ ํ์ ๋จผ์ ๊ณ์ฐํ๊ธฐ์ ์ ์์ list ์ id ๋ฅผ ๋ฐํ์ํค๋ ๊ฒ์ด๊ณ ๋ฐ ์์ list ์๋ ์๋ก์ด
id ๋ฅผ ํ ๋น ํ์ง ์๋๋ค.
* ์ปดํ๋ฆฌํธ์
์ ์ฌ์ฉํ์ฌ ๋์
๋๋ฆฌ๋ฅผ ๋ง๋ค๋ฉด ๋ฎ์ด์ฐ๋ ๊ฐ๋
์ผ๋ก ๋๋ค. ํ ํค์ ๊ฐ์ ์ฌ๋ฌ๊ฐ๋ฅผ ๋ฃ์๋ ์ฌ์ฉ x
dict1 = { k : v for k ,v in source}
print(dict1) # {'k1': 'val2','k2':'val5'}
* ๋ฐ๋ณต๋ฌธ for ์ ์ฌ์ฉํด์ ๋ฆฌ์คํธ ์์ ์๋ ์์๋ฅผ ์ ๊ฑฐ ํ๋ ๊ฒฝ์ฐ ๋ณต์ฌ๋ฅผ ํด์ ์ฌ์ฉํด์ผํ๋ค
๊ทธ๋ ์ง ์์ผ๋ฉด ์์๋ฅผ ๊ฑด๋ ๋ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์
for i in list :
remove(i) -> ๊ฑด๋๋ฐ์ด์ง๋ค
for i in list[:] : โ>> ์ด๋ ๊ฒ ๋ณต์ฌ๋ณธ์ ์ฌ์ฉํด์ ์คํ์ํค์!!
* list(Str) ํ๋ฉด list ์์ ๋ฌธ์์ด ํ๋ํ๋๊ฐ ๋ฃ์ด์ง
* ๋ฌธ์์ด๋ in ์ ์ฌ์ฉํ์ฌ ๋ฐ๋ก ๋๋ด์ง์๊ณ ์์ ์๋ ๊ฒ์ ์ฐพ์ ์ ์์
* ๋ฌธ์์ด๋ ์ฌ๋ผ์ด์ฑ ๊ฐ๋ฅ :[:]
* ์๋ก์ด ํ์ ์ถ๊ฐํ ๋ ์ด๋ฏธ ํ์ด ์คํ๋์ ๊ทธํ์ด ์๋ชป ๊ณ์ฐ๋์ ์คํ๋๋๊ฒ ์กฐ์ฌ
for v in arr :
v.extend([0] * (len(arr)-len(arr[0])))
for v in arr :
v.extend([0] * (len(arr)-len(v)))
* iter(ํธ์ถ๊ฐ๋ฅํ๊ฐ์ฒด,๋ฐ๋ณต์๋๋ผ๊ฐ) :
- iter_X = iter([1,2,3,4])
- print(list(iter_x)) -> [1,2,3,4]
- print(list(iter_x)) -> []
- ์ฃผ๋ก next ํจ์๋ ๊ฐ์ด์ next ๋ iterator ์ ๊ฐ์ ์์๋๋ก ํ๋์ฉ ๊บผ๋ด์ฃผ๋ฉฐ ๋์ด์ ์์๋ stopiteration ์๋ฌ๋ฅผ ๋ฐ์
* ๋ฆฌ์คํธ ์ปดํ๋ฆฌํธ์
์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ก๋
* ์ ๋๋ ์ดํฐ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์์ฑํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ต์ํ