- 참고자료 : [나름 중급 파이썬1] *args와 **kwargs
이건 이미 알고 있는 내용이라 간단히 짚고 가자면,
함수 인자가 몇개 들어 올지 모를 때 "def 함수명 (*인자명)" 으로 지정해 사용한다.
다만, 내가 이 파트에서 주요하게 정리하고 싶은 부분은 바로 아래이다.
아래 코드의 단점은 plotSineWave()함수에 인자를 넣을 때, 숫자 순서들이 충분히 헷갈릴 수 있다는 점이다. 코드가 길 때는 def 지정된 인자들을 확인하기 어려울 수도 있음!!
이럴 때 사용하는게 "**kwargs" 이다.
def plotSinWave(amp,freq,endTime,sampleTime,startTime,bias):
"""
plot sin wave
y= a sin(2 pi f t + t_o) + b
"""
time = np.arange(startTime,endTime,sampleTime)
result = amp+np.sin(2 *np.pi * freq *time + startTime)+bias
plt.figure(figsize=(12,6))
plt.plot(time,result)
plt.grid(True)
plt.xlabel("time")
plt.ylabel("sin")
plt.title(str(amp)+ "sine(2*pi" + str (freq) + "*t" + str(startTime) +")+" + str(bias))
plt.show()
plotSinWave(2,1,10,0.01,0.5,0)
#**karges 사용시 각 번호 살피기
#1.
def plotSinWave(**kwargs):
"""
plot sin wave
y= a sin(2 pi f t + t_o) + b
"""
#2. (기본값을 아래같이 설정했으나, 코드에 인자 입력하면 그에 맞춰서 인식함)
amp = kwargs.get("amp",1)
freq =kwargs.get("freq",1)
endTime = kwargs.get("endTime",1)
sampleTime = kwargs.get("sampleTime",0.01)
startTime = kwargs.get("startTime",0)
bias = kwargs.get("bias",0)
figsize =kwargs.get("figsize",(12,6))
time = np.arange(startTime,endTime,sampleTime)
result = amp+np.sin(2 *np.pi * freq *time + startTime)+bias
plt.figure(figsize=(12,6))
plt.plot(time,result)
plt.grid(True)
plt.xlabel("time")
plt.ylabel("sin")
plt.title(str(amp)+ "sine(2*pi" + str (freq) + "*t" + str(startTime) +")+" + str(bias))
plt.show()
# 3.
plotSinWave()
바로 위 코드와 다른 점은 크게 3가지로 각 번호 표기한 부분을 보면된다.
2번 부분에 임의로 값을 지정해줬기에 3번 부분엔 특별히 인자를 기입할 필요가 없다.
그렇다면 다른 값을 넣어보자.
plotSinWave(amp=2, freq =0.5, endTime=10)
"**kwargs"를 사용했기 때문에 3번 부분에 모든 인자를 다시 입력할 필요없이 필요한 특정 인자에만 값을 수정해주었다.