Python

Python - 5. 함수

꿀먹는매미 2021. 3. 8. 09:56

함수 - 파이썬 3.6 프로그래밍 p.44~70

 

  • 함수 선언은 def로 시작해 콜론( : )으로 끝내고, 들여쓰기로 시작과 끝을 구분한다.
  • 함수의 정의와 호출
# func01.py
print( '시작' )
# 함수의 정의
def func1():
    pass        # 함수 내용안쓰면 오류 (pass로 빈함수 생성 가능)
def func2():
    print( 'func2 호출' )
def func3(a):
    print( 'func3 호출', a )

# 함수 호출
func2()
func3( 10 )

print( '끝' )

 

  • 변수의 적용 범위(전역변수와 지역변수)
# func02.py
print( '시작' )
a = 1           # 전역변수 a
def func(a):
    a = a + 1   # 지역변수 a
    print( 'a1 :', a )

func(a)         # 지역변수 a
print( 'a2 :', a )  # 전역변수 a

print( '끝' )

 

  • 지역변수 값 내보내기( return )
# func03.py
print( '시작' )
a = 1           # 전역변수 a
def func(a):
    a = a + 1   # 지역변수 a
    print( 'a1 :', a )
    return a    # 지역변수 a를 return으로 밖으로 내보냄

a = func(a)         # 전역변수 a = 지역변수 a
print( 'a2 :', a )  # 전역변수 a

print( '끝' )

 

 

  • 전역변수 그대로 사용하기( global )
# func04.py
print( '시작' )
a = 1
def func():
    global a    # 전역변수 a 를 그대로 사용
    a = a + 1
    print( 'a1 :', a )

func()         
print( 'a2 :', a )

print( '끝' )

 

 

 

  • 함수 인자값 지정해서 넣기 / 인자의 기본값 지정하기
# func05.py
print( '시작' )

def func1(a, b):
    print( 'a :', a )
    print( 'b :', b )

# 기본값 지정 (c=True)
def func2(a, b, c=True):
    print( 'a :', a )
    print( 'b :', b )
    print( 'c :', c )

#func1(100, 200)
# 값을 지정해서 넣는 것도 가능
func1( a=100, b=200 )
func1( b=200, a=100 )

# 입력하면 그 값이 나오고 입력하지 않으면 기본값 나옴
func2( 10, 20 )
func2( 10, 20, False )

print( '끝' )

 

 

  • 가변인자 사용하기( * )
# func06.py
print( '시작' )

# 가변인자(*)
def func( *args ):
    print( 'args :', args )
    print( 'length :', len( args ) )

def func2( *args ):
    for arg in args:
        print( arg, end=' ' )

func( 1, 4, 5, 9, 10 )
func2(10,20)

print( '끝' )

 

 

  • return 값도 가변인자처럼 받을 수 있음
# func07.py
print( '시작' )

def func1():
    return 10

# 가변인자
def func2():
    #return 10, 20
    return ( 10, 20 )

a = func1()
print( 'a :', a )

#b, c = func2()
( b, c ) = func2()
print( 'b :', b )
print( 'c :', c )

print( '끝' )

 

 

  • 함수명을 변수처럼 사용가능 - 참조주소, 자료형 확인
  • 참조 주소 활용하기
# func08.py
def func1():
    print( 'func1 호출' )

# 참조 주소 호출
print( func1 )
# 자료형 확인
print( type( func1 ) )

# func1과 func2는 같은 참조주소
func2 = func1
print( func2 )
func2()

# 주소값 10진수로 변경
print( id( func2 ) )

 

 

  • 서브함수 - 함수내의 함수 표현
# func09.py
def subfunc():
    print( 'subfunc 호출' )
    
def mainfunc( sub ):
    sub()
    
def mainfunc2( sub ):
    return sub
    
mainfunc( subfunc )

result = mainfunc2( subfunc )
result()

 

 

  • lambda식 함수 표현
# func10.py
def func11( a ):
    return a
print( 'result11 :', func11(1) )

# 함수를 lambda식으로 표현
func12 = lambda a : a
print( 'result12 :', func12(1) )

def func21( a, b ):
    return a + b
print( 'result21 :', func21(1, 2) )

# 함수를 lambda식으로 표현
func22 = lambda a,b : a + b
print( 'result22 :', func22(1, 2) )

 

 

 

 

  • all( ) - 모두 참이면 True / 하나라도 거짓이면 False
  • any( ) - 하나라도 참이면 True / 모두 거짓이면 False
  • enumerate( ) - 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려주는 함수
  • eval( ) - 실행 가능한 문자열을 입력으로 받아 문자열을 실행한 결과값을 돌려주는 함수
# func11.py
# all() - 모두 참이면 True / 하나라도 거짓이면 False
print( all( [] ) )      # 빈값은 True
print( all( [0] ) )
print( all( [''] ) )
print( all( [1, 2] ) ) 

# any() - 하나라도 참이면 True / 모두 거짓이면 False
print( any( [] ) )      # 빈값은 False
print( any( [0, 0] ) )
print( any( [1, 0] ) )

# enumerate() - 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려준다
for name in ['body', 'foo', 'bar' ]:
    print( name )

for i, name in enumerate( ['body', 'foo', 'bar' ] ):
    print( i, name )
    
# eval() - 실행 가능한 문자열을 입력으로 받아 문자열을 실행한 결괏값을 돌려주는 함수
print( eval('1+2') )
print( eval("'hi' + 'a'") )
print( eval('divmod(4, 3)') )

 

  • filter( ) - filter( 함수이름, 자료형 ) -> 함수에 자료형이 입력되었을때 참인값만 반환
  • len( ) - 입력값의 길이를 돌려주는 함수
# func12.py
# 양수만 추출(필터)하는 함수
def positive1( lists ):
    result = []
    for i in lists :
        if i > 0 :
            result.append( i )
    return result

print( positive1( [ 1, -3, 2, 0, -5, 6 ] ) )    

# filter가 if문의 역할을 대신함 (참인 값만 반환)
def positive2( x ):
    return x > 0

print( list( filter( positive2, [1, -3, 2, 0, -5, 6] ) ) )

# len()
print( len( [1, -3, 2, 0, -5, 6] ) )

 

 

  • 형변환 함수 - 각 자료형의 이름과 같음
    • bool() / int() / float() / str() / list() / tuple() / dic() / set()

 

  • 수학과 관련된 함수
    • abs() / divmod() / max() / min() / hex() / oct() / pow() / range()
    • round() / sorted() - 집합 데이터 정렬 / sum()
# func13.py
# abs() - 절대값 반환
print( abs(3), abs(-3), abs(-1.2) )

# divmod(a, b) - a를 b로 나눈 몫과 나머지 출력
print( divmod(7, 3) )

# max() / min() - 최대값 / 최소값 반환
list1 = ( 2, 4, -2, 9, -20 )
print( max( list1 ), min( list1 ) )

# hex() - 16진수 문자열로 변환 / oct() - 8진수 문자열

# pow(x, y) - x를 y번 거듭제곱한 값 반환
print( pow(3, 5) )

# range() - 입력받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어서 반환
print( list( range(5) ) )
print( list(range(5, 10) ) )
print( list(range(1, 10, 2) ) )
print( list(range(0, -10, -2) ) )

# round() - 반올림 / sorted() - 집합 데이터 정렬 / sum() - 합계
print( round(3.5), round(-4.2), round(10.9) )
print( sum(list1) )
print( sorted(list1) )