๐Ÿ“‚ python advanced (1)

Haks.ยท2024๋…„ 12์›” 8์ผ
0

Study

๋ชฉ๋ก ๋ณด๊ธฐ
4/65

๐Ÿ“ 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


  • import 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 ์ฐธ์กฐ
       + ๊ฐ€๋ณ€ํ˜•์ธ ๊ฒƒ์€ ๊ณ ์œ ์˜ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
       
  

๐Ÿ“Œ ์ผ๊ธ‰ ํ•จ์ˆ˜


  1. ๋Ÿฐํƒ€์ž„ ์ดˆ๊ธฐํ™”
  2. ๋ณ€์ˆ˜ ํ• ๋‹น ๊ฐ€๋Šฅ
  3. ํ•จ์ˆ˜ ์ธ์ˆ˜ ์ „๋‹ฌ ๊ฐ€๋Šฅ
  4. ํ•จ์ˆ˜ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ๊ฐ€๋Šฅ(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 ํ•จ์ˆ˜


  1. ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๊ฐ’,์ƒํƒœ(๋ ˆํผ๋Ÿฐ์Šค)๋ฅผ ๋ณต์‚ฌ ํ›„ ์ €์žฅ ํ•˜๋Š” ์—ญํ•  -> ์ €์žฅํ›„ ์ ‘๊ทผ(์—‘์„ธ์Šค) ๊ฐ€๋Šฅ
  2. ํด๋กœ์ €๋Š” ๊ณต์œ ํ•˜๋˜ Immutable, ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ „๋‹ฌ ํ• ๋•Œ๋„ ์‚ฌ์šฉ
  3. ๋ถˆ๋ณ€์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ atom(์›์ž์„ฑ), STM -> ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ(coroutine) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žฅ์ 
  4. ์ž์œ ์˜์—ญ์—์„œ ์ž์œ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์Œ, ํ•ด๋‹น์˜์—ญ์˜ ์ƒํƒœ๋ฅผ ๊ธฐ์–ต!!
# ํด๋ž˜์Šค๋กœ ํด๋กœ์ ธ ๊ตฌํ˜„
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)) # [10] / 1 , 10.0
 print(cls(30)) # [10,30] / 2 , 20.0
 print(cls(50)) # [10,30,50] / 3 , 30.0 
 # ์ž์œ ์˜์—ญ์— ์žˆ๋Š” series ์— ๊ฒŒ์† ์ €์žฅ ์‹œํ‚ด
# ํด๋กœ์ ธ ๊ตฌํ˜„
def closure_1() :
	# Free variable : ์ž์œ  ์˜์—ญ,ํด๋กœ์ € ์˜์—ญ
	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 # ์ด ์ค„์—์„œ ์ƒˆ๋กœ์šด ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ์žกํžˆ๊ธฐ์— ์ž์œ ์˜์—ญ์—์„œ์˜ cnt๊ฐ€ ์˜ํ–ฅ์„ ๋ชป๋ฐ›์Œ
        total += v
        return total / cnt
    return averager 
    # ์˜ค๋ฅ˜ ๋ฐœ์ƒ 
# nonlocal ์‚ฌ์šฉ
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)) # 10.0
print(cls3(30)) # 15.0
print(cls3(50)) # 20.0

๐Ÿ“Œ Decorator


  • ์žฅ์ 
    1. ์ค‘๋ณต์ œ๊ฑฐ, ์ฝ”๋“œ๊ฐ„๊ฒฐ, ๊ณตํ†ต ํ•จ์ˆ˜ ์ž‘์„ฑ
    1. ๋กœ๊น…, ํ”„๋ ˆ์ž„์›Œํฌ, ์œ ํšจ์„ฑ ์ฒดํฌ -> ๊ณตํ†ต๊ธฐ๋Šฅ
    2. ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉ ์šฉ์ด
  • ๋‹จ์ 
    1. ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Œ
    1. ํŠน์ • ๊ธฐ๋Šฅ์— ํ•œ์ •๋œ ํ•จ์ˆ˜๋Š” -> ๋‹จ์ผ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
    2. ๋””๋ฒ„๊น… ๋ถˆํŽธ
import time

def perf_clock(func) : # fucn ํ•จ์ˆ˜๋ฅผ ์ž์œ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ
	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) # [1.50131s] time_func(1.5) -> None
no_deco2(100,200,300,400,500) # [1.50169s] perf_clocked(1.5) -> None

# ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ
@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]))) # ์ด๋ ‡๊ฒŒ ์จ๋ฒ„๋ฆฌ๋ฉด ๊ทธ๋‹ค์Œ์— 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 ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ
* ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ•ธ์…˜ ์€ ๋ชจ๋“ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๋กœ๋“œ
* ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ตœ์†Œํ™”

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด