[Python] 함수

ㅎㅎ·2021년 5월 19일
0

Python

목록 보기
12/27




📌 함수(function)

  • 반복적인 작업을 할때 함수를 만들어, 필요할 때 호출해 코드의 재사용을 가능하게 한다.

- 함수의 구조

  • def는 함수를 만들 때 사용하는 예약어
  • 함수 이름은 만드는 사람이 임의로 만든다.
  • 함수 이름 뒤 괄호 안의 매개변수는 함수의 입력으로 전달되는 값을 받는 변수를 말한다.
  • return은 함수의 결괏값을 돌려주는 명령어.
def 함수명(매개변수):
    <수행할 문장1>
    <수행할 문장2>
    ...
#예제
def add(a, b): 
    return a + b
    
a = 3
b = 4
c = add(a, b)
print(c)
7

➡️ 변수 a와 b에 각각 3과 4를 대입한 후 'add함수'에 입력값으로 넣어준다. 그리고나면 변수 c에 'add 함수'의 결과값을 대입하면 c의 값을 알수 있다.

- 매개변수(parameter)와 인수(arguments)

  • 매개변수는 함수에 입력으로 전달된 값을 받는 변수를 말한다.
  • 인수는 함수를 호출할때 전달하는 입력값을 말한다.
def add(a, b):  # a, b는 매개변수
    return a+b

print(add(3, 4))  # 3, 4는 인수

- 함수의 형태

  • 함수는 들어온 입력값을 받아 어떤 처리를 해 결괏값을 돌려주는데, 이때 함수의 형태는 입력값과 결괏값의 존재 유무에 따라 4가지 유형으로 나뉜다.

1. 입력값과 결괏값이 존재하는 함수(일반적인 함수)

def 함수이름(매개변수):
    <수행할 문장>
    ...
    return 결과값
      
#----예시----
def add(a,b):
    result = a+b
    return result

a = add(3,5)
print(a)

2. 입력값이 없는 함수

#----예시----
def say(): #매개변수가 없음
     return 'Hi' 
     
#위 함수를 쓰기위해서는 괄호안이 없어야 "hi"라는 문자열을 돌려줌.
a = say()
print(a)

#만약 입력값이 생기면 오류가 뜸.
a = say("oohohohoho")
print(a)

3. 결과값이 없는 함수

#----예시----
def add(a, b): 
    print("%d, %d의 합은 %d입니다." % (a, b, a+b))
    # 결과값이 없음. 

a= add(3,4)
print(a)

#결과
3, 4의 합은 7입니다.
None

➡️ 헷갈리지 않아야할 것은 print문은 <수행할문장>일 뿐 결괏값이 아니다. 결괏값은 오직 return으로만 돌려받을 수 있다. a값은 결괏값이 없으므로 거짓을 나터나태는 자료형 none을 돌려준다.

4. 입력값도 결괏값도 없는 함수

#----예시----
def say(): #매개변수 없음
    print("hello")
    #return값도 없음
    
#이 함수를 사용하는 방법 - 함수이름()
a =say()
print(a)

- *args

  • 입력값이 몇개인지 모를 때 사용한다.
  • args*를 붙이면 입력값을 전부 모아서 튜플로 만들어 준다.
  • args는 arguments의 약자이다.
def 함수이름(*매개변수): 
    <수행할 문장>
    ...
#예시1
def add_many(*args): # 모아서 튜플로 만들어줌
    res = 0
    for i in args:
        res = res+i
    return res

a = add_many(1,2,3)
print(a)
#6

➡️ 튜플로 만들고 더한 후 결과값을 돌려줌.

#예시2
def add_mul(choice,*args): #choice라는 매개변수 추가 
    if choice =="add":
        result = 0
        for i in args:
            result = result + i
    elif choice == "mul":
        result = 1
        for i in args:
            result = result * i
    return result 

result = add_mul("add",1,2,3,4,5)
print(result)

result = add_mul("mul",1,2,3,4,5)
print(result)

➡️ 매개변수 choice에 "add"가 입력되면 모든 값을 더하고, "mul"이 입력되면 곱해서 돌려준다.

- **kwargs

  • 매개변수 이름앞에 **를 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value형태의 결과값이 딕셔너리에 저장된다.
  • 키워드 파라미터, kwargs는 Keyword arguments의 약자이다.
