본문 바로가기

파이썬 기초

04-1 함수 (프로그램의 입력과 출력은 어떻게 해야 할까?)

함수를 잘 사용하고 함수를 적절하게 만들 줄 아는 사람이 능력 있는 프로그래머이다.

def add(a,b):
    return a + b
    

여기에서 return은 함수의 결괏값을 돌려주는 명령어이다.

이제 직접 add 함수를 사용해 보자.

 

    
    a=3
    b=4
    c=add(a,b)
    print(c)
    
    7

 

- 매개변수와 인수

def add(a,b):          a,b는 매개변수
    return a+b
    
    print(add(3,4))    3,4는 인수

-입력값과 결괏값에 따른 함수의 형태

 

def add(a,b):
    result = a + b
    return result
    
    

ex)

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

7

 

- 입력값이 없는 함수

 

def say():
    return 'Hi'

say 라는 이름의 함수를 만들었다. 그런데 매개변수 부분을 나타내는 함수 이름 뒤에 괄호 안이 비어 있다. 이 함수는 어떻게 사용하는걸까?

a=say()
print(a)

Hi

"결괏값을 받을 변수 = 함수이름()"

 

- 결괏값이 없는 함수

 

def add(a,b):
    print("%d,%d의 합은 %d입니다." % (a,b,a+b))
    
    
    add(3,4)
    
3,4의 합은 7입니다.

즉 결괏값이 없는 함수는 다음과 같이 사용한다.

"함수이름(입력인수1, 입력인수2, ... )

 

결괏값이 진짜 없는지 확인하기 위해 다음 예를 직접 입력해 보자.

a = add(3,4)
3,4의 합은 7입니다.

결괏값은 오직 return 명령어로만 돌려받을 수 있다.

 

이를 확인해보자.

ex)

a = add(3,4)
3,4의 합은 7입니다.
print(a)
None

a값은 None이다.  이것을 가지고 결괏값이 있다고 생각하면 곤란하다.

 

- 입력값도 결괏값도 없는 함수

 

def say():
    print('Hi')
    say()
    
    Hi

즉 입력값도 결괏값도 없는 함수는 다음과 같이 사용한다.

"함수이름()"

 

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

ex)

def add(a,b):
    return a+b
    
    result = add(a=3,b=7)
print(result)

10

매개변수를 지정하면 다음과 같이 순서에 상관없이 사용할 수 있다는 장점이 있다.

 

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

8

 

- 입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?

 

-여러 개의 입력값을 받는 함수 만들기

 

def add_many(*args):
    result = 0
    for i in args:
        result = result + i
    return result
    
    result = add_many(1,2,3)
print(result)

6

result = add_many(1,2,3,4,5,6,7,8,9,10)
print(result)


55

ex)

def add_mul(choice, *args):
    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)

15

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

120

 

- 함수의 결괏값은 언제나 하나이다.

 

def add_and_mul(a,b):
    return a+b,a*b
    
    result = add_and_mul(3,4)
    
    result=(7,12)
    
    result1,result2 = add_and_mul(3,4)
    
    def add_and_mul(a,b):
    return a+b
    return a*b
    
    result = add_and_mul(2,3)
    print(result)
    
    5
    def add_and_mul(a,b):
    return a+b

즉 함수는 return문을 만나는 순간 결괏값을 돌려준 다음 다음 할수를 빠져나가게 된다.

 

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

ex)

 

def say_myself(name, old, man=True):
    print("나의 이름은 %s입니다." % name)
    print("나이는%d살입니다." % old)
    if man:
        print("남자입니다.")
    else:
        print("여자입니다.")
        
        say_myself("박응용",27)
say_myself("박응용",27,Ture)

나의 이름은 박응용입니다.
나이는27살입니다.
남자입니다

say_myself("박응선",27,False)

나의 이름은 박응선입니다.
나이는27살입니다.
여자입니다.
        

 

- 함수 안에서 선언한 변수의 효력 범위

 

# vartest.py
a = 1
def vartest(a):
    a = a + 1
    
vartest(a)
print(a)
  
  1

- 함수 안에서 함수 밖의 변수를 변경하는 방법

1.return 사용하기

# vartest_return.py
a=1
def vartest(a):
    a = a+1
    return a

a= vartest(a)
print(a)

2

2.global 명령어 사용하기

 

# vartest_golbal.py
a = 1
def vartest():
    global a
    a= a + 1

    vartest()
    print()

함수는 독립적으로 존재 하는 것이 좋기 때문이다. 외부 변수에 종속적인 함수는 그다지 좋은 함수가 아니다

그러모르 가급적 첫번째 방법인 return 방법을 쓰는 것이 좋다.

 

- lambda

 

lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다. 우리말로 '람다'라고 읽고 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다.

 

ex)

add=lambda a, b: a+b
result = add(3,4)
print(result)

7

def add(a,b):
    return a+b

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

7

lambda 예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려준다.

 

출처: "점프 투 파이썬"

'파이썬 기초' 카테고리의 다른 글

04-3 파일 읽고 쓰기  (0) 2021.03.16
04-2 사용자 입력과 출력  (0) 2021.03.16
03-3 for문  (0) 2021.03.14
03-2 while문  (0) 2021.03.14
03 -1 if문  (0) 2021.03.14