즐겁게!! 자신있게!! 살아보세!!

재밌는 인생을 위하여! 영촤!

Language_Study/Python

[Python] 3.문법-Function

Godwony 2021. 1. 19. 21:15
반응형

Function(함수) 1-1

  • 자주 사용하는 코드를 독립적인 모듈로 만들어 둔 것.
  • 별도의 메모리 영역을 할당 받아서 실행

1.종류

1) Maker Function : 처음부터 제공되는 함수

2) User Define Function : 사용자가 만든 함수

3) 3rd party Function : 제조사가 주지 않고, 내가 만들지 않은 함수. 패키지를 다운로드 받아서 설치해야만 사용이 가능

2.함수를 표현

  • 이름(매개변수) -> 리턴 타입

  • 이름(매개변수) : 이 경우는 이 함수가 데이터를 리턴하지 않는 경우의 가능성이 높음

    • 아래 설명문에서 리턴을 한다고 작성하는 경우도 있다.

3.용어

  • 매개변수는 함수를 호출 할 때 넘겨주어야 하는 데이터
  • 리턴은 함수를 수행하고 난 후 남겨주는 데이터
  • 리턴이 있으면 출력을 할 수 있고 변수에 저장해서 재사용 가능
  • 리턴이 없으면 출력도 못하고 변수에 저장도 안됨.

4.함수의 사용법 확인

  • help(함수명)
    • return이 없는 함수는 내 데이터를 받아서 데이터에 작업을 수행합니다.
help(max)    max(...)
    max(iterable, *[, default=obj, key=func]) -> value
    max(arg1, arg2, *args, *[, key=func]) -> value

    With a single iterable argument, return its biggest item. The
    default keyword-only argument specifies an object to return if
    the provided iterable is empty.
    With two or more arguments, return the largest argument.    return 값이 있는 함수 

li = [100, 300, 200]
li.sort()    # return이 없기 때문에 li 자신의 데이터에서 작업을 수행한다. 
print(li)     

5. 파이썬에서는 함수가 일급객체

  • 파이썬에서는 함수도 하나의 데이터
  • 함수()은 함수를 호출해서 실행하는 것입니다.
  • 함수는 함수가 저장된 곳의 참조를 의미한다.
li.sort()
print(li)    출력값 나옴 
print(li.sort)    함수가 저장된곳의 참조 영역을 불러옴 
<built-in method sort of list object at 0x10b2cb1e0>

6.빌트 인 함수 확인

dir(__builtins__)

  • 파이썬에서는 __ 있는 것은 예약어

Function(함수) 1-2

1. 매개변수가 있는 함수

  • 매개변수가 있는 경우 매개변수의 이름만 나열하면 됩니다.
  • 매개변수가 있는 함수를 호출할 때는 기본적으로 매개변수를 전부 대입해서 호출해야 합니다.
  • 매개변수는 순서대로 대입해야 하는데 매개변수 이름과 함께 대입하면 순서를 변경해서 대입 해도 된다
    • 대다수의 경우 첫번째 매개변수는 핵심이 되는 매개변수일 가능성이 높기 때문에 이름없이 대입하고 두번째 매개변수부터 이름과 함께 대입한다.

1) 매개변수를 적게 대입해서 발생하는 예외 : TypeError : disp() missing 1 required positional argument:'cnt'

2) 매개변수의 자료형이 잘못된 경우 : TypeError:'str' object connot be interpreted as an integer

  • 매개변수에 기본값 부여 가능

  • 매개변수를 만들 때 = 기본값을 설정해주면 된다.

  • 기본값이 있는 매개변수는 생략하고 호출이 가능

  • 매개변수 앞에 *을 붙이면 데이터를 몇개를 대입하던지 이 매개변수가 전부 받습니다.

    • 함수 내에서는 tuple로 취급합니다
    • 이 매개변수는 반드시 마지막에 설정 되어야 합니다.
  • 매개변수 앞에 **을 붙이면 dict가 됩니다.

    • 이 매개변수에 데이터를 대입할 때는 key=value 형식으로 대입해야 합니다.
    • **이 붙은 매개변수를 가진 함수를 사용할 때는 document를 잘 읽어보고 사용해야 한다.
    • 그래프를 그리는 함수들이 이 형태의 매개변수를 가지고 있는 경우가 많다.
    • 적절한 옵션들을 찾아서 사용해야 한다.

2.return

  • 함수의 수행을 종료하고 호출한 곳으로 돌아가는 명령어
  • return 할 때 데이터를 가팅 가지고 갈 수 있습니다.
    • return 뒤에 가지고 갈 데이터를 입력하면 데이터를 가지고 돌아간다.
    • 기본적으로 return은 1개만 가능합니다.
    • 2개 이상 리턴하고자 하는 경우에는 (튜플), [리스트]. {set 이나 dict} 형태로 묶거나 나중에 나오는 class의 instance를 만들어서 리턴해야 한다.
  • 파이썬은 튜플의 경우는 변수에 나누어서 저장이 가능합니다.
    • 변수나열 = (튜플)
    • 튜플의 데이터를 순서대로 변수에 대입합니다.
    • 변수의 개수와 튜플의 데이터가 개수가 다른 경우에는 마지막 변수에 튜플의 모든 데이터를 대입합니다.

