Patrick's 데이터 세상

Python - 함수 본문

Programming/Python

Python - 함수

patrick610 2020. 6. 24. 21:55
반응형
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