Programming Language/Python

함수 기초

D4tai1 2018. 10. 3.

1. 파이썬 함수.. 다른언어와의 차이점

1) 다른 언어와 다르게 함수도 하나의 자료형으로 간주한다.

2) 파이썬에서는 함수도 하나의 데이터이므로 변수에 대입할 수 있다.

3) 파이썬에서는 함수자체를 매개변수로 사용할 수 있다.

4) 함수이름은 함수의 주소를 의미한다.

5) 함수이름() 은 함수의 호출(실행)을 의미한다.

 

2. 내장함수(Built-in Function)

1) 별도의 모듈없이 사용할 수 있는 기본으로 제공되는 함수이다.

2) https://docs.python.org/3/library/functions.html 에 접속에서 내장함수 확인이 가능하다.

3) print(dir(__builtins__)) 명령으로도 내장함수 확인이 가능하다.

 

3. 반환

1) 파이썬은 return 뒤에 값이 없다면 None 객체를 반환한다.

2) return 문이 없어도 None 객체를 반환한다.

3) return 시 여러 개의 값을 반환할 경우 튜플을 리턴한다.

 

4. 매개변수 전달

1) 값 매개변수 전달

 [1] 소스

def show(data):
    data = 10
    
r = 30

show(r)

print(r)

 [2] 결과

  - 30

 

 

2) 리스트 매개변수 전달

 [1] 소스

def test(t):
    t[0] = 100
    #주소 0번째 값을 100으로 변경

li = [1, 2, 3]

test(li)
#li리스트의 주소가 test함수로 넘어간다

print(li[0])

 [2] 결과

  - 100

 

3) 매개변수 기본값

 [1] 매개변수가 있는 경우 매개변수를 넘겨주지 않으면 에러가 발생한다

 [2] 파이썬에서는 매개변수에 기본값을 지정할 수 있다.

  - 형식 : [매개변수이름 = 값]

  - 기본값을 정의하면 함수 호출 시 값을 대입하지 않으면 기본값을 사용한다.

  - 기본값을 정의하면 함수 호출 시 값을 대입하면 대입한 값을 사용한다.

  - 기본값이 있는 매개변수 뒤에는 기본값이 없는 매개변수를 사용할 수 없다.

  ex) def test(a, b = 0):     <-- 가능

 def test(b = 0, a):      <-- 불가능 

 [3] 호출 시 매개변수 이름과 값을 대입에서 호출하면 매개변수 순서를 변경해서 호출이 가능하다.

  ◆ 소스

def print_args1(argc, *argv):
    for i in range(argc):
        print(argv[i])

print_args1(3, 'argv1', 'argv2', 'argv3')
# 매개변수 순서대로 전달


def print_args2(*argv, argc):
    for i in range(argc):
        print(argv[i])
print_args2('argv1', 'argv2', 'argv3', argc = 3)
# 가변 매개변수 다음에 사용하는 일반 매개변수는 키워드 매개변수로 호출해야 한다.

  ◆ 결과

  - argv1
  - argv2
  - argv3
  - argv1
  - argv2
  - argv3

  

 

4) 매개변수에 기본값 추가

 [1] 소스

def fun1(n, step=3):
    return n + step

a = 1

result = fun1(a, 10)
print(result)

b = 2
result = fun1(b)
print(result)

result = fun1(step=2, n = 10)
print(result)

 [2] 결과

  - 11

  - 5

 

5) 매개변수에 리스트 기본값 추가

 [1] 소스

def addition1(arg, result=[]) :
    result.append(arg)
 
    return result
 
print (addition1('1'))
print (addition1('2'))

 [2] 결과

  - [1]

  - [1, 2]

 

6)  함수 내부에 리스트 생성

 [1] 소스

def addition2(arg) :
    result = []
    result.append(arg)
 
    return result
 
print (addition2('1'))
print (addition2('2'))

 [2] 결과

  - [1]

  - [2]

 

7) 가변 매개변수

 [1] 매개변수의 입력 개수가 달라질 수 있다.

 [2] 매개변수 앞에 *을 붙으면 튜플이 된다.

 ◆ 소스

def merge_string(*text_list):
    result = ''
    for s in text_list:
        result += " " + s
        
    return result
    
print(merge_string('오늘', '날씨'), end="")
print(merge_string('매우', '좋다'))

 ◆ 결과

 - 오늘 날씨 매우 좋다

 [3] 매개변수 앞에 **을 붙이면 dict가 된다.

  ◆ 소스

def userURIBuiler(server, port, **user): uri = 'http://' + server + ':' + port + '/' for key in user: uri = uri + key + '=' + user[key] + '&' return uri print(userURIBuiler('test.com', '8080', id='d4tai1', pw='test'))

  ◆ 결과

   - http://test.com:8080/id=d4tai1&pw=test&

 

5. 재귀함수(순환)

1) 자기 자신을 다시 호출하는 함수이다.

 [1] 하노이 탑

  ◆ 소스

