[파이썬데이터분석] 함수

imacusirius·2021년 11월 9일
0

파이썬데이터분석

목록 보기
11/12
  • 코드 재사용과 조직화하기 위한 수단
  • 파이썬 명령들의 집합에 이름을 지어 가독성 좋은 코드 작성할 수 있도록 함
  • def 예약어로 정의, return 예약어를 사용해 값 반환
def my_function(x, y):
	if x > y:
    	return x
    else:
    	return y
  • return 문은 여러 개 와도 상관 X / 없다면 None이 반환
  • 함수는 여러 개의 일반 인자와 키워드 인자를 받을 수 있음
    • 키워드 인자는 기본값 또는 부수적인 인자를 지정하기 위해 사용됨
    • 항상 일반 인자 다음으로 와야 함
    • 키워드 인자끼리는 순서 상관 X 이름만 기억

네임스페이스, 스코프, 지역 함수

  • 함수는 전역과 지역, 두 가지 스코프(영역)에서 변수를 참조함
  • 변수의 스코프를 설명하는 다른 용어: 네임스페이스
  • 함수 내에서 선언된 변수는 기본적으로 지역 네임스페이스에 속함
  • 지역 네임스페이스는 함수 호출 시 생성, 함수의 인자를 통해 즉시 생성됨
  • 함수 실행이 끝나면 지역 네임스페이스는 사라짐
  • 함수 스코프 밖에서 변수에 값 대입하려면 global 예약어를 이용해 전역 변수로 선언해야 함

여러 값 반환

  • 파이썬은 하나의 함수에서 여러 개의 값을 반환할 수 있음

함수도 객체

  • 파이썬에서는 함수도 객체이므로 다른 언어와 달리 객체 생성을 쉽게 표현할 수 있음
  • 문자 데이터를 분석하려면 문자열 리스트를 정형화해야 함
    • ex) 공백 제거, 불필요한 문장부호 제거, 대소문자 맞추기 등등
    • 내장 문자열 라이브러리와 정규 표현식을 위한 re 표준 라이브러리로 가능

익명 함수

  • 파이썬은 익명 함수 혹은 람다 함수라고 하는, 값을 반환하는 단순한 한 문장으로 이루어진 함수를 지원함
  • lambda 예약어로 정의함. // '익명 함수를 선언한다'는 뜻
  • 람다 함수를 사용하면 실제 함수를 선언하거나 람다 함수를 지역 변수에 대입하는 것보다 코드를 적게 쓰고 더 간결하게 쓸 수 있음

커링: 일부 인자만 취하기

  • 커링은 일부 인자만 취하는 새로운 함수를 만드는 기법
def add_numbers(x, y):
	return x + y
  • 이 함수를 하나의 변수만 인자로 받아 5를 더해주는 새로운 함수로 변경
add_five = lambda y : add_numbers(5, y)
  • 내장 functions 모듈의 partial 함수를 이용하면 이 과정을 단순화할 수 있음

제네레이터

  • 파이썬은 리스트 내의 객체나 파일의 각 로우 등 순차적인 자료를 순회하는 일관적인 방법을 제공
  • 이터레이터 프로토콜을 이용해 순회 가능한 객체 생성 가능
    • ex) 사전 순회하면 사전의 키가 반환
  • 이터레이터는 for문 같은 컨텍스트에서 사용될 경우 객체를 반환
  • 리스트나 리스트와 유사한 객체를 취하는 대부분 메서드는 순회 가능한 객체도 허용함
    • min, max, sum 같은 내장 메서드, list, tuple 같은 자료구조를 생성하는 메서드 포함
  • 제네레이터는 순회 가능한 객체를 생성하는 간단한 방법
    • 일반 함수는 실행되면 단일 값을 반환하지만, 제네레이터는 순차적인 값을 매 요청 시마다 하나씩 반환
  • 제네레이터 생성은 return 대신 yield 예약어를 사용함
  • 제네레이터를 호출하더라도 즉각적으로 코드 실행 X
  • 제네레이터로부터 값을 요청해야 제네레이터 코드가 실행됨

제네레이터 표현식

  • 제네레이터를 생성하는 더 간단한 방법
  • 리스트에서 대괄호를 사용하듯, 괄호를 사용하면 제네레이터 생성 가능
gen = (x ** 2 for x in range(100))

위 코드와 동일한 코드

def _make_gen():
	for x in range(100):
    	yield x ** 2
gen = _make_gen()
  • 제네레이터 표현식은 리스트 표현식을 인자로 받는 어떤 파이썬 함수에서도 사용 가능함

itertools 모듈

  • 일반 데이터 알고리즘을 위한 많은 제네레이터를 포함
  • groupby는 순차 자료구조와 함수를 인자로 받아, 인자로 받은 함수에서 반환하는 값에 따라 이름을 지어 줌

유용한 itertools 함수

함수설명
combinations(iterable, k)iterable에서 순서를 고려하지 않고 길이가 k인 가능한 모든 조합을 생성
permutations(iterable, k)iterable에서 순서를 고려해 길이가 k인 모든 조합을 생성
groupby(iterable[, keyfunc])iterable에서 각각의 고유한 키에 따라 그룹을 생성
product(*iterables, repeat=1)iterable에서 카테시안 곱을 구함. 중첩 for문 사용과 유사

에러와 예외 처리

  • 견고한 프로그램 작성하기 위해 예외 처리가 필수
    • try/except 블록을 사용하면 개선된 함수를 작성할 수 있음
float('1.2345')
>>> 1.2345
float('somthing')
>>> ValueError ...

위와 같은 오류를 방지하려면

def attempt_float():
	try:
    	return float(x):
    except ValueError:
    	return x

와 같이 try/except 블록을 사용해 float 함수를 호출하면 됨 // except 블록의 코드는 float(x)가 예외를 발생했을 때 실행

IPython에서 예외 처리

  • %run을 이용해 코드를 실행시키던 중에 예외가 발생하면 IPython은 기본적으로 전체 트레이스백을 출력하고, 해당 위치 주변의 코드를 보여 줌
  • %xmode 매직 명령어를 이용하면 Plain에서부터 함수 인잣값 등을 포함해서 보여 주는 Verbose 단계까지 직접 제어 가능

0개의 댓글