반응형

**함수

1.매개변수가 있는 함수

=>매개변수가 있는 경우 매개변수의 이름만 나열 하면 됩니다.

 

=>매개변수가 있는 함수를 호출할 때는 기본적으로 매개변수를 전부 대입해서 호출해야 합니다.

 

=>매개변수는 순서대로 대입해야 하는데 매개변수 이름과 함꼐 대입하면 순서를 변경해서 대입해도 됩니다.

대다수의 경우 첫번째 매개변수는 핵심이 되는 매개변수일 가능성이 높기 때문에 이름없이 대입하고 두번째 매개변수부터 이름과 함께 대입합니다.

 

#data cnt 만큼 출력하는 함수

def disp(data,cnt):

    for i in range(0,cnt,1):

        print(data)

 

#함수 호출 -매개변수 2개를 순서대로 대입해서 호출

disp('python',3)

 

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

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

 

데이터 분석할 경우 햇갈리는 것:

numpy array : 값만 있는 것->머신런닝

pandasdataframe  : 통계 시각화 컬럼이름과 데이터

                       예를 들면 평균시 어떤 평균인지 알아야 한다.

둘다 2차원 배열 이다.

 

#disp('python') #매개변수 개수가 부족해서 예외

#disp(3,'python') #자료형 예외

 

#매개변수의 순서를 변경해서 대입

disp(cnt = 3, data = 'Java')

 

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

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

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

기본값이 있는 매개변수 뒤에 기본값이 없는 매개변수는 올 수 없습니다

 

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

함수 내에서는 tuple 로 취급합니다.

이 매개변수는 반드시 마지막에 설정되어야 합니다.

 

=>매개변수 앞에 **을 붙이면 dict가 됩니다.

이 매개변수에 데이터를 대입할 때는 key = value형식으로 대입해야 합니다.

**이 붙는 매개변수를 가진 함수를 사용할 때는 document를 잘 읽어보고 사용해야 합니다.

그래프를 그리는 함수들이 이 형태의 매개변수를 가지고 있는 경우가 많습니다.

적절한 옵션들을 찾아서 사용해야 합니다.

#cnt에 기본값이 1이설정된 함수:

#cnt를 생략하면 1

def display(data,cnt=1):

    for i in range(0,cnt,1):

        print(data)

 

display('c++')

 

#sum함수의 도큐먼트 확인

help(sum)

start0이다.

 

#max함수의 도큐먼트 확인

help(max)

몇개를 주던 가장 큰값을 준다.

 

#max함수의 도큐먼트 확인

#help(max) #max 3번째 매개변수는 *이 붙어서 몇개를 대입해도 됩니다

print(max(20,10,40,50))

print(max(20,10,40,50,89,87))

 

# **이 붙은 매개변수는 key = value형태로 여러 개 대입이 가능

def createurl(server, port, file, **param):

    querystring =''

    for key in param:

        querystring = querystring+key +'=' +param[key] +'&'

 

    url = server +':' +port +'/' +file+'?' +querystring

    print(url)

createurl('211.183.6.60' ,'9000' ,'index.html',id='ggangpae1',pw='1234')

 

2. return

=>함수의 수행을 종료하고 호출한 곳으로 돌아가는 명령어

=>return 할 때 데이터르ㄹ 같이 가지고 갈 수 있습니다.

return뒤에 가지고 갈 데이터를 입력하면 데이터를 가지고 돌아값니다.

기본적으로 return1개만 가능합니다.

2개 이상 리턴하고자 하는 경우에는 (튜플),[리스트],{Set이나 DICE} 형태고 묶거나 나중에 나오은 CLASS, INSTANCE를 만들어서 리턴해야 합니다.

=>파이썬은 튜플의 경우는 변수에 나누어서 저장이 가능합니다.

변수나열 = (튜플)

튜플의 데이터를 순서대로 변수에 대입합니다.

변수의 개수와 튜플의 데이터가 개수가 다른 경우에는 마지막 변수에 튜플의 모든 데이터를 대입합니다.

 

python은 튜플 혹은 dict로 많이 준다. 쪼개서 하면 된다.

 

def reg(data):

    slope = 3

    intercept = 7

    #결과를 tuple로 리턴

    return (slope, intercept)

r = reg(10)

#튜플을 한꺼번에 저장

print(r)

print(type(r))#자료형을 확인 하기

#튜플을 나누어서 저장

slope, intercept = reg(10)

print('slope', slope)

print('intercept', intercept)

 

