ํ•œ ๊ฑธ์Œ์”ฉ

[python] ์ œ์–ด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ํ•จ์ˆ˜ ๋ณธ๋ฌธ

Python

[python] ์ œ์–ด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ํ•จ์ˆ˜

winter17 2023. 2. 8. 22:21

๐ŸŒฑ  if ๋ฌธ

a, b = 13, 4

if a > b:
	print('Hi')
elif a < b:
	print('Failed')
else:
	print('wow')
    
>> Hi

๐ŸŒฑ for loop

# ์ •์ˆ˜๋ฅผ ๋ฐ˜๋ณต
for i in range(4):
	print(i, end=" ")
    
>> 0 1 2 3

print(list(range(5, 10)))

>> [5, 6, 7, 8, 9]

print(list(range(0, 10, 3)))

>> [0, 3, 6, 9]
# ๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณต
for i in 'CAMBRIDGE":
	print(i, end=" ")
    
>> C A M B R I D G E
# ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณต
words = ['cat', 'window', 'defenestrate']
for w in words:
    print(w, len(w))

>> cat 3
>> window 6
>> defenestrate 12
# ๋”•์…”๋„ˆ๋ฆฌ ๋ฐ˜๋ณต
users = {'Hans': 'active', 'Éléonore': 'inactive', 'ๆ™ฏๅคช้ƒŽ': 'active'}
	
for user, status in users.copy().items(): # ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค์™€ ๊ฐ’์„ ํ•œ๋ฒˆ์— ์ถœ๋ ฅ: .items()
    if status == 'inactive':
        del users[user] # ๋”•์…”๋„ˆ๋ฆฌ์—์„œ 'inactive' ๊ฐ’ ์‚ญ์ œ
print(users)

>> {'Hans': 'active', 'ๆ™ฏๅคช้ƒŽ': 'active'}

active_users = {}
for user, status in users.items():
    if status == 'active':
        active_users[user] = status # users ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค์™€ ๊ฐ’์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ active_users ๋”•์…”๋„ˆ๋ฆฌ์— ์ถ”๊ฐ€
print(active_users)

>> {'Hans': 'active', 'ๆ™ฏๅคช้ƒŽ': 'active'}

๐ŸŒฑ break, continue, else, pass

  • else: loop๋ฌธ์€ else ์ ˆ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ loop์˜ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ด ๋ผ์„œ loop๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์‹คํ–‰ (try ~ except ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ๋น„์Šท)
    • try๋ฌธ์˜ else์ ˆ์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๋•Œ
    • loop์˜ else์ ˆ์€ break๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๋•Œ ์‹คํ–‰
  • break: loop๊ฐ€ break ๋ฌธ์œผ๋กœ ์ข…๋ฃŒํ•  ๋•Œ๋Š” ์‹คํ–‰X
  • continue: loop์˜ ๋‹ค์Œ iteration(๋ฐ˜๋ณต)์—์„œ ๊ณ„์†ํ•˜๋„๋ก ๋งŒ๋“ฆ
  • pass: pass๋ฌธ์€ ํ”„๋กœ๊ทธ๋žจ์ด ํŠน๋ณ„ํžˆ ํ•  ์ผ์ด ์—†์„ ๋•Œ ์‚ฌ์šฉ, ๋ฌด์‹œ๋จ

 

๐ŸŒฑ ํ•จ์ˆ˜ 

โ–ถ๏ธ ํ•จ์ˆ˜ ์ •์˜ํ•˜๊ธฐ

# ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ํ˜ธ์ถœํ•˜๊ธฐ

# def๋Š” ํ•จ์ˆ˜ ์ •์˜, fib ์ž๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋ฆ„, ๊ด„ํ˜ธ ์•ˆ: ๋งค๊ฐœ๋ณ€์ˆ˜(parameter)
def fib(n): # fib(10)์˜ 10์€ n์— ๋Œ€์ž…๋˜๋ฉด์„œ ์‹œ์ž‘
    a, b = 0, 1
    while a < n: # a๊ฐ’์ด n = 10๋ณด๋‹ค ํฌ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ while loop ์‹คํ–‰
        print(a, end=' ')
        a, b = b, a+b # a, b๊ฐ’์ด ๊ณ„์† ๋ฐ”๋€œ
    print()
    
fib(10) # ํ•จ์ˆ˜ ํ˜ธ์ถœ

>> 0 1 1 2 3 5 8

print(fib)
>> <function fib at 10042ed0>

