[머신러닝 인강] 1. Python Programming 기초(3)

Uno·2021년 2월 24일
0



반복문

  • 반복적인 작업을 가능하게 해주는 도구
  • 특정 조건을 만족하는 경우 수행할 수 있음(while)
  • 리스트, 문자열, 튜플 등 컬렉션 타입의 아이템을 하나씩 순회하면서 사용가능(for)
  • 코드 작업에서, 가장 많이 사용하는 구문 중 하나

while 키워드

  • while 뒤의 조건이 True일 경우, while 코드 블록을 계속 수행
  • 조건이 False가 되면 블록 수행을 멈추고 이후 코드를 실행

무한루프

  • whiled의 경우 종료가 되지 않도록 코드를 작성하면 블록에서 빠져나올 수 없음
while True:
		print('haha')

break

  • loop를 중단할 때 사용
  • 보통 조건문 안에서 수행되며, 조건을 만족하는 경우 loop를 탈출하기 위해 사용
  • loop를 중단 하는 경우, while 이후의 코드를 수행
a = [1, 10, 9, 24, 25, 26]

i = 0
while i < len(a):
    if a[i] > 20:
        break    
    print(a[i])
    i += 1
    
print('hahah')

continue

  • break 처럼 반복을 중단하여 빠져나오지 않고, 다시 while조건으로 점프함
  • 특정한 경우에는 코드를 수행하지 않고 다음으로 건너 뛰기 위해 사용
a = 7
while a > 0:
    a -= 1
    if a == 5:
        continue
    print(a)

for 반복문

  • 리스트, 문자열 등 순회 가능한 객체를 순회하면서 값을 처리할 때 사용
a = [1, 2, 4, 3, 5]
for i in a:
    print (i, i * 2)

문자열의 아이템 출력하기

  • 문자열의 경우 순회 가능, 리스트의 유사하게 순회 가능
for x in 'hello world':
    print(x, end = ' ') # h e l l o  w o r l d

리스트 아이템 출력하기

a = [1, 10, 3, 4, 5]
for num in a:
    if num % 2 == 0:
        print(num/2, end = ' ')
    else:
        print(num+1, end = ' ')
# 2 5.0 4 2.0 6

dict의 아이템 출력하기

  • dictionary의 경우 기본적으로 순회하게 되면 key값을 참조
  • keys()함수를 이용하여 key값만 순회 가능
  • values()함수를 이용하여 value 값만 순회 가능
  • items()함수를 이용하여 tuple형태로 key,value 순회 가능
a = {'korea': 'seoul', 'japan': 'tokyo', 'canada': 'ottawa'}
for key in a:
    print(key, a[key])
a = {'korea': 'seoul', 'japan': 'tokyo', 'canada': 'ottawa'}
for key in a:
    print(key)
a = {'korea': 'seoul', 'japan': 'tokyo', 'canada': 'ottawa'}
for value in a.values():
    print(value)
a = {'korea': 'seoul', 'japan': 'tokyo', 'canada': 'ottawa'}
list(a.items())
# [('korea', 'seoul'), ('japan', 'tokyo'), ('canada', 'ottawa')]
for key, value in a.items():
    print(key, value)

for에서 index 사용하기

  • 기본적으로 for에 리스트를 순회하는 경우, 값만 추출 함
  • enumerate 함수를 이용하여 인덱스와 값 모두 사용 가능
a = [1, 2, 3, 4, 5]
for index, num in enumerate(a):
    if index > 3:
        print(index, num) # 4 5

break

a = [100, 90, 80, 70, 60, 50]
for num in a:
    if num < 80:
        break    
    print(num, end = ' ') # 100 90 80

continue

a = [100, 90, 80, 70, 60, 50]
for num in a:
    if num >= 60 and num <= 70:
        continue
    print(num, end = ' ') # 100 90 80 50

loop 중첩

a = [1, 2, 4]
for i in a:
    for j in a:
        print(i * j, end = ' ')
				# 1 2 4 2 4 8 4 8 16

collection의 길이

  • len() 내장함수로 계산 가능
