Notice
Recent Posts
Recent Comments
Link
반응형
Archives
Today
Total
관리 메뉴

KEK 개발로그

[Python] 함수 3 - 매개변수 설정, 함수 안 변수, global, lambda 본문

Python/문법

[Python] 함수 3 - 매개변수 설정, 함수 안 변수, global, lambda

sunnykim915 2022. 9. 20. 10:01
반응형

함수 3 - 매개변수 설정, 함수 안 변수, global, lambda

 

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

 

- 매개변수 초깃값 설정: 매개변수에 미리 값을 넣어 줌.

 

  >> 왜?? 함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 함수의 초깃값을 미리 설정해주면 유용하다.

 

# 매개변수 초깃값 설정

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

say_myself("홍길동", 22) # 남자입니다.
say_myself("홍길동", 22, True) # 남자입니다.
say_myself("홍길동", 22, False) # 여자입니다.
say_myself("홍길동", 22, 1) # 남자입니다.
say_myself("홍길동", 22, 0) # 여자입니다.

 

 

>> man이라는 변수에 입력값을 주지 않아도 미리 초기값을 True로 설정해두었기 때문에 '남자입니다.'가 출력된다.
 
>> man이라는 변수에 True나 True가 될 값을 넣어주면 '남자입니다.'가 출력된다.(ex. True ,1,... 등)
 
>> man이라는 변수에 False나 False가 될 값을 넣어주면 '여자입니다.'가 출력된다.(ex. False, 0,.. 등)
 

- 주의) 초깃값을 설정한 매개변수의 위치
 
 >> 초기화시키고 싶은 매개변수는 항상 에 놓아야 한다!
 
 >> 초깃값을 설정해 놓은 매개변수 뒤에 초깃값을 설정해 놓지 않은 매개변수를 사용하면 에러(SyntaxError)가 뜬다.
# 매개변수 위치

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

# >> 오류(Error)

 

 

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

 

- 함수 안에서 선언된 (매개)변수는 그 함수만의 변수이다.
 
  >> 함수 밖에 있는 변수와 이름이 같을지라도 따로 어떤 조치(return, global)를 취하지 않는 이상 그 함수만의 변수이므로 서로 다른 것이다.
 
  >> (이건 프로그래밍 하면서 더 자세히 알아가야 될 것 같다.. 일단 이렇게 알고 있기!)
 
# vartest 1

a = 1
def vartest(a):
    a = a +1
    return a

vartest(a) # 아무값도x(none도 x) >> 함수 안에 print(a)를 써야 2 나옴(return쓰면 error, return 쓰면 함수를 이렇게 호출하면 안됨)
print(a) # 1 >> 2 아님.(같은 a여도 함수 안 != 함수 밖)
 
 
 
# vartest 2

a = 1
def vartest(a):
    a = a +1
    return a

b = vartest(a) 
print(b) # 2
print(a) # 1​

 

# vartest 3

def vartest(a):
    a = a + 1

vartest(3) # vartest 함수 안에서 a는 4가 됨(출력되는건 없음)
print(a) # error뜸. a 변수를 어디서도 찾을 수 없기 때문이다!(함수 안에서 선언한 매개변수는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다)

 

 

- 함수 안에서 함수 밖의 변수에 영향을 주는 방법

 

  >> 2가지 방법: return 사용 / global 사용

 

 

1) return 사용하기

 

# vartest_return

a = 1
def vartest(a):
    a = a +1
    return a

a = vartest(a) # a가 vartest 함수의 결괏값으로 바뀐다
print(a) # 2

 

>> return을 사용하면 vartest 함수를 사용해서 함수 밖의 변수 a를 1만큼 증가시킬 수 있다.
 
 
 
2) global 사용하기
 
# vartest_global

a = 1 
def vartest(): 
    global a 
    a = a+1

vartest() 
print(a) # 2

 

>> global 명령어: 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻
 
>> 프로그래밍할 때 global 사용 비추천!!
 
>> global을 사용하면 함수가 외부 변수에 종속정인 함수가 되는데 함수는 독립적으로 존재하는 것이 좋다!
 
>> 그렇기 때문에 global 사용은 가급적 X. 첫번째(return) 방법을 사용하자.
 
 
 

3. lambda

 

- 함수를 한줄로 간결하게 만들 때 사용하는 예약어.
 
  >> def와 동일한 역할(함수 생성)
 
  >> def를 사용해야 할 정도로 복잡하지 않거나 or def를 사용할 수 없는 곳에 주로 쓰인다.
 
  >> 형태: lambda 매개변수1, 매개변수2, ...:
 
  >> lambda 예약어로 만든 함수는 return 명령어가 없어도 결과값을 돌려준다.
# lambda

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

 

# def - 위에 lambda 함수와 완전히 동일하다.

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

result = add(3, 4)
print(result) # 7
반응형