3.재귀함수(recursion)

  • 함수가 자기 자신을 다시 호출하는 것
  • 함수가 함수를 호출하는 구조라서 느리고 메모리 사용량도 많지만 코드를 간결하게 만들 수 있다는 장점이 있다.
# 재귀함수 - 피보나치수열
def fibonacci(n) : 
    if n==1 or n == 2 : 
        return 1
    else : 
        return fibonacci (n-1) + fibonacci(n-2) 

print(fibonacci(9))

피보나치수열, 하노이의 탑

4.파이썬에서 함수는 일급 객체

  • 함수를 변수에 저장할 수 있고 리턴할 수 있고 매개변수로 대입할 수도 있다.
  • 함수형 프로그래밍을 사용할 때와 closure를 만들기 위해서 사용합니다.
  • 함수형 프로그래밍은 데이터의 모임(list, tuple, set, dict등)에 하나의 함수를 적용하는 프로그래밍
  • closure는 함수가 함수를 리턴해서 함수 내부의 데이터를 함수 외부에서 변경하도록 하는 프로그래밍

5. 람다(lambda)

  • 파이썬에서는 이름없는 한 줄 짜리 함수
def addint(x, y) : 
    return x + y 

#위의 함수를 람다식으로 표현 
lambdaadd = lambda x, y : x + y
print(lambdaadd(100, 200))
  • 람다 함수도 매개변수의 초기화 가능
  • 한 줄 짜리 함수라서 변수 선언은 안됩니다.

6.함수적 프로그래밍

  • 데이터의 모임에 함수를 전부 적용하는 프로그래밍

1) Map

  • 데이터의 모임과 함수를 매개변수로 받아서 데이터의 모임에 함수를 전부 적용해서 결과를 데이터의 모임으로 리턴해주는 함수
  • 대입되는 함수는 1개의 매개변수를 가져야 하고 반드시 데이터를 리턴해야 한다.
# 10000 개의 데이터에 1씩 더한 결과로 list를 만들기 
# 반복문을 이용한 방법
import datetime
def inc (x) :
    return x+1

collection = [ i for i  in range(0, 100000000, 1)]
print(datetime.datetime.now())

result = []
for i in collection : 
    result.append(inc(i))

print(datetime.datetime.now())
print()
# 함수형 프로그래밍을 이용한 방법 
print(datetime.datetime.now())
result = list(map(inc, collection))
print(datetime.datetime.now())

2) filter

  • 데이터의 모임에서 함수의 수행결과가 true 인 데이터만 모아서 리턴해주는 함수
  • 대입되는 함수는 매개변수를 1개 받아서 bool을 리턴하는 함수이어야 합니다.
def odd(x) : 
    return x % 2 == 1 # 홀수 

li = [23,432,25,34,234,4,123,43,3,2,4,13,23]

print(list(filter(odd, li)))

3) reduce

  • 데이터의 모임과 함수를 가지고 누적 연산을 수행해서 결과를 리턴하는 함수
  • 결과가 1개
  • 대입되는 함수는 매개변수가 2개이고 결과를 리턴하는 함수이어야 한다.
    • 매개변수는 처음에는 첫번째와 두번째를 데이터를 가지고 수행 하고 그 다음부터는 앞 연산의 결과를 가지고 다음 데이터와 연산
  • python3 에서는 reduce가 내장함수에서 빠지고 functools 패키지의 함수로 변경

7.pass

  • 클래스나 함수의 내용을 나중에 작성하고자 할 때 사용하는 예약어
  • 내용이 없는 함수나 클래스를 만들 때 사용합니다.

8.doc

  • 함수 내부에 doc 속성에 문자열을 대입하면 help(함수) 했을 때 출력이 된다.
  • 파이썬이나 R에서 함수를 만들어서 배포하고자 할 때 이 속성에 이 함수의 기능을 설명을 해야 합니다
  • 배포할때 필요함. 영어로 작성

변수 < 함수 < 클래스 < 파일(모듈) < 패키지
함수부터를 모듈 프로그래밍 이라고 합니다.

반응형

'Language_Study > Python' 카테고리의 다른 글

[Python] 5.문법-자료형  (0) 2021.01.19
[Python] 4.문법-클래스  (0) 2021.01.19
[Python] 2.문법 - 제어문  (0) 2021.01.19
[Python] 1.문법  (0) 2020.12.23
[Python] 0.intro  (0) 2020.12.23