티스토리 뷰
이번에는 가변 인자에 대해서 공부해보겠습니다.
가변 인자란 말 그대로 변할 수 있는 인자를 의미하는데요. 유재석씨와 김태호씨가 고등학교를 졸업하고 대학교를 가서 보다 많은 프로그래밍 언어를 공부했다고 가정하겠습니다. 다음 표와 같이 유재석씨는 프로그래밍 언어를 무려 5개나 공부했고, 김태호씨는 2개를 공부했습니다.
언어 | 유재석 | 김태호 |
1 | Python | Kotlin |
2 | Java | Swift |
3 | C | |
4 | C++ | |
5 | C# |
profile() 함수를 바꿔야할텐데 우선은 최대 5개 프로그래밍 언어를 할 수 있다는 가정 하에 전달값은 lang1 ~ lang5 라고 정의하겠습니다. 그리고 print() 문은 2개로 나눠서 처음에는 이름, 나이만 출력하고 다음에는 lang1 ~ lang5 까지 출력하겠습니다.
이 때, 2개의 출력내용을 한 줄에 연달아서 출력하기 위해 첫 번째 print() 의 끝에 end=" " 를 적어주겠습니다. print() 를 실행하면 기본적으로 문장 출력 후에 줄바꿈을 하기 때문에 이후에 나오는 문장들은 새로운 줄에 표시되는데, end 값을 변경하면 변경된 값을 문장의 마지막으로 사용하게 됩니다. 그래서 줄바꿈이 아닌 띄어쓰기로, 즉 " " 로 문장을 끝내고 이후에 있는 print() 의 내용도 같은 줄에 이어서 출력할 수 있게 됩니다.
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ") # 문장 출력 후 줄바꿈 대신 띄어쓰기
print(lang1, lang2, lang3, lang4, lang5)
이제 함수를 해봅시다.
유재석씨는 5개의 언어에 대해 각각 명시를 해주면 되는데, 김태호씨는 2개 언어에 대해서는 적었지만 나머지 부분은 빈 값으로 채웠습니다.
profile("유재석", 20, "Python", "Java", "C", "C++", "C#")
profile("김태호", 25, "Kotlin", "Swift", "", "", "")
그런데 만약에 profile() 함수를 호출해야 하는 사람들이 훨씬 더 많아지면 어떨까요? 각 사람들마다 다룰 줄 아는 프로그래밍 언어 갯수가 달라질 것이므로 5개 미만인 사람들은 늘 빈 값들을 채우는 번거로운 작업을 해야할 것입니다.
하지만 더 큰 문제는 따로 있는데요. 유재석씨가 너무 재밌다고 프로그래밍 언어를 또 하나 공부하게 되면 어떨까요? 이미 5개 언어를 가득 채웠는데 또 하나를 추가하게 되면, 이제는 함수 자체를 변경해야 하는 것이죠.
이 때 사용할 수 있는 것이 바로 가변 인자입니다.
def 함수이름(전달값1, 전달값2, ..., *가변인자): 실행 명령문1 실행 명령문2 .... return 반환값 |
가변 인자는 앞에 * 표시를 하나 추가해주면 됩니다.
함수를 다시 적어볼까요?
def profile(name, age, *language): # 언어 정보를 전달하고 싶은 갯수 만큼 전달 가능
print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
# print(type(language)) # tuple
for lang in language:
print(lang, end=" ") # 언어들을 모두 한 줄에 표시
print() # 줄바꿈 목적
이번에는 language 를 가변인자로 정의하였으므로 함수를 호출하는 곳에서는 전달하고 싶은 갯수 만큼 전달을 하면 됩니다. 가변 인자의 type 정보를 확인해보면 튜플임을 알 수 있는데요. 그렇기 때문에 for 반복문을 사용하면 가변 인자로 전달받은 값들을 하나씩 반복하면서 사용할 수 있답니다. 각 언어들을 한 줄에 표시하기 위해 이번에도 end=" " 를 추가하였으며 모든 언어 정보를 출력하고 나면 줄바꿈을 해주기 위해 비어 있는 print() 를 적어줍니다.
이제는 가변 인자 덕분에 유재석씨는 JavaScript 를 포함한 총 6개의 프로그래밍 언어 정보를 전달할 수 있게 되었고, 김태호씨는 2개의 언어만 전달하면서도 뒤에 불필요한 빈 값을 적지 않아도 되겠네요.
profile("유재석", 20, "Python", "Java", "C", "C++", "C#", "JavaScript") # JavaScript 추가
profile("김태호", 25, "Kotlin", "Swift")
실행 결과는 이렇습니다.
이름 : 유재석 나이 : 20 Python Java C C++ C# JavaScript 이름 : 김태호 나이 : 25 Kotlin Swift |
이처럼 서로 다른 갯수의 값들을 전달해야 하는 경우에 가변 인자를 활용할 수 있습니다.
'파이썬 강의 > 기본편' 카테고리의 다른 글
[파이썬 기본편] 7-7.퀴즈 #6 (10) | 2021.02.27 |
---|---|
[파이썬 기본편] 7-6.지역변수와 전역변수 (0) | 2021.02.26 |
[파이썬 기본편] 7-4.키워드 인자 (1) | 2021.02.24 |
[파이썬 기본편] 7-3.기본값 (3) | 2021.02.23 |
[파이썬 기본편] 7-2.전달값과 반환값 (7) | 2021.02.22 |
- Total
- Today
- Yesterday
- 아나콘다
- 챗GPT
- GUI
- game
- coloso
- vscode
- 행맨
- c언어
- 파이게임
- Unity
- 환경설정
- Colab
- ChatGPT
- 코랩
- repl.it
- 나도코딩
- onlineclass
- Visual Studio Code
- 비주얼 스튜디오 코드
- pycharm
- 주피터노트북
- pygame
- Coding
- Mac
- Tkinter
- Xcode
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |