강의목표
1. 기본 자료형 및 시퀀스를 이용한 사용자 함수를 만들어서 연동할 수 있다.
2. 클래스 생성 후 연동할 수 있다.
============================================================================
[형식]
def 함수명(매개변수, 매개변수=초기값, *args, **args):
명령수행문
return 값
함수의 선언과 호출
- 함수는 호출되면 함수의 정의부로 이동해 함수의 모든 내용을 순차적으로 실행한 후
함수가 종료되면 호출되었던 곳으로 돌아온다.
- 함수를 호출할 때는 함수명()으로 호출하고 매개변수가 있는 함수를 호출할 때에는 함수의 원형에
맞는 매개변수의 자료형과 같은 값을 매개변수로 전달해야만 호출이 가능하다.
=> 함수는 배개변수로 초기값을 지정할 수가 있고 *args로 지정하게 되면 tuple타입이 선언된다.
=> 일반매개변수, 가변매개변수가 선언될 때에는 가변매개변수는
반드시 일반매개변수 뒤에 하나만 선언된다. **args로 지정하게 되면 dict타입이 선언된다.
- 함수는 크게 [return 값]이 생략된 함수와 datatype의 return값을 가진 원형으로 구분되며
return문을 생략하면 None을 반환하고 return값이 있으면 함수는 결과값을 호출된 모듈로 보낸다.
- 함수를 호출할 때에는 "함수명(매개변수)"의 형태로 호출하며 매개변수(parameter)는 호출된
함수에 전달할 초기값을 대입할 변수를 의미하고 argument는 호출할 때 전달할 값을 의미한다.
- 함수의 매개변수 전달 특징
1) argument들은 위치나 parameter 이름으로 전달된다.
2) parameter는 기본값(초기값)을 제공할 수 있다.
3) argument들은 tuple을 대입할 수 있도록 함수를 정의할 수 있다. : *args
4) argument들은 dictionary를 대입할 수 있도록 함수를 정의할 수 있다. : **kwargs
# 매개변수, 매개변수 초기값
def getA(a, b = 3): # 초기값이 있는 parameter는 뒤에 두는 것을 권장
print(a, b)
getA(1)
getA(1, 2)
getA(b = 1, a = 2) # parameter를 지정해서 넣는 것도 가능
# result
1, 3
1, 2
2, 1
# 함수의 가변인자값 전달
def my_fun(a, *args, **kwargs): # a는 일반, args는 튜플, kwargs는 딕셔너리
print("a =", a)
print("args =", args)
print("kwargs =", kwargs)
my_fun(11)
my_fun(11, [22, 33], 44) # 일반에 들어가고 남은 것은 전부 tuple로 들어간다
my_fun(11, [22, 33], 44, id='vszealot', pw=1234)
# dictionary에 넣으려면 위와 같은 방법으로 넣는다
#result
a = 11, args = (), kwargs = {}
a = 11, args = ([22, 33], 44), kwargs = {}
a = 11, args = ([22, 33], 44), kwargs = {'id': 'vszealot', 'pw': 1234}
============================================================================
람다함수(lambda)
- 람다 대 수학(lambda calculus)에서 유래된 이름으로 익명함수라고 한다.
- 함수의 이름이 없는 함수로 파이썬에서 lambda라는 키워드로 익명함수를 정의
- 간단한 기능의 함수가 컨테이너의 요소로 들어가는 경우,
혹은 다른 함수의 인자로 함수를 넘겨줄 때 사용되며 한 줄로 표시되는 함수로 정의
- filter(), map(), reduce() 등의 함수를 사용할 때 유용하다.
[형식]
lambda 인자1, 인자2,,, : 명령(표현식)
# 두 수를 더해서 출력 - 함수
def add(x, y):
return x + y
print(add(3, 5))
#result
8
# 두 수를 더해서 출력 - 람다
print((lambda x, y : x + y)(3, 5))
#result
8
============================================================================
파이썬의 고차함수(high - order function)
- filter(), map(), reduce() 등의 함수, 주로 람다를 응용해서 사용
filter(function, list) : 함수와 순서형 즉 리스트를 매개인자로 받아서 리스트의 값이 하나씩 함수에
인수로 전달되어 조건에 맞는 결과인 True가 되는 반환값만을 따로 모아서
리스트의 형태로 반환한다.
map(function, seq) : 함수와 시퀀스자료형을 입력받아서 시퀀스자료형의 각각의 요소가 하나씩
함수에 인수로 전달되어 리턴되는 출력값을 묶어서 리스트로 리턴하는 함수
reduce(func, seq) : 함수와 시퀀스자료형을 입력받아서 시퀀스자료형의 두 개의 요소가
함수에 인수로 전달되어 연산을 한 후, 그 결과값을 그 다음 항목과
계속 연산하여 하나의 값을 리턴한다.
재귀함수(recursive): 함수가 직접 또는 간접적으로 자기 자신을 다시 호출하는 것
재귀호출(recursive call): 메모리를 많이 소모하게 되며 처리속도 또한 상대적으로 느리지만
작성하는 코드가 간결해지고 이해하기 쉽다.
재귀호출 quick sort, tower of hanoi, Fractal curve 등의 알고리즘을 구현할 때 사용된다.
# filter(func, seq)
print(tuple(filter(lambda x: x % 2 == 0, range(10))))
# map(func, seq)
print(tuple(map(lambda x: x % 2 == 0, range(10))))
# reduce(func, seq)
from functools import reduce # reduce함수는 functools 모듈을 import해야 사용가능
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
#재귀함수
def sum_n(n):
if n == 1:
return 1
else:
return n + sum_n(n - 1)
print(sum_n(9))
#result
(0, 2, 4, 6, 8)
(True, False, True, False, True, False, True, False, True, False)
45
45
============================================================================
OOP(Object Oriented Programming)란?
- 객체 지향 프로그램을 말한다. 데이터 처리를 하는 메소드들을 하나의 프로그램으로 설계해서
연동하는 객체(Object)를 중심으로 프로그램을 짜는 언어를 말한다.
- python은 대화적이고(Interactive), 인터프리터(interpreter)되는 객체 지향 프로그래밍 언어이다.
- 파이썬은 모든 것이 객체이다.
클래스와 객체란?
- 클래스는 객체 지향 프로그램의 기본적인
사용자 정의 데이터형(user define data type)이라고 할 수 있다.
- 클래스는 객체를 정의한 것으로 실세계에서 존재하는 사물이나 개념의 속성과 기능을
모델링해서 추상화시키는 과정을 말한다.
- 객체는 자신 고유의 속성(attribute)을 가지며 클래스에서 정의한 행위(behavior)를 수행할 수 있다.
객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다.
- 객체는 클래스의 인스턴스이며 정의된 클래스를 사용해서
실제로 메모리에 생성되어 메모리에 로딩된 상태를 말한다.
- 객체는 클래스의 타입으로 선언됐을때를 의미하는 것이고 그 객체가 메모리에 할당되어
실제 사용될 때 인스턴스라고 한다.
객체 = 속성(Attributes) + 행위(Behaviors)
클래스 = 변수(Variable) + 메소드(Methods)
- 객체는 멤버 변수를 가지고 있으면서 그들의 동작을 수행하는 함수들을 가지게 되는데 메소드라고 부른다
메소드는 객체를 사용하기 위해 필요한 모든 이벤트들을 처리하는 함수이다
============================================================================
번외1
ord(char) : char문자의 unicode값을 리턴
chr(int) : 해당 숫자의 char문자를 리턴
# ord(char), chr(int)
print(ord('A'))
print(chr(65))
#result
65
A
번외2
스코핑룰(scoping):
파이썬에서 사용되는 함수, 클래스 등이 선언되면 변수를 사용하게 되는데
선언한 변수를 저장할 때 네임스페이스에 저장하고 호출한다.
이 때 네임스페이스 영역의 우선순위에 따라 호출되어지는 룰을 말한다.
파이썬의 네임스페이스는 세가지로 분류된다. 변수가 호출되는 우선순위를 약어로 LGB규칙
Local : 함수 내부에 선언될 때의 영역
Global : 함수 외부에 선언될 때의 영역
Built-in : 내장함수의 영역
# 스코핑룰, LGB규칙
lgb = "Global"
def lgb_test():
lgb = "Local"
print(lgb)
lgb_test()
print(lgb)
#result
Local
Global
'데이터과학자 - 강의 > python' 카테고리의 다른 글
210428 python day-09 : 상속 (0) | 2021.04.28 |
---|---|
210427 python day-08 : 클래스 (0) | 2021.04.27 |
210423 python day-06 : 제어문, 함수 (0) | 2021.04.23 |
210422 python day-05 : 제어문 (0) | 2021.04.22 |
210421 python day-04 : 시퀀스, 입출력 (0) | 2021.04.21 |