Patrick's 데이터 세상
Python - 함수 본문
반응형
SMALL
함수
함수란
함수는 여러 개의 문장(statement)을 하나로 묶어 줌
이미 정의되어 있는 함수를 사용하거나 필요한 함수를 정의
한 번 혹은 여러 번 호출될 수 있으며 함수 종료 시 결과 값을 전달
함수의 정의
함수의 선언은 def로 시작하고 콜론(:)으로 끝남
함수의 시작과 끝은 코드의 들여쓰기로 구분
시작과 끝을 명시해 줄 필요가 없음
헤더(header) 파일, 인터페이스(interface), 구현(implementation) 같은 부분으로 나누지 않음
함수 선언
# 함수 선언 문법
def <함수명> (인수1, 인수2, ... 인수N):
<구문>
return <반환값>
# 함수 구문
def Times(a, b):
return a*b
>>> Times(10, 10)
100
함수의 반환 및 인수
함수에서 인수 전달
# 변경 불가능 변수 예제
>>> a=10
>>> b=20
>>> def sum1(x, y):
return x + y
>>> sum1(a, b)
30
>>> x = 10
>>> def sum2(x, y):
x=1
return x + y
>>> sum2(x, y)
21
>>> x
10
# 변경 가능한 변수를 인수로 전달
>>> def change(x):
x[0] = 'H'
>>> wordlist = ['J', 'A', 'M']
>>> change(wordlist)
>>> wordlist
['H', 'A', 'M']
>>> def change(x)
x = x[:] # 입력받은 인수를 모두 x에 복사합니다.
x[0] = 'H' # list x의 첫 번째
return None
>>> wordlist = ['J', 'A', 'M']
>>> change(wordlist)
>>> wordlist
['J', 'A', 'M'] # change가 호출자의 객체에 영향을 미치지 않습니다.
스코핑 룰(Scoping Rule)
이름 공간(Name Space)
변수의 이름이 저장되어 있는 장소 |
함수 내부의 이름 공간, 지역 영역(Local Scope) |
함수 밖의 영역, 전역 영역(Global Scope) |
파이썬 자체에서 정의한 내용에 대한 영역, 내장 영역(Built-in Scope) |
LGB 규칙(변수 이름을 찾을 때)
Local Scope → Global Scope → Built-in Scope 순서로 찾음 |
# 지역 영역에서 전역 영역의 이름을 접근할 때 global을 이용
>>> x = 1
>>> def func(a):
return a + x
>>> func(1)
2
>>> def func2(a):
x = 2
return a + x
>>> func2(1)
3
기본 인수 값
# 함수를 호출할 때 인수를 지정 해주지 않아도 기본 값이 할당 되도록 하는 방법
>>> def Times(a = 10, b = 20):
return a * b
>>> Times()
200
>>> Times(5)
100
키워드 인수
# 인수 이름으로 값을 전달하는 방식
# 변수의 이름으로 특정 인수를 전달할 수 있음
>>> def connectURI(server, port):
str = "http://" + server + ":" + port
return str
>>> connectURI("test.com", "8080")
'http://test.com:8080'
>>> connectURI(port="8080", server="test.com")
'http://test.com:8080'
가변인수 리스트
>>> def union2(*ar):
res = []
for item in ar:
for x in item:
if not x in res:
res.append(x)
return res
>>> union2("HAM", "EGG", "SPAM")
["H", "A", "M", "E", "G", "S", "P"]
정의되지 않은 인수 처리하기
# **를 사용하면 정의되지 않은 인수를 딕셔너리 형식으로 전달
>>> def userURIBuilder(server, port, **user):
str = "http://" + server + ":" + port + "/?"
for key in user.keys():
str += key + "=" + user[key] + "&"
return str
>>> userURIBuilder("test.com", "8080", id='userid', passwd='1234')
'http://test.com:8080/?passwd=1234&id=userid&'
>>> userURIBuilder("test.com", "8080", id='userid', passwd='1234', name='mike', age='20')
'http://test.com:8080/?passwd=1234&age=20&id=userid&name=mike&'
람다 함수
# 이름이 없는 1줄짜리 함수
# 한 줄의 간단한 함수가 필요한 경우
>>> g = lambda x, y : x * y
>>> g(2,3)
6
>>> (lambda x: x * x)(3)
9
재귀적 함수 호출
>>> def factorial(x):
if x == 1:
return 1
return x * factorial(x - 1)
>>> factorial(10)
3628800
pass 구문(statement)
# 아무 일도 하지 않음
>>> while True:
pass
__doc__ 속성과 help 함수
# help 함수를 이용해 함수의 설명을 볼 수 있음
>>> help(print)
# 사용자가 만든 함수도 help를 사용해 설명을 볼 수 있음
>>> def plus(a, b):
return a + b
>> help(plus)
Help on function plus in module __main__:
plus(a, b)
# 좀 더 자세한 설명을 추가하려면 __doc__ 속성을 이용함
>>> plus.__doc__ = "return the sum of parameter a, b"
이터레이터(iterater)
순회 가능한 객체의 요소를 순서대로 접근할 수 있는 객체
이터레이터 안의 __next__()를 이용해 순회 가능한 객체의 요소를 하나씩 접근할 수 있음
제네레이터(generator)
return 대신 yield라는 구문을 이용해 함수 객체를 유지한 채 값을 호출자에게 넘겨줌
반응형
LIST
'Programming > Python' 카테고리의 다른 글
Python 데이터 분석 - NumPy (0) | 2020.06.24 |
---|---|
Python 데이터 분석 - 데이터 로딩 (0) | 2020.06.24 |
Python 환경 설치(Google Colab, Visual Studio Code, Anaconda) (1) | 2020.06.24 |
Python - 제어 (0) | 2020.06.24 |
Python - 자료형 (2) | 2020.06.24 |
Comments