f = fib
f(100)
>> 0 1 1 2 3 5 8 13 21 34 55 89 

# return ๋ฌธ์ด ์—†๋Š” ํ•จ์ˆ˜๋Š” None ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜
print(fib(0))
>> None

print(fib(10))
>> 0 1 1 2 3 5 8
>> None

 

โ–ถ๏ธ return 

# return : ์›๋ž˜ ์œ„์น˜๋กœ ๋Œ์•„๊ฐ€ + ํ•จ์ˆ˜๋ฅผ ์—ฌ๊ธฐ์„œ ๋๋‚ด / ๋ฆฌํ„ด ๊ฐ’์ด ์—†๋‹ค๋ฉด None
# ์˜ˆ์‹œ 1
def return_test():
	print('A ์ž…๋‹ˆ๋‹ค')
    return
    print('B ์ž…๋‹ˆ๋‹ค')
    
return_test()

>> A ์ž…๋‹ˆ๋‹ค

# ์˜ˆ์‹œ 2
def fib2(n): 
    result = [] # result ๋นˆ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
    a, b = 0, 1
    while a < n:
        result.append(a)    # ์กฐ๊ฑด์ด True์ผ ๋•Œ๋งˆ๋‹ค result๋ฆฌ์ŠคํŠธ์— a๋ฅผ append
        a, b = b, a+b
    return result # ํ•จ์ˆ˜๋กœ๋ถ€ํ„ฐ ๊ฐ’์„ ๊ฐ–๊ณ  ๋ณต๊ท€ํ•˜๊ฒŒ ๋งŒ๋“ฆ, ๊ฐ’์ด ์—†๋‹ค๋ฉด None

f100 = fib2(100)    # call it
print(f100)         # write the result

>> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

 

โ–ถ๏ธ ํ‚ค์›Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜

# ํ‚ค์›Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜
def print_n_times(*values, n=2): # ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜(n=2)๊ฐ€ ๊ฐ€๋ณ€ ๋งค๊ฐœ๋ณ€์ˆ˜(*values)๋ณด๋‹ค ์•ž์— ์˜ค๋ฉด ์˜ค๋ฅ˜๋ฐœ์ƒ
	for i in range(n):
    	for value in values:
        	print(value)
        print(value)
    print() # ์ค„๋ฐ”๊ฟˆ
    
# ํ•จ์ˆ˜ ํ˜ธ์ถœ
print_n_times('์•ˆ๋…•ํ•˜์„ธ์š”', '์ฆ๊ฑฐ์šด', 'ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ', n=3) # n=3์ด ํ‚ค์›Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜

>> ์•ˆ๋…•ํ•˜์„ธ์š”
>> ์ฆ๊ฑฐ์šด
>> ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

>> ์•ˆ๋…•ํ•˜์„ธ์š”
>> ์ฆ๊ฑฐ์šด
>> ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

>> ์•ˆ๋…•ํ•˜์„ธ์š”
>> ์ฆ๊ฑฐ์šด
>> ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

โ–ถ๏ธ ์žฌ๊ท€ ํ•จ์ˆ˜

  • ์žฌ๊ท€(recursion) : ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ
  • ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ™์€ ๊ฒƒ์„ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋งŽ์ด ๋ฐ˜๋ณตํ•œ๋‹ค๋Š” ๋‹จ์  ์กด์žฌ
def factorial(n):
	if n == 0:
    	return 1
    else:
    	return n * factorial(n-1)
print('5!:', factorial(5))

>> 5!: 120

 

โ–ถ๏ธ UnboundLocalError

  • ํŒŒ์ด์ฌ์€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์ง€ ๋ชปํ•จ
  • ํ•˜์ง€๋งŒ, ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์กด์žฌ โžก๏ธ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ [global ๋ณ€์ˆ˜ ์ด๋ฆ„] ์ž‘์„ฑ

 

โ–ถ๏ธ lamda

  • ํ•จ์ˆ˜๋ผ๋Š” '๊ธฐ๋Šฅ'์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์ด์ฌ์€ lamda๊ธฐ๋Šฅ ์ œ๊ณต
  • lamda : ๊ฐ„๋‹จํ•œ ใ…Ž๋งˆ์ˆ˜๋ฅด๋ฅด ์‰ฝ๊ฒŒ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•
lambda ๋งค๊ฐœ๋ณ€์ˆ˜ : ๋ฆฌํ„ด๊ฐ’

ex) lambda x: x * x