함수
기본함수
함수명 (파라미터2, 파라미터2, ...)
반복되는 코드를 묶음으로 효율적으로 코드를 작성
def : 함수 선언
return
- 결과 반환 값 지정
- 함수의 종료 명시
- return만 존재하면 None 반환
- mutiple return 가능
parameter
- 함수에 전달되는 입력(input)
- default parameter : 기본 인자
- 가장 뒤에 선언
argument
함수에 입력으로 전달하는 값
함수에 파라미터 개수가 불특정할 때 사용 가능
*args
- 함수 호출시 여러개의 데이터를 한꺼번에 받아올 때 사용
- 파라미터를 튜플 형태로 전달
**kwargs
- 함수 호출시 여러개의 키워드 데이터를 받아올 떄 사용
- 파라미터를 딕셔너리 형태로 전달
Docstring
함수에 대한 설명
- <함수명>?
- <함수명>??
- help(함수명)
- print(함수명.doc)
- dir(함수명)
def echo(msg):
"inpur docstring here !"
return msg
Scope
global variable : 전역변수
- 가장 상단에서 정의되어 프로그램 종료 전까지 유지
- 상수(변수명 대문자 표기)를 주로 선언해서 사용
local variable: 지역변수
- 특정 코드 블록에서 선언된 변수
- 같은 이름의 경우 전역변수보다 우선순위 높음
Inner Function
- 함수 안에서 선언된 함수
- 자원을 효율적으로 사용
- 지역함수
Lambda Function
- 단일문으로 표현되는 익명함수
- 파라미터를 받아 바로 리턴하는 함수를 줄여서 작성
- 리소스를 적게 사용 (1회성)
def test(func, *args, **kwargs):
print(args)
print(kwargs)
test(lambda x: x**2, 1, 2, 3, who="Robert", what="IronMan")
(1, 2, 3)
{'who': 'Robert', 'what': 'IronMan'}
Map, Reduce, Filter
- map : 리스트 데이터의 각 요소에 함수를 실행하고 나온 결과를 새로운 리스트로 반환
- filter : 특정 조건을 만족시키는 요소만 남기는 함수
- reduce : 차례대로 앞 2개의 원소 연산 결과가 다음 연산의 입력으로 진행되어 최종 출력이 한개
names = ["Kim python", "lee summer", "Park soojin", "Kim data", "Lee campus", "HONG Lahong"]
# Q1. map을 이용하여 name의 성만 출력
result1 = list(map(lambda name :
name.split(" ")[0].upper()[0] + name.split(" ")[0].lower[1:], names))
# Q2. filter 이용해서 성이 Kim인 사람의 이름만 결과로 출력
family_name = "Kim"
result2 = list(filter(lambda name :
name.split(" ")[0] == family_name, names))
# Q3. reduce를 이용하여 사람 이름의 길이가 가장 긴사람 1명을 출력
from functools import reduce
result3 = reduce(lambda name1, name2 :
name1 if len(name1) > len(name2) else name2, names)
result1 = ['Kim', 'Lee', 'Park', 'Kim', 'Lee', 'Hong']
result2 = ['Kim python', 'Kim data']
result3 = 'HONG Lahong'
Decorator
- 코드를 바꾸지 않고 함수의 기능 추가 및 수정 가능
- 함수에서 공통된 코드 부분을 따로 묶어 관리할 수 있는 장점
- 지역함수와 *args, **kwargs 구현
Q. 데코레이터 함수를 이용해서 함수에 아이디를 입력하면 아이디가 저장되어 있으면 패스워드를 알려주는 코드를 작성하세요.
admin_ls = ["IronMan", "Thor"]
pw = "Avengers"
def admin(func):
def wrapper(*args, **kwargs):
is_admin = False
result = func(*args, **kwargs)
if result in admin_ls:
print("allow permission!")
print("Pw: ", pw)
is_admin = True
else:
print("Not admin!")
return is_admin
return wrapper
@admin
def input_id():
return input("Insert ID: ")
# input_id()= "Lahong"
Insert ID: Lahong
Not admin!
False
# input_id()= "IronMan"
Insert ID: IronMan
allow permission!
Pw: Avengers
True
'PYTHON > Basic' 카테고리의 다른 글
operating system (0) | 2019.12.28 |
---|---|
module (0) | 2019.12.28 |
loops (0) | 2019.12.28 |
conditions (0) | 2019.12.28 |
operators (0) | 2019.12.28 |