항상 매개변수는 뭐 잇을 가 확인

dir , help, type 등 자주 사용하기

 

3, 재귀함수(recursion)

=>함수가 함수르 호출하는 구조라서 느리고 메모리 사용량도 많지만 코드를 간결하게 만들 수 있는 장점이 있습니다.

 

피보나치 수열

1,1,2,3,5,8,13,...

첫번째와 두번째는 무조건 1

세번쨰 부터는 앞 2개의 합

 

def fibonacci(n):

    if n == 1 or n ==2:

        return 1

    else:

        return fibonacci(n-1) + fibonacci(n-2)

 

print(fibonacci(9))

 

하노이의 탑을 연습하기

감독관 배정

 

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

=> 함수를 변수에 저장할 수 있고 리턴할 수 있고 매개변수로 대입할 수 도 있습니다.

함수가 일급 객체 안되는 것이 java 이다.

변수에 저장할 수도 있어니깐 매개변수에 저장할 수 도 있다

=>함수형 프로그래밍을 사용할 때와 closure를 만들기 위해서 사용합니다.

=>함수형 프로그래밍은 데이터의 모임(list,tuple, set, dict)에 하나의 함수를 적용하는 프로그래밍

=>closure는 함수가 함수를 리턴해서 함수 내부의 데이터를 함수 외부에서 변경하도록 하는 프로그래밍

 

5.람다(lambda)

=>파이썬에서는 이름없는 한 줄 짜리 함수

lambda매개변수 나열: 리턴할 내용

def addint(x,y):

    return x+y

 

#위의 함수를 람다 식으로 표현

lambdaadd = lambda x, y : x+y

print(lambdaadd(100,200))

 

 

=>람다 함수도 매개변수의 초기화 가능

=>한줄 짜리 함수라서 변수 선언은 안됩니다.

 

6.함수형 프로그래밍

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

1)map

=>데이터의 모임과 함수를 매개변수로 받아서 데이터의 모임에 함수를 전부 적용해서 결과를 데이터의 모임으로 리턴해주는 함수

=>대입된느 함수는 1개의 매개변수를 가져야 하고 반드시 데이터를 리턴해야 합니다.

numpy가 이행태로 연산한다.

 

 

#반복문을 사용할 경우

2020-02-18 19:18:05.056642

2020-02-18 19:18:05.068582

 

2020-02-18 19:18:45.946949

2020-02-18 19:18:45.962906

 

#함수형 프로그램의 맵을 사용할 경우

2020-02-18 19:20:24.933999

2020-02-18 19:20:24.937989

 

#10000개의 데이터에 1씩 더한 결과롤 list를 만들기

 

#반복문을 이용한 방법

def inc(x):

    return x+1

 

collection = [i for i in range(0,100000,1)]

 

import datetime

print(datetime.datetime.now())

result = []

for i in collection:

    #result.append(i+1)

    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 =[10,30,21,32, 29]

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

 

3)reduce

=>데이터의 모임과 함수를 가지고 누적 연산을 수행해서 결과를 리턴하는 함수

=>결과가 1

=>대입되는 함수는 매개변수가 2개이고 결과를 리턴하는 함수이어야 합니ㅏㄷ.

매개변수는 처음에는 첫번째와 두번째를 데이터를 가지고 수행을 하고 그 다음부터는 앞 연산의 결과를 가지고 다음 데이터와 연산

앞의 값으로 계산

count하는 것  개수 새는 것

=>python에서는 reduce가 내장함수에서 빠지고 functools패키지의 함수로 변경

 

 

 

 

7,pass

=>클래스나 함수의 내용을 작성하고자 할 때 사용하는 예약어

=>내용이 없는 함수나 클래스를 만들 때 사용합니다.

def addint(x,y):

    return x+y

#reduce는 누적 연산을 해서 결과를 리턴하는 함수

import functools

print(functools.reduce(addint, li))

 

 

8.__doc__

=>함수 내부에 __doc__속성에 문자열을 대입하면 help(함수) 했을 때 출력이 됩니다.

=>파이썬이나R에서 함수를 만들어서 배포하고자 할 때 이 속성에 이 함수의 기능을 설명을 해야 합니다.

배포할 때는 한글로 사용하면 안된다.

 

 

 

 

 

 

 

 

 

반응형

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

Python-14  (0) 2020.11.03
python-13  (0) 2020.10.26
python-11  (0) 2020.10.26
python-10  (0) 2020.10.26
Python-9  (0) 2020.09.12

+ Recent posts