1. Python 기초 문법(함수, 변수, args*, kwargs**)

Date:

함수

함수 만들기

  • def 함수명():형식으로 선언 후 들여쓰기로 함수 내용을 정의함
def hello():
    print('hello world')

result : → 호출이 되어야 출력됨

함수 호출

  • 정의된 함수를 불러오는 작업이 필요
  • 함수명() 형식으로 호출할 수 있음
def hello():
    print('hello world')
hello()

result : hello world

함수 작성과 호출 순서

  • 함수를 선 작성 후 호출 가능
  • python은 위에서부터 한 line씩 읽어들여 해석하는 언어여서 함수 정의 후 호출 가능

선 호출 후 정의

h1()
def h1():
    print('hello world')

result : error 발생
image

선 정의 후 호출

def h2():
    print('hello world')
h2()

result : hello world

parameter(매개변수) 지정

  • 함수에서 사용할 변수를 전달해주는 변수
  • 함수 정의 : def 함수명(매개변수):
  • 함수 호출 : 함수명(매개변수)
def add(a,b):
    print(a+b)
add(10,11)

result : 21

return(반환)

  • 함수에서 진행한 결과를 반환하는 역할을 해줌
  • 결과값을 변수로 저장하여 다시 사용할 수 있어 유용하게 사용 가능함
def oper(a,b,o):
    if o=='+':  return a+b
    elif o=='-':return a-b
temp1=oper(10,11,'+')
temp2=oper(10,11,'-')
print(f'더하기 : {temp1}')
print(f'빼기 : {temp2}')

result :
더하기 : 21
빼기 : -1

unpacking(리스트, 튜플, 딕셔너리)

  • list와 Tuple 앞에 *를 붙여 unpacking함
  • dictionary 앞에 **를 붙여 unpacking함
a=[1,2,3]
print(f'그대로 출력 : {a}')
print('언패킹 진행 :',sep = '\n',*a)

result :
그대로 출력 : [1, 2, 3]
언패킹 진행 :
1
2
3

가변 가능한 매개변수

  • * unpacking을 이용하면 가변하는 매개변수 대응이 가능함
  • 매개변수 개수를 유동적으로 활용 가능
def p(*args):
    for arg in args:
        print(arg, end = ' ')
p(1,2,3)
print()
p(1,2,3,4,5,6)

result :
1 2 3
1 2 3 4 5 6

keyword argument

  • 키워드 인수는 직접 인수에 들어갈 키워드를 입력하여 사용함
  • print 함수에 end, sep 같은 인수들도 키워드 인수
  • 키워드 인수는 위치를 바꿔도 상관없음

가변 가능한 키워드 인수

  • **형식으로 사용할 수 있음
  • 매개변수 이름은 관례적으로 keyword arguments를 줄여서 kwargs로 사용함
  • 키워드 인수와 값의 갯수를 유동적으로 사용 가능
def personal_info(**kwargs):
    for k,v in kwargs.items():
        print(k,':',v)

personal_info(name='ㅎㅇㅎ')
print()
personal_info(name='ㅎㅇㅎ',age='33',address='ㅅㅇㅅ')

result :
name : ㅎㅇㅎ

name : ㅎㅇㅎ
age : 33
address : ㅅㅇㅅ

인수별로 위치가 정해져 있음

  • 함수명(일반 변수, 키워드인수, *가변변수, **가변 키워드인수) 형식으로 사용됨

default parameter(매개변수 초기값)

  • 함수명(kwargs = default value)형식으로 사용됨
  • 매개변수를 통한 초기값이 지정되어 있는 경우 함수를 호출할때 그 변수는 따로 지정해주지 않아도 됨
  • print함수의 end="\n"도 초기화된 값으로 따로 지정할 필요가 없이 사용 가능함

lambda 표현식

  • 간단한 함수를 구현하기 위한 함수
  • 익명함수(anonymous function)라고도 불림
  • lambda 매개변수들 : 식형식으로 사용됨
  • 이름 없는 함수이기 때문에 위 상태로는 함수를 호출할 수 없어, 변수에 넣어서 사용 가능
  • (lambda 매개변수들 : 식)(입력) 형식으로 인수를 바로 받을 수도 있음
  • 반환값 부분은 변수 없이 한 줄로 표현 가능해야함
y=10
plus_ten = lambda x:x+y
l=[1,2,3]
print(list(map(lambda x:x+y,l)))
print(list(map(plus_ten,l)))

result :
[11, 12, 13]
[11, 12, 13]

if-else추가

a=[1,2,3,4,5,6,7,8,9,10]
print(list(map(lambda x:str(x) if x%3==0 else x,a))) # 3의 배수만 str으로 변경

result : [1, 2, ‘3’, 4, 5, ‘6’, 7, 8, ‘9’, 10]

filter 함수

  • filter(함수, 순서형자료)형식으로 사용
  • 함수는 boolean값으로 True인 값만 저장
print(list(filter(lambda x:x%3==0,range(10))))

result : [0, 3, 6, 9]

reduce 함수

  • reduce(함수, 순서형자료)형식으로 사용
  • from functools import reduce 모듈 불러와야함
  • 0-1, (0-1)-2, ((0-1)-2)-3, … 형식으로 연산 진행

image

가장 큰 값 구하기

from functools import reduce
a=[1,4,7,5,3,2,3,6]
print(reduce(lambda x,y: max(x,y),a))

result : 7

클로저

  • 함수를 둘러싼 환경(지역변수, 코드 등)을 계속유지하다가 함수를 호출할 때 다시 꺼내서 사용하는 함수를 클로저(closure)라고 함
  • return에 내부함수를 넣어 클로저를 만듦
  • return에 함수 넣을 때, ()를 빼고 넣어서 작성함

image

def calc():
    a=10
    b=5
    def mul_add(x):
        return a*x+b
    return mul_add

c=calc()
print(c(1),c(3),c(5))

result : 15 35 55

📌reference

💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡 

Categories:

Updated:

댓글