본문 바로가기

PYTHON

Function

- 내장함수(built-in)함수 : 파이썬 인터프리터에는 사용 가능한 함수와 형으로 모듈이나 패키지를 가져오지 않고도 기본적으로 내장되어있음.  
예. len( ) , sum( ) , print() 
- Parameter 개수와 Argument 개수 동일해야함

 

docs.python.org/ko/3/tutorial/controlflow.html#more-on-defining-functions

 

4. 기타 제어 흐름 도구 — Python 3.9.0 문서

 

docs.python.org

1. 함수선언 / 정의

- 함수를 이용하면 여러줄의 코드를 재사용 할 수 있어 편리

def 함수이름(매개변수(Parameter) ) :
	statement1.....

 

2. 디폴트값

- 함수 선언 시 파라미터의 디폴트값(기본 설정 값) 설정 시 디폴트값 입력은 옵션(생략 가능) 
- 값을 생략하면 디폴트값 사용.

 

3. signature 

sum (shift + tab)

==> <function sum(iterable, start=0, /)>

 

4. Docstring 

- Module 첫번째 줄, 함수 선언 후 내부 바로 아랫줄 또는 클래스 선언 후 내부 바로 아랫줄에 큰따옴표 3개나 작은 따옴표 3개로 작성하면됩니다.

def a():
    '''Docstring : 함수에 대한 설명
    '''
    return 1

a()

 

5. 매개변수 

- 매개변수(Parameter): 함수를 선언/정의할 때 쓰는 변수

- 인자(Argument) : 함수 사용 할 때 쓰는 변수

 

(1) Positional argument

- 선언한 파라미터의 순서와 인자의 입력 순서,갯수 동일해야함

- 함수에서 정의한 위치대로 대입하는 것

def abc(a,b,c):
    return a  ,b , c   

abc(3,2,1)

==> (3,2,1)

abc(1,2)
==> TypeError : abc()에서 매개변수 c에 대응하는 positional argument를 입력하지 않아서 에러발생.

 

(2) keyword argument

- 순서에 관계없이 정의한 매개변수(Parameter) 이름에 따라 값 대입

abc(c=1,b=3,a=2)
==> (1,3,2)

 

(3) Positional과 Keyword 혼합

- keyword 방식 사용한 이후에는 일괄적으로 keyword 방법만 사용 가능

def abc(a, b, c):
    '''
    Docstring: 입력값 & 순서 그대로 출력
    '''
    return a, b, c
    
abc(1, c=2, b=3)
==> (1,3,2)

# SyntaxError: keyword, positional, keyword
abc(c=2, 2, b=3)
==>SyntaxError: positional argument follows keyword argument

 

(4) Positional only

- - /의 앞에 오는 인자들 positional 방식으로만 인자를 쓸 수 있도록 강제 
- python 3.8부터 가능(이전 버전에서는 사전 정의된 positional only 함수는 있지만, 사용자가 만들 수는 없었다.)

sum
==> <function sum(iterable, start=0, /)>

def abc( a, b, c ,/) :
    '''연습'''
    return a,b,c
==> SyntaxError: invalid syntax

 

(5) Keword only

- * 이후로 인자를 keyword 방식으로만 입력하도록 강제

def abc(*, a):
    '''키워드방식만 '''
    return a
    
abc(a=1)
==> 1

# positional 방식은  Error
abc(1,b=2,c=3)
==> TypeError: hamsoo() got an unexpected keyword argument 'b'

 

(6) 가변 포지셔널

- *Parameter : 포지셔널 방식으로 입력되는 인자의 개수에 상관없이 모두 받음

def abc(*a):
    '''포지셔널 방식만 가능
     인자개수 제한 없음'''
    return a
    
abc()
==> ()

#1개 입력한 경우
abc(1)
==> (1,)

#5개 인자 입력한 경우
abc(1,2,3,4,5)
==> (1, 2, 3, 4, 5)
import matplotlib.pyplot as plt

plt.plot([0,2,4,6,8,10],[1,2,1,2,1,2],color='navy')
#call signatures:  함수 호출, [ ] 생략 가능(option) - 불명확
# * 키워드 방식으로만 사용 Othre parameters, custom ** 가변 포지셔널 방식

 

(7) 가변 키워드

- **Parameter : 키워드 방식으로 입력되는 인자의 개수에 상관없이 모두 받음

- 입력값 : 매개변수, 인자\

- 출력값 : dictionary { 매개변수= key, 인자= value }

- 키값 재할당 불가 (유일성)

def abc(**a) :
    '''
  ** : dictionary {키:값}
    '''
    if 'color' in a:
        print("colorful")
    return a
    
# 인자 없는경우.
abc()
==> {}

abc(color=2)
==> colorful
{'color': 2}

# 인자 1개
abc(a=1)
==> {'a': 1}

# 인자 여러개
abc(b=1, a=1, c=1)
==> {'b': 1, 'a': 1, 'c': 1}


# 가변 키워드에 color가 입력되면 print가 실행되는 조건문이 포함된 함수
def abc(**a) :
    '''
  ** : dictionary {키:값}
    '''
    if 'color' in a.keys():
        print(a.keys())
    return None
    
# color가 없으므로 아무것도(None) 리턴하지 않음
abc()

# color가 있으므로 print가 실행
abc(color=1)
==> dict_keys(['color'])
import matplotlib.pyplot as plt

plt.bar([1,2,3], [2,3,2]) #signature: 가변 키워드 사용

# 가변 키워드 edge 사용
plt.bar([1,4,9], [1,2,3], align="edge")

# 가변 키워드 edge, color 사용
plt.bar([1,4,9], [1,2,3], align="edge", color="gold")

 

(8) 혼합

- 가변 키워드/가변 포지셔널은 한번 만 사용 가능

# Error
def abc(**a, **b):
    pass
==> SyntaxError: invalid syntax

- 가변 키워드 다음에 가변 포지셔널이 올 수 없음

# Error
def abc(**a, *b):
    pass
==> SyntaxError: invalid syntax

 

6. 반환값

(1) 반환값 없음

# 반환값 없음, 매개 변수 없음
def cat():
  print('Meow!')

# 반환값 있음, 매개 변수 없음
def return_true():
  return True

 

(2) 반환값 있음

1) PASS 

- 함수 정의 시점에서 수행 코드 정해지지않을 경우 임시로 입력 가능

- 어떠한 기능도 수행하지 않음

2) return

- 원하는 값 or 하나의 값으로 축약 가능한 식을 반환

# 반환값 있음, 매개 변수 있음
def return_addition(a, b):
  return a + b

* 함수를 다른 이름에 재할당해도 __name__은 원래 이름을 알려준다.

dog = cat
dog() #함수
==> Meow!

# __name__은 원래 이름
dog.__name__
==> 'cat'

 

'PYTHON' 카테고리의 다른 글

indexing & slicing string  (0) 2020.12.11
문자열(str) 타입  (0) 2020.12.11
Method Overloading  (0) 2020.11.20
변수의 스코프  (0) 2020.11.20
MAP  (0) 2020.11.20