(나도코딩의 파이썬 입문) 7장. 함수(p.202 ~ p.220)

2023. 3. 3. 09:53독서

반응형

안녕하세요!

<코딩 자율학습 나도코딩의 파이썬 입문> 멘토를 담당하게 된 이안입니다.

 

오늘은 7장 '함수'를 이어서 학습할게요!

 

오늘 공부할 내용은 다음과 같습니다.

 

🧐 공부할 내용(p.202 ~ p.220)

  • 함수 호출하기
  • 변수의 범위

 

1. 함수 호출하기


함수 호출하기에서 배워가실 것은 함수의 '기본값'과 '가변인자'입니다.

 

p.203의 예제를 같이 공부해 보죠.

 

def profile(name, age=20, main_lang="파이썬"):
    print("이름 : {0}\t나이: {1}\t주 사용 언어 : {2}".format(name, age, main_lang)

print("찰리")
print("루시")

 

파이썬은 이렇게 함수 정의 부에서 기본 값을 정의할 수 있어요.

이때 age의 기본값은 20, main_lang의 기본값은 파이썬이 들어가게 되는 것이죠.

 

물론 age의 타입이 선언되어 있지 않기 때문에 age에 다른 문자를 밀어 넣는 것도 가능합니다.

 

예를 들면

 

 

def profile(name, age="나이", main_lang="파이썬"):
    print("이름 : {0}\t나이: {1}\t주 사용 언어 : {2}".format(name, age, main_lang)

print("찰리")
print("루시")

 

이런 식으로 말이죠.

그래서 이전 멘토팁에서 말씀드린 "타입"을 꼭 사용하시라고 말씀드리고 싶어요.

 

 

 

p.204에 나오는 "전달값 작성 순서"는 정말 중요해요.

파이썬에서 함수를 정의할 때는 일반 전달값과 기본값을 같이 사용할 때, 반드시 일반 전달값을 먼저 적어야 해요.

꼭 주의해서 사용해 주세요!

 

 

 

키워드 인자 사용하기

함수에서 키워드 인자 역시 재미있는 기능이에요. 함수에서 정의한 순서대로 매개변수를 넘기지 않아도 되거든요.

 

하지만 키워드 인자를 사용하시되, 함수의 정의에 있는 순서대로 매개변수를 사용하시는 것을 추천해요.

 

지금은 모두 한 파이썬 파일에서 코드를 작성하지만, 나중에는 여러 파이썬 파일에서 코드를 작성하게 됩니다.

이때 함수를 호출하는 일이 빈번할 것이고요.

 

def profile(name, age, main_lang):
    print("이름 : {0}\t나이 : {1}\t주 사용 언어 : {2}".format(name, age, main_lang))


profile(name="유재석", main_lang="파이썬", age=20)
profile(age=30, name="김태호", main_lang="자바")

 

만약 각기 다른 .py 파일에서 이렇게 profile을 호출한다고 하면 어떨까요?

분명히 어떤 인자가 어떤 순서로 들어가 있는지 헷갈리실 거예요.

 

그러니 가독성과 통일성을 위해서 하나의 순서로 통일하는 것을 추천드려요.

 

 

가변 인자 사용하기

가변 인자는 정말 좋은 기능이에요.

책의 예시를 통해서 쉽게 이해가 가능하죠.

 

p.206처럼 넘겨야 하는 매개변수(파라미터)가 많아질 때 유용하게 사용하실 수 있어요.

 

여기에서 중요한 것은 가변 인자로 넘어오는 값들이 tuple이라는 거예요.

 

def profile(name, age, *main_lang):
    print("이름 : {0}\t나이 : {1}\t".format(name, age))
    print(main_lang, type(main_lang))


profile("유재석", 20, "파이썬", "자바", "C", "C++", "C#", "자바스크립트")

 

 

🥕멘토 TIP

p.209에서는 language의 내용을 for문으로 순회하면서 출력하고 있어요.

 

for문으로 출력하는 것이 정석적인(?) 방법이지만 다른 방법을 말씀드리고 싶어요.

 

def profile(name, age, *main_lang):
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
    print(*main_lang)


profile("유재석", 20,"python","java")

 

이 코드를  사용해 보시겠어요?

 

3번째 줄에 있는 *(애스터리스크)는 여러 가지 의미로 사용되지만 여기서는 컬렉션 타입의 데이터를 unpacking 하는 데 사용 됐어요.

이렇게 *(collection type 변수)를 사용하면 

for lang in main_lang:
    print(lang, end =" ")

 

이 코드와 완전히 같은 역할을 하게 됩니다.

 

 

2. 변수의 범위: 지역변수와 전역변수


함수를 사용하면 변수가 여러 개 생기게 됩니다.

 

먼저 함수 정의부에 사용되는 매개 변수가 있죠.

 

# 매개변수: name, age, main_lang
def profile(name, age, *main_lang):
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
    print(*main_lang)

 

그리고 함수 내부에서만 사용되는 지역 변수가 있어요.

 

def rent():
    glasses = 20 # 지역변수
    print(f"남은 안경 개수: {glasses}")

 

지역 변수는 함수 안(지역)에서만 사용할 수 있는 변수입니다.

그러니까 rent 함수를 벗어나면 사용이 불가능하죠.

 

이런 경우처럼요.

 

def rent(people):
    glasses = 20
    print(f"남은 안경 개수: {glasses}")
    

print(glasses) # 오류

 

그리고 이번 시간에 새로 배우는 전역 변수가 있습니다.

 

전역 변수는 함수 밖에 선언된 변수로, 모든 곳에서 사용될 수 있는 변수입니다.

다만 전역 변수는 함수 내부에서 사용하려면 특별한 선언이 필요한데요,

 

glasses = 10

def rent(people):
    global glasses # 나 전역 변수
    glasses = glasses - people
    print(f"남은 안경 개수: {glasses}")

print(rent(10))

 

이렇게 global 키워드를 앞에 붙여 전역 변수 사용을 명시해야 합니다.

 

하지만 책에서도 명시했듯, 전역 변수의 과도한 사용은 코드 관리를 힘들게 합니다.

 

그래서 이것을 좀 더 사용하기 좋게 만들면, 이런 식으로 변형이 가능하죠.

 

 

glasses = 10

def reamin_glasses(glasses, people):
    remain_glasses = glasses - people
    return remain_glasses

reamin = reamin_glasses(glasses, 2)
print(f"남은 안경 개수: {reamin}")

 

이렇게 변수를 매개 변수로 사용해서 조작하는 것이 재사용성과 코드를 유지 보수하는데 훨씬 좋으니 참고해 주세요!


이번 시간에는 함수의 호출과 변수에 대해서 알아봤어요.

특히 그중에서도 지역 변수, 전역 변수, 매개 변수의 개념은 중요하니 꼭 기억해 주세요!

 

✅ 정리

* 함수 호출하기

    * 고정 인자

    * 키워드 인자

    * 가변 인자

* 변수의 범위

    * 지역 변수

    * 전역 변수

반응형