a = [1, 2, 3, 4, 5, 1]
len('hello world') # 11

range 함수

  • 리스트를 쉽게 만들 수 있는 내장함수
  • 주어진 값에 따라 다양한 결과를 반환
list(range(101))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

함수

함수의 정의

  • 정의 시 최초에 def 키워드 사용
  • argument 정의(함수에 입력으로 전달되는 값을 의미, argument 또는 parameter)
  • 마지막에 콜론(:)필요
  • 함수가 해당 기능을 수행하고 완료된 값을 전달하기 위해 return 키워드 사용

parameter(argument) (인자)

  • 함수에 전달되는 입력(input)
  • 파라미터로 int, string, float, boolm, list, dict 등등 어떤 파이썬 객체도 전달 가능
  • 함수도 함수의 파라미터로 전달 가능
  • python의 경우, 타입 명시가 없기 때문에, 함수 생성 시, 의도된 파라미터의 타입에 맞게 입력을 전달하는 것이 중요
  • 또한 파라미터를 전달 할 때, 정의된 순서에 따라 값을 전달하는 것이 중요
def substract(x, y):
    sub = x - y
    return sub

a = substract(100, 70)
print(a) # 30

default parameter

  • 함수의 파라미터에 기본값 지정 가능
  • 파라미터를 명시하지 않을 경우, 지정된 기본값으로 대체
def add(x, y=10, z=5):
    a = x + y + z
    return a

add(10) # 25

기본 파라미터의 다른 예

  • print 함수
    • sep, end, file등 여러 기본 파라미터를 가짐
print(1, 2, 3, sep='!', end='%%%')
print(2, 3, 4, sep='p')
# 1!2!3%%%2p3p4

default parameter 사용 시 주의 점

  • 디폴트 파라미터 뒤에 일반 파라미터가 위치할 수 없음

  • e.g) 올바른 예

    def test(a, b, c = 1)
    def test(a, b = 1, c = 2)
    def test(a = 1, b = 1, c = 3)
  • e.g) 올바르지 않은 예

    def test(a, b = 1, c)
    def test(a = 1, b, c)
    def test(a = 1, b = 1, c)

keyword parameter

  • 파이썬의 경우, 파라미터에 값을 전달 할 때, 파라미터의 이름을 명시하여 전달 가능
  • 파라미터 이름을 사용하지 않을 경우, 기본적으로 순서에 맞게 전달
def test(x, y, z):
    a = x + y + z
    return a

test(x=10, y=50, z=3) # 63

return

  • 기본적으로 함수의 종료를 명시
    • return 옆에 값이나 수식이 있다면 해당 값을 호출자(caller)에게 반환(전달)
    • return 만 존재하면 None 반환
    • return이 없는 경우, 기본적으로 함수 코드 블록이 종료되면 종료로 간주. 이때도 None 반환

multiple return

  • tuple반환을 하여 복수개의 값 리턴 가능
def add_mul(x, y):
    s = x + y
    m = x * y
    
    return s, m

a, b = add_mul(20, 3)
print(a, b) # 23 60

variable scope(변수의 범위)

  • 변수가 참조 가능한 코드상의 범위를 명시
  • 함수내의 변수는 자신이 속한 코드 블록이 종료되면 소멸
  • 특정 고크 블록에서 선언된 변수를 지역변수(local variable) 이라고 함
  • 반대로 가장 상단에서 정의되어 프로그램 종료 전까지 유지되는 변수를 전역변수(global varible)이라고 함
  • 같은 이름의 지역변수와 전역변수가 존재할 경우, 지역변수의 우선순위가 더 높음

variable length argument(가변길이 인자)

  • 전달되는 파라미터의 개수가 고정적이지 않은 경우 사용
  • e.g)
    • print 함수
    • format 함수

*args, **kwargs

*args : 파라미터를 튜플의 형태로 전달

**kwargs : 파리미터를 딕셔너리 형태로 전달(네임드 파라미터)

def test(*args): # arguments
    for item in args:
        print(item, end = ' ')
    
test(10, 30, 40, 50, 60, 70)
# 10 30 40 50 60 70