def hanoi(ndisks, startPeg=1, endPeg=3):
    if ndisks:
        hanoi(ndisks-1, startPeg, 6-startPeg-endPeg)
        print(startPeg, "번 기둥의", ndisks, "번 고리를 ", endPeg, '번 기둥에 옮깁니다.')
        hanoi(ndisks-1, 6-startPeg - endPeg, endPeg)

hanoi(ndisks=3)

 

  ◆ 결과(이미지는 이해를 돕기위한 사진)

 

  - 1 번 기둥의 1 번 고리를  3 번 기둥에 옮깁니다.
  - 1 번 기둥의 2 번 고리를  2 번 기둥에 옮깁니다.
  - 3 번 기둥의 1 번 고리를  2 번 기둥에 옮깁니다.
  - 1 번 기둥의 3 번 고리를  3 번 기둥에 옮깁니다.
  - 2 번 기둥의 1 번 고리를  1 번 기둥에 옮깁니다.
  - 2 번 기둥의 2 번 고리를  3 번 기둥에 옮깁니다.
  - 1 번 기둥의 1 번 고리를  3 번 기둥에 옮깁니다.

 

6. 함수의 변수화

1) 함수 이름을 변수에 저장

 [1] 리스트 내에 함수의 이름을 저장

  ◆ 소스

def plus(a, b):
    return a + b
def minus(a, b):
    return a - b

first = [plus, minus]

print(first[0](1,2))
print(first[1](2,1))
#first[0]은 plus()를 담고 있다.
#first[1]은 minus()를 담고 있다.

 

  ◆ 결과

  - 3
  - 1

 

7. 일등시민함수

1) 함수를 매개변수로 넘기거나 리턴할 수 있고 변수에 할당할 수

 [1] 함수를 객체로 다루고 있기 때문에 가능하다.

  ◆ 소스

def hello_korean():
    print('안녕하세요.')

def hello_english():
    print('Hello.')
    

def get_greeting(where):
    if where == 'K':
        return hello_korean
    else:
        return hello_english

hello1 = get_greeting('K')
hello1()

hello2 = get_greeting('E')
hello2()

  

  ◆ 결과

  - 안녕하세요.
  - Hello.

 

8. pass

1) 이름만 만들어 놓고 아무 동작을 하지 않고 나중에 내용을 작성하기위해 만들어 놓는다.

2) 함수의 내용에 pass를 적어서 사용한다.

 

9. [.__doc__] 와 [help( )]

1) 함수에 도움말을 추가하는 방법이다.

2) 함수의 .__doc__속성에  "주석" 을 추가하여 도움말로 확인이 가능하도록 한다.

3) 함수정의 시 최상단에 """주석""", "주석" 과 같은 방식으로 추가하여 도움말로 확인이 가능하도록 한다.

 [1] 도움말

  ◆ 소스

def plus(a, b):
    return a + b

plus.__doc__ = "2개의 데이터를 받아 더한 값을 반환하는 함수이다."

def minus(a,b):
    """
    2개의 데이터를 받아
    뺀 값을 반환하는 함수이다.
    """
    return a - b

help(plus)
help(minus)

 

  ◆ 결과

  - Help on function plus in module __main__:

  - plus(a, b)
  -     2개의 데이터를 받아 더한 값을 반환하는 함수이다.

  - Help on function minus in module __main__:

  - minus(a, b)
  -     2개의 데이터를 받아
  -     뺀 값을 반환하는 함수이다.

 

10. lambda

1) 이름이 없는 한 줄짜리 함수이다.

2) [ lambda <인수나열> : <반환할내용>] 의 형식으로 사용한다.

3) 람다함수는 내부에서 새로운 변수를 선언할 수 없다.

4) 매개변수에 기본값을 부여할 수 있다.

5) 내부변수가 아닌 외부변수도 사용이 가능하다.

6) 람다함수 예제

 [1] 람다함수를 이용한 컴프리헨션

  ◆ 소스

def g(func):
    return [func(x) for x in range(-10, 10)]
    #반복문을 돌아 x를 받아 func함수의 파라미터로 x를 넣고 호출한다.
    #반환 받은 값을 리스트에 저장한다.
print(g(lambda x: x + 10))
#x를 넣어서 x에 10을 더한 결과를 반환하는 람다함수이다.
#즉 g함수에 람다함수를 파라미터로 넣은 것이다.

y = 10
print(g(lambda x: x + y))
#x를 넣어서 x에 y을 더한 결과를 반환하는 람다함수이다.
#람다 내부변수가 아닌 외부변수도 사용이 가능하다.

 

  ◆ 결과

  - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

  - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

 

컴프리헨션 참조 = https://ccurity.tistory.com/48?category=663895

'Programming Language > Python' 카테고리의 다른 글

IP별 국가코드 매칭(feat.오프라인)  (0) 2021.01.20
[File_Filter] 파일 분류하는 방법  (0) 2019.08.06
데이터 관계분석  (0) 2018.09.30
자료타입  (0) 2018.09.15
파이썬 기본문법  (0) 2018.09.04

댓글