오랜만에 Python과 매우 친해지기 글을 포스팅한다. 사실 지난 Decorator로 어지간한 Python사용법은 거의 포스팅했다고 생각했는데, 몇 가지 빼먹은 게 있더라, 차츰차츰 올리는 걸로 하고, 이번에는 다시 올리는 Python과 매우 친해지기 파라미터 편이다.
파라미터의 사용
파라미터는 어디에 사용될까? 아래의 예시를 보자
##코드
class my_class :
def __init__(self, name) :
self.my_name = name
def print_name(self) :
print(self.my_name)
if __name__=="__main__" :
chulsu = my_class("철수") ## my_class에 파라미터로 "철수" str 전달
chulsu.print_name()
## 출력결과
철수
위와같이 클래스(def__init__에) 나 함수 블록에 전달하는 "인자"를 우리는 파라미터라고 부른다.
이런 파라미터들은 함수나 클래스에 정의된 대로 넘겨줄 수 있다. 다음의 예시를 보자
## 코드
def salute(name,job) :
print("my name is "+name+" and my job is "+job)
if __name__=="__main__":
salute("chulsu","java programmer")
## 출력결과
my name is chulsu and my job is java programmer
파라미터에 여러가지값을 넘길 수 있는 방안이 있을까?? 가령 학생이 10명 있는 반의 학생관리 프로그램에서 학생정보를 출력하는 함수를 정의한다고 생각하자. 기본값으로 ""를 주어 여러 학생을 받는다는 형식으로 본다면 다음과 같이 길고 더럽고 추잡한 코드가 나올 것이다.
## 코드
def print_student(stu1="", stu2="", stu3="", stu4="", stu5="", stu6="",
stu7="",stu8="",stu9="",stu10="") :
print("stu1 : "+stu1)
print("stu2 : "+stu2)
print("stu3 : "+stu3)
print("stu4 : "+stu4)
print("stu5 : "+stu5)
print("stu6 : "+stu6)
print("stu7 : "+stu7)
print("stu8 : "+stu8)
print("stu9 : "+stu9)
print("stu10 : "+stu10)
if __name__=="__main__":
print_student("chulsu","yonghee","minsu","jinsu","binsu","osu",stu9="pengsu")
## 출력결과
stu1 : chulsu
stu2 : yonghee
stu3 : minsu
stu4 : jinsu
stu5 : binsu
stu6 : osu
stu7 :
stu8 :
stu9 : pengsu
stu10 :
이렇게 된다. 10명이라면 다행이지만, 100명 200명이면 어떻할까?(리스트로 받으면 된다고? 엄만 갈 거야 리스트는 여기 있어 그럼) 이와 같은 문제를 멋지게 해결할 수 있는 방법이 가변 파라미터이다.
args, kwargs
args의 약어는 arguments, kwargs의 약어는 Keyword Arguments이다. 각각 튜플과 딕셔너리형태로 다수의 파라미터를 제한 없이 받아들일 수 있는 특징이 있다. 마치 java의...이나 Kotlin의 vararg 같은 특성을 가진다. args의 앞에는 *, kwargs앞에는 **로 이 파라미터들이 가변이라는 것을 표현하는데, 다음의 예시를 보자
### args의 예시, 코드
def print_student(*stu) :
print(type(stu)) ## 가변인자 stu의 자료구조는 tuple
index = 0
for s in stu :
print("stu"+str(index)+" : "+s)
index += 1
if __name__=="__main__":
print_student("chulsu","yonghee","minsu","jinsu","binsu","osu")
### args의 예시, 출력결과
<class 'tuple'>
stu0 : chulsu
stu1 : yonghee
stu2 : minsu
stu3 : jinsu
stu4 : binsu
stu5 : osu
출력 결과
다음은 kwargs의 예시이다.
### kargs의 예시, 코드
def print_student(**stu) :
print(type(stu)) ## 가변인자 stu의 자료구조는 dictionary
for k,v in stu.items() :
print(k + " : " + v)
if __name__=="__main__":
print_student(stu1 = "chulsu",stu2 = "yonghee",stu3 = "minsu")
## kargs의 예시, 출력결과
<class 'dict'>
stu1 : chulsu
stu2 : yonghee
stu3 : minsu
흔히 사용하는 우리의 python내장함수 print도 가변인자로 구성되어 있다. print는 다음과 같이 정의되어있다.
★ print(*objects, sep=' ', end='\n, file=sys.stdout, flush=False)
맨앞 *objests가 가변인자 *args로 지정되어 있는 것을 알 수 있다.
'Python > 파이선과 친해지기' 카테고리의 다른 글
[Python] - Python과 예쁘게 친해지기-PyQt (4) | 2021.08.27 |
---|---|
[Python] - Python과 매우 친해지기-type annotation (4) | 2021.07.24 |
[Python] - Python과 매우 친해지기-데코레이터(Decorator) (2) | 2021.04.10 |
[Python] - Python과 매우 친해지기-람다(Lambda) (0) | 2021.04.10 |
[Python] - Python과 매우 친해지기-내포(Comprehension) (0) | 2021.04.10 |