keyword parameter(키워드 파라미터)

  • **가 붙은 경우에는 키워드 파라미터로 인식
  • 즉 함수 호출 시, 파라미터의 이름과 값을 함께 전달 가능
def test2(**kwargs): # key word arguments 
    for key, value in kwargs.items():
        print('key:', key, ', value:', value)
    
test2(a=1)
# key: a , value: 1
  • 가변길이 함수의 대표적인 예 → 문자열 포맷 함수
    • 여러가지 값과 포맷을 이용하여 문자열을 정희할 수 있는 함수
    • {} placeholder를 문자열 내에 위치 시킨 후, 해당 위치에 format함수로 전달된 값으로 대체하여 문자열 생성
a = '오늘 온도: {today_temp}도, 강수확률은: {today_prob}% 내일온도: {tomorrow_temp}도'.format(tomorrow_temp=23, today_prob=40, today_temp=40)
print(a)
# 오늘 온도: 40도, 강수확률은: 40% 내일온도: 23도

lambda 함수

  • 단일문으로 표현되는 익명함수
  • 익명함수란 이름이 없는 구현체만 존재하는 간단한 함수를 의미
  • 코드 상에서 한번만 사용되는 기능이 있을 때, 굳이 함수로 만들지 않고 1회성으로 만들어서 쓸 때 사용
def square2(x):
    return x**2

square2(5) # 25

square = lambda x:x**2
square(5) # 25
def add(x, y):
    return x + y

add2 = lambda x,y:x+y

add(10,20) # 30
add2(10, 20) # 30
strings = ['bob', 'charles', 'alexander3', 'teddy']
strings.sort(key=lambda s:len(s))

print(strings) # ['bob', 'teddy', 'charles', 'alexander3']

filter, map, reduce

  • lambda가 유용하게 사용되는 3가지 대표적 함수
  • 함수형 프로그래밍의 기본 요소
  • filter : 특정 조건을 만족하는 요소만 남기고 필터링
  • map : 각 원소를 주어진 수식에 따라 변형하여 새로운 리스트를 반환
  • reduce : 차례대로 앞 2개의 원소를 가지고 연산. 연산의 결과가 또 다음 연산의 입력으로 진행됨. 따라서 마지막까지 진행되면 최종 출력은 한개의 값만 남게 됨'
# filter
def even(n):
    return n % 2 == 0

even(3) # False

nums = [1, 2, 3, 6, 8, 9, 10, 11, 13, 15]
list(filter(lambda n:n%2==0, nums))
# [2, 6, 8, 10]
# map
# 주어진 리스트, 리스트의 제곱을한 숫자로 새로운 리스트
nums = [1, 2, 3, 6, 8, 9, 10, 11, 13, 15]
list(map(lambda n:n**2, nums))
# [1, 4, 9, 36, 64, 81, 100, 121, 169, 225]
import functools

a = [1, 3, 5, 8]
# 리스트 내의 모든 숫자의 합

functools.reduce(lambda x,y:x+y, a) # 17

모듈 임포트

  • 다양한 기능들이 미리 함수로 구현되어 모듈 형태로 제공
  • 앞으로 사용하게 될 대표적인 모듈
    • requests - HTTP 요청/응답 모듈
    • numpy - 수치해석 모듈
    • pandas - 데이터 분석 모듈

import

  • import를 사용하여 해당 모듈 전체를 import
import math
math.pi # 3.141592653589793
math.cos(100) # 0.8623188722876839

from import

  • 해당 모듈에서 특정한 타입만 import
from math import pi
from math import cos
cos(100) # 0.8623188722876839

* 임포트

  • 해당 모듈내에 정의된 모든 것을 import
  • 일반적으로 사용이 권장되지 않음
from math import *

as

  • 모듈 import 시, alias(별명) 지정가능
import math as m
print(m.exp(3)) # 20.085536923187668
print(m.cos(100)) # 0.8623188722876839

머신러닝과 데이터 분석 A-Z 올인원 패키지 Online. 👉 https://bit.ly/3cB3C8y

0개의 댓글