[제로베이스] [파이썬] 함수

한결·2023년 12월 11일
0
post-thumbnail

1. 함수?

함수
input을 넣었을 때 output이 어떻게 나올지 정하는 식

내장 함수
print(), input(), format() 등과 같이 기본적으로 제공되는 함수

사용자 함수
사용자가 직접 세우는 함수

def addCal(x, y): # x와 y를 입력하면 두 합을 구하는 함수를 선언
    return(x + y) # for문 처럼 들여쓰기!!

print(addCal(2,3)) # 함수 호출
5

✅ 또 다른 함수 호출

def addCal(x, y):
    return(x + y)

def pythagoras(x, y) :
    return(((addCal(x**2,y**2)**(1/2)))) #함수 안에 함수 호출

print(pythagoras(3,4))
5.0

pass : 실행문 없이 진행 시킬 때 사용

def pythagoras(x, y) :
    pass # 실행문 없음

2. 인수와 매개변수

❗인수의 개수와 매개변수의 개수는 같아야 한다.

def 함수명(매개변수1, 매개변수2, 매개변수3) : 

	f(매개변수1, 매개변수2, 매개변수3) #매개변수1, 매개변수2, 매개변수3에 관련된 식


함수명(인수1, 인수2, 인수3)

3. 함수 실행 결과 반환

def addCal(x, y):
    return (x + y) # x와 y의 합의 결과값을 반환

returnVal = addCal(2,3)

print(returnVal)
5

❗함수가 return을 만나면 함수 실행을 종료하고 결과를 반환한다.

def divideNumber(n) : 

	if n % 2 == 0 :
    	return '짝수' # 함수 실행 종료 및 결과 반환
    else :
    	return '홀수' # 함수 실행 종료 및 결과 반환

4. 전역 변수, 지역 변수

전역 변수
함수 밖에 선언된 변수로 어디에서나 사용은 가능하지만 함수 안에서 수정할 수는 없다.

num_out = 10 #전역 변수
def printNumbers():
	num_out = 20
    print(f'num_out: {num_out}')
   
printNumbers()
print(f'num_out: {num_out}')
num_out: 20
num_out: 10

지역 변수
함수 안에 선언된 변수로 함수 안에서만 사용 가능

def printNumbers():
	num_out = 20 # 지역 변수
    print(f'num_out: {num_out}')

print(f'num_out: {num_out}')

NameError: name 'num_out' is not defined


global
global을 사용하면 함수 안에서도 전역변수의 값 수정 가능!

num_out = 10

def printNumbers():
	global num_out
    print(f'num_out: {num_out}')

printNumbers()
print(f'num_out: {num_out}')
num_out: 10
num_out: 10

5. 중첩함수

중첩 함수
함수 안에 함수가 있는 형태

def out_function():
	print('out_function called!!')
    
    def in_function():
    	print('in_function called!!')
        
    in_function()

out_function()
in_function called!!
out_function called!!

6. lambda 함수

lambda를 이용해 함수를 쉽게 설정할 수 있다!

pythagoras = lambda a, b : ((a**2) + (b**2))**(1/2) #람다 함수 선언

print(pythagoras(3,4))

7. keyword arguments

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
def plotSineWave(**kwars):

    endTime = kwars.get('endTime', 1)
    sampletime = kwars.get("sampleTime", 0.01)
    amp = kwars.get("amp", 1)
    freq = kwars.get("freq", 1)
    startTime = kwars.get("startTime", 0)
    bias = kwars.get("bias", 0)
    figSize = kwars.get("figsize", (12,6))

    time = np.arange(startTime, endTime, sampletime)
    result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias

    plt.figure(figsize = figSize)
    plt.plot(time, result)
    plt.grid(True)
    plt.xlabel("time")
    plt.ylabel("sin")
    plt.title(str(amp) + "*sin(2*pi)" + str(freq) + "*t" + str(startTime) + ")+" + str(bias))
    plt.show()

이렇게 **kwars를 사용하면 값을 디폴트 설정하거나, 함수에서 본인이 원하는 키워드를 설정할 수 있다.


# 디폴트 값 사용
plotSineWave()


plotSineWave(amp=2, freq=0.5, endTime=10)

profile
낭만젊음사랑

0개의 댓글