def print_kwargs(**kwargs):
	print(kwargs)
    
 #결과 
 >>> print_kwargs(a=1)
{'a': 1} #딕셔너리 
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'} #딕셔너리

➡️ args와 kwargs에 대한 추가적인 설명

- return

  • 함수의 결과값은 언제나 하나이다.
def a(a,b):
	return a+b, a*b #return 두개 

res =a (3,4)
print(res)
#결과 
(7, 12) # 튜플값 하나로 돌려줌.

#위의 튜플 값을 2개의 결과값으로 받고 싶다면, 
res1, res2 = a(3,4)
print(res1,res2)
#결과 
7 12 # res1은 7, res2는 12
  • 만약 return문을 2번 사용하면, 두번째 return문은 실행을 하지 않는다. 즉, 함수는 return문을 만나는 순간 결과값을 돌려준 다음 함수를 빠져나온다.

- 매개변수 지정하여 호출하기

  • 매개변수를 지정하면 순서에 상관없이 사용할 수 있다.
#기본 코드
def add(a, b):
    return a+b
   
#매개변수 지정
result = add(a=3, b=7)  # a에 3, b에 7을 전달
print(result)
10

#지정하면 순서에 상관없이 사용 가능함
result = add(b=5, a=3)  # b에 5, a에 3을 전달
print(result)
8

- 매개변수에 초깃값 미리 설정하기

def say_myself(name, old, man=True): #man=True라는 초깃값 설정
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % old) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")
        
say_myself("홍길동",30) #입력값을 주지 않아도 man=True로 실행
say_myself("디카프리오",20,False) #man=False로 바뀜. 

➡️ 코드를 보면 man=True라고 매개변수 초깃값을 설정했다. 이렇게 매개변수에 들어갈 값이 항상 변하지 않을 경우에는 초깃갑을 미리 설정하는 것이 유용하다.

  • 주의해야할 점
def say_myself(name, man=True, old): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % old) 
    if man: 
        print("남자입니다.") 
    else: 
        print("여자입니다.")

say_myself("홍길동",30)
# 오류 발생 : non-default argument follows default argument

➡️ 위 오류는 초깃값을 설정해 놓은 매개변수 뒤에 초깃값을 설정해 놓지 않는 매개변수는 사용할 수 없다는 뜻이다. 따라서 매개변수로 (name,old,man=True)는 가능하지만,(name,man=True,old)는 안 된다.

- 함수 안 변수의 효력 범위

  • 함수 안의 변수는 함수안에서만 사용될 뿐 밖에서는 사용되지 않는다.
a = 1
def vartest(a):
    a = a +1

vartest(a)
print(a)

#결과 1

➡️ 변수 a가 1이므로 1을 더해 2가 나올것 같지만, 결과는 1이다. 이유는 함수 안에서 새로만든 매개변수는 함수안에서만 사용하므로 함수만의 변수이기 때문이다. 즉 함수안의 a와 함수밖의 a는 다른 변수를 말한다.

def vartest(a):
    a = a + 1

vartest(3)
print(a)

#결과는 오류 - name 'a' is not defined

➡️ 4가 나올 것 같지만, print(a)는 함수 밖의 a이고, 입력받아야하는 a 변수를 찾을 수 없으므로 오류가 뜬다.

- 함수 안에서 함수 밖의 변수를 변경하기

1. return 사용하기

a = 1 
def vartest(a): 
    a = a +1 
    return a # return을 추가함. 

a = vartest(a) # 함수 리턴값을 a에 대입 
print(a)

➡️ 코드에 return을 추가해 a를 돌려주고 그 리턴값을 a라고 대입하면, 함수를 사용해 함수 밖의 값을 변경할 수 있다.

2. global 명령어 사용하기

a = 1 
def vartest(): 
    global a #함수 안에서 함수 밖의 a변수를 사용하겠다는 의미
    a = a+1

vartest() 
print(a)

##그러나 이 방법은 좋은 방법이 아니라서 1번 방법 쓰기


📌 lambda(람다)

  • 함수를 생성할때 사용하는 예약어로 def와 동일한 역할을 한다.
  • 함수를 간결하게 만들 때 사용한다.
  • 람다로 만든함수는 return 명령어가 없어도 결괏값을 돌려준다.

lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식

>>> add = lambda a, b: a+b #람다 함수
>>> result = add(3, 4)
>>> print(result)
7

0개의 댓글

관련 채용 정보