파 이 썬 진급 (1)

6249 단어 python 진급
함수 식 프로 그래 밍 과 고급 함수
개념 과 실례 설명:http://www.cnblogs.com/kym/archive/2011/03/07/1976519.html
고급 함 수 는 함 수 를 매개 변수 로 하 는 것 이다.
예:
def test(x,y,f):
    return f(x)+f(y)

호출 할 때 f 는 함수 abs 를 입력 합 니 다. 예 를 들 어:
test(-5,10,abs)#ads    

실행 과정: 
abs(-5)+abs(10)

결 과 는: 15 제곱 근 math. sqrt 와 같은 다른 함수 가 들 어 오 면
import math
test(4,16,math.sqrt)

실행 결과: 2+4=6
map 함수
map 는 python 에 내 장 된 고급 함수 입 니 다. 함수 f 와 list 를 받 아들 이 고 f 를 순서대로 list 에 작용 하여 새로운 list 를 되 돌려 줍 니 다.1. list = [1, 2, 3, 4, 5, 6, 7, 8] list 제곱 을 구 한 새로운 list
먼저 제곱 을 구 하 는 함 수 를 정의 하고 map 에 들 어가 면 됩 니 다.
def f(x):
    return x*x
list=[1,2,3,4,5,6,7,8]
print map(f,list)

결과: [1, 4, 9, 16, 25, 36, 49, 64]
메모: map () 함 수 는 기 존의 list 를 바 꾸 지 않 고 새로운 list 를 되 돌려 줍 니 다.list 는 모든 데이터 형식 일 수 있 지만 들 어 오 는 함수 f 가 이러한 데이터 형식 을 처리 할 수 있 도록 해 야 합 니 다.
2. 사용자 이름 을 이니셜 대문자 로 처리
['adam','LIsA','BarT']
def format(s):
    return s[0].upper()+s[1:].lower()
list=['jAck','HELLOKITTY','PeteR']
print map(format,list)

결과: ['Jack', 'Hellokitty', 'Peter']
reduce () 함수
reduce () 함 수 는 python 에 내 장 된 고급 함수 입 니 다. reduce () 함수 가 받 아들 이 는 매개 변 수 는 map () 와 유사 합 니 다. 하나의 함수 f, 하나의 list 이지 만 실행 과 map () 가 다 릅 니 다. reduce () 가 들 어 오 는 함수 f 는 두 개의 인 자 를 받 아들 여야 합 니 다. reduce () 는 list 의 모든 요소 에 함 수 를 반복 적 으로 호출 합 니 다. f, 최종 결과 값 을 되 돌려 줍 니 다.
예:
def f(x,y):
    return x+y

호출
reduce(f,[1,3,5,7,9])

실행 과정 은:
계산 첫 두 요소: f (1, 3), 결과: 4
계산 결과 와 다음 요소: f (4, 5), 결과: 9
계산 결과 와 다음 요소: f (9, 7), 결과: 16
계산 결과 와 다음 요소: f (16, 9), 결과: 25
계산 종료 결과: 25
reduce () 는 세 번 째 매개 변 수 를 선택 가능 한 매개 변수 로 받 아들 일 수 있 습 니 다.
reduce(f,[1,3,5,7,9],100)

이때 의 1 차 계산 은 f (100, 1) 로 바 뀌 었 다.
마지막 결과: 125
3. reduce () 함 수 를 이용 하여 축적, 2 * 4 * 5 * 7 * 12
def f(x,y):
    return x*y
list=[2,4,5,7,12]
print reduce(f,list)

결과: 3360
filter () 함수:
filter () 함 수 는 python 에 내 장 된 또 다른 고급 함수 입 니 다. 하나의 함수 f, 하나의 list 를 받 아들 입 니 다. 함수 f 의 역할 은 모든 요 소 를 판정 하고 true / false, filter () 는 판단 결과 에 따라 부적 합 한 요 소 를 자동 으로 걸 러 내 고 조건 에 맞 는 요소 로 구 성 된 새로운 list 를 되 돌려 줍 니 다.
4.[1, 4, 6, 7, 9, 12, 17]   짝수 삭제
def f(x):
    return x%2==1
list=[1, 4, 6, 7, 9, 12, 17]
print filter(f,list)

결과: [1, 7, 9, 17]
5. None 또는 빈 문자열 삭제
def notEmpty(s):
    return s and len(s.strip())>0
list=['test', None, '', 'str', '  ', 'END']
print filter(notEmpty,list)

결과: ['test', 'str', 'END']
6. 1 ~ 100 의 제곱 근 을 걸 러 내 는 것 은 정수 이다.
import math
def f(x):
    return int(math.sqrt(x))*int(math.sqrt(x))==x
list=range(1,101)
print filter(f,list)

결과: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
sorted () 함수 사용자 정의 정렬 함수
sorted ([2, 1, 3, 4, 19, 5]) 결과: [1, 2, 3, 4, 5, 19]
사용자 정의: x 가 y 앞에서 되 돌아 오 면 - 1;뒤에서 1 되 돌리 기;똑 같이 0 으로 돌아 가기;
역순 정렬:
def f(x,y):
    if x>y:
        return -1
    if x<y:
        return 1
    return 0
list=[5,3,1,6,8,4]
print sorted(list,f)

결과: [8, 6, 5, 4, 3, 1] 반환 함수:
python 함 수 는 int, str, list, dict 등 데이터 형식 을 되 돌려 줄 뿐만 아니 라 함수 도 되 돌려 줄 수 있 습 니 다.
예: 함수 f () 를 정의 합 니 다. 함수 g () 를 되 돌려 줍 니 다.
def f():
    print 'f......'
    def g():
        print 'g......'
    return g
g1=f();#   g()   g1
g1();#  g1

결과:
>>> f...... g......
6. 함 수 를 만 들 고 list 를 받 아들 여 곱 하기 를 계산 합 니 다.
def calc_prod(lst):
    def lazy_prod():
        def f(x, y):
            return x * y
        return reduce(f, lst, 1)
    return lazy_prod
f = calc_prod([1, 2, 3, 4])
print f()

닫 기:
함수 내부 에서 정 의 된 함 수 는 외부 에서 정 의 된 함수 와 같 습 니 다. 다만 외부 에 접근 할 수 없습니다.
def calc_sum(lst):
    def lazy_sum():
        return sum(lst)
    return lazy_sum

이와 같은 내층 함 수 는 외층 함수 의 인 자 를 인용 한 후 내층 함수 로 돌아 가 는 경 우 를 폐쇄 라 고 한다.
특징: 되 돌아 오 는 함수 가 인용 한 부분 변 수 를 정확하게 사용 하려 면 인 용 된 부분 변 수 는 함수 가 돌아 온 후에 변 하지 않도록 해 야 합 니 다.
예 를 들 어 나 는 세 개의 함 수 를 되 돌려 각각 1 * 1, 2 * 2, 3 * 3 을 계산 할 것 이다.
def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()
print f1()
print f2()
print f3()

결 과 는 9, 9, 9 이 유 는 count () 함수 가 3 개의 함 수 를 되 돌 렸 을 때 이 3 개의 함수 가 인용 한 변수 i 의 값 이 3 이 되 었 기 때문이다.f1, f2, f3 가 호출 되 지 않 았 기 때문에 이때 그들 은 i * i 를 계산 하지 않 았 다. f1 이 호출 되 었 을 때: f1 이 지금 i * i 를 계산 하기 때 문 이지 만 현재 i 의 값 은 3 으로 바 뀌 었 다.
따라서 반환 함 수 는 순환 변 수 를 참조 하지 않 거나 나중에 변화 할 수 있 는 변 수 를 참조 하지 않 습 니 다.
정확 한 예시:
def count():
    fs=[]
    for i in range(1,4):
        def f(j):
            def g():
                return j*j
            return g
        r=f(i)
        fs.append(r)
    return fs
f1,f2,f3=count()
print f1(),f2(),f3()

익명 함수:
고급 함 수 는 함 수 를 매개 변수 로 받 아들 일 수 있 습 니 다. 어떤 때 는 우리 가 표시 할 필요 가 없 는 정의 함수 입 니 다. 함수 에 직접 전달 하 는 것 이 편리 합 니 다. Pytho 에서 익명 함수 에 유한 한 지 지 를 제공 하 였 습 니까? 아니면 map () 함 수 를 예 로 들 어 f (x) = x * x 를 계산 하 였 습 니 다. f (x) 를 정의 하 는 방식 외 에 익명 함수 도 사용 할 수 있 습 니 다. 익명 함 수 는 lambda 키 워드 를 사용 할 수 있 습 니 다.lambda 는 익명 함 수 를 표시 합 니 다. 콜론 앞 에 있 는 것 은 매개 변수 이 고 여러 매개 변 수 는 쉼표 로 분 리 됩 니 다.
제곱:
map(lambda x:x*x,[1,2,3,4,5,6,78,9])
[1,4,9,16,25,49,64,81]

정렬:
print sorted([1,3,9,5,0],lambda x,y:-cmp(x,y))
[9, 5, 3, 1, 0]

익명 함수 되 돌리 기:
>>> myabs = lambda x: -x if x < 0 else x 
>>> myabs(-1)
1
>>> myabs(1)
1




좋은 웹페이지 즐겨찾기