본문 바로가기
Python

[파이썬] function 함수 2

by AI미남홀란드 2021. 1. 16.
728x90

파이썬 프로그램 저는 아나콘다 -> 스파이더를 쓰고 있습니다. 구글에 아나콘다 검색후 설치해주고 스파이더로 쓰시면 됩니다. cmd 창에서프로그래밍을 쓸 수 있도록 해주는 체크 박스도 클릭해주는게 좋습니다 :)

 

함수 호출 ( 실행 )

함수이름 ( 매개 변수 )

=> return이 있는 경우에는

데이터 이름 = 함수이름 ( 매개변수 )

 

5. 함수 만드는 이유

=> 자주 사용하는 코들흘 하나의 이름으로 묶어두면 여러 번 코드를 작성 할 필요가 없어집니다.

유지보수가 편리 합니다

 

=> 코드를 블럭 단위로 나누어노면 가독성이 좋아집니다.

 

억대 연봉을 잘 받는 개발자 들은 함수를 잘 짠다고 한다..

 

(쉽게 생각하면 다른 사람이 보고도 읽기 쉬워야 한다 내가 만든 함수를 다른 사람이 보고 수정을 해야 하는 경우가 온다면 알아보기 쉽게 적어 놓기 위해 함수를 만들기도 한다)

 


여담으로  최근 코로나-19 2020 미국의 실업급여 지급이 어려움을 겪고 있다 왜냐 이번 만큼 대량으로 실직자가 발생하여

실업급여를 신청 하는 사례가 처음이기 때문이다 미국은 아직도 코볼 기반의 프로그래밍으로 실업급여 프로그램을 짜놔서 제대로

지급자체가 어렵다고한다. 하지만 IT 강국 대한민국은 자바 기반으로 프로그래밍을 윗 선이 시켜서 개선 했다고 하지만 킹리적 결과였다... 나도 경험해봤지만 정말 빠르다.... 국뽕이 차오른다...


#func1 이라는 함수를 선언

def func1()

#range(1,10) : 1~9 1에서 9까지 1씩 증가하는 모임을 생성

#for는 데이터의 모임을 순서대로 접근해서 임시 변수에 대입하고 # 블럭안의 내용을 실행 합니다.

#블럭 안의 내용을 실행합니다.

for i in range(1,10)

print(i)


def func1():
    for i in range(1,10):
        print(i)
        
       
func1() // 함수 호출

 

실행 결과

1

2

3

4

5

6

7

8

9

 

이런식으로 위에서 짜둔 반복문이 나오는 것을 확인 할 수 있다


# 함수 호출  - 함수가 만들어진 곳을 찾아가서 함수의 내용을 수행합니다.

 

6. return

=> 함수가 작업을 수행하고 원래 자리로 돌아가는 것이다.

=> 돌아갈 때 하나의 데이터를 가지고 돌아갈 수 있다.

=> 

 

ex) def func2():

return 100

 

func2()

--> 현재 리턴에 있는 함수는 호출만 하면 아무일도 일어나지 않는다.

현재는 100이 마지막 문장이라서 출력이 되는 것처럼 보인다.

그래서 리턴을 쓸때는 다른 변수를 하나 만들어 주어서 그 값을 넣어주어 출력시켜주면 된다

nba= func2()

print(nba)

>> 실행값이 100이 나오는 것을 볼 수 있다.

함수 호출 후 리턴되는 값을  nba 라는 변수에 넣는다.

 

*****함수확인 help(함수)를 치면 값이 출력되는데 함수에 뭐가 들어가야 되는지 나온다


max( 100, 200 ,300)                      result =max(100,200,300)                              k=(100,200,result)

max( 100, 700, 300)                        max(100,700,300)                                        print(k)

위에 맥스는 출력되지 않는다..   -->       result에 대입 후 최댓값 출력                 -->       300이 출력되는 것을 확인 할 수 있다

                                               300이 출력되는 모습을 확인 가능하다.

 

7. argument

=> 매개 변수라고도 하기도 하고 파리미터 라고 한다.

=> 함수를 호출할 때 넘겨주는 데이터

--> scala: 1개의 데이터 - 숫자, bool

저장하고 있는 값이 넘어갑니다.

함수 내에서 데이ㅣ터를 변경해도 원래의 데이터는 이전 값을 유지합니다.

 

==> vector: 0개 이상의 데이터 - list[데이터 나열], tuple(데이터 나열) , set{데이터나열} , dict{이름:값, , 이름:값 ...}

데이터가 넘어가는 것이 아니고 데이터가 저장된 곳의 참조가 넘어갑니다. 함수내에서 데이터를 변경하면 원래의 데이터도 변경됩니다.

return이 없는 함수이면 원본 데이터를 변경 한는 함수 입니다.

 

ex)

def func3(x): //x라고 () 안에 넣어주는걸 매개 변수라 한다

for i in range(1,x): // 1부터 x까지 순서대로 출력

print(i)

 

func3(10) //x자리에는 10 이 대입되어 1에서 10까지 반복문이 출력이 된다

 

# call by value : 함수에게 값을 넘겨주는 것 - 파이썬에서는 스칼라 데이터는 무조건 값이 넘어 값니다.

def callbyvalue(x):
    x=100
    print('x=',x).   //x -> 1000 의 값이 저장되어 100
   
i=20
callbyvalue(i). //i 에 값이 저장 되어 20
print('i=',i)

결과 : x=100

          i=20

 

#call by reference : 함수를 호출할 떄 데이터의 참조를 넘기는 것 입니다.

파이썬에서는 데이터의 모임을 넘기면 참조가 넘어갑니다

함수 안에서 데이터를 변경하면 원본 데이터도 변경이 됩니다.

 

def callbyreference(x):

 #xdml 0번째 데이터를 200으로 수정

x[0]=200 //x의 0번지 자리에는 200이 저장되어있다

 

li =[100,200,300]

print(li) // 100,200,300 의 모습이 출력된다

callbyreference(li) // 콜바이레퍼런스의 함수에는 0번째 주소 자리에는 이미 200의 값이 들어있다 

print(li) // 200 ,200 , 300 이 출력되는 모습을 보여줄 것이다.

 

2) 매개변수의 기본값

=> 매개변수를 만들 때 기본값을 설정할 수 있는데 기본값은 매개변수 이름 = 값의 형태로 만듭니다.

=> 매개변수에 기본 값이 있으면 생략하고 호출해도 됩니다.

3) iterable

=> 데이터의 모임을 iterable 또는 collection 이라고 합니다.

=> iterable 인지 아닌지 확인하는 방법은 dir(데이터) 을 호출했을 때

 

result = sum([10,30,53])
print(result)
result=sum([10,30,53],10)
print(result)

 

* 나도 딱딱하게 장황하게 어렵게 글을 읽는 것을 좋아하지 않는다 쉽게 생각하면

콜바이 벨류는 이름 처럼 값이 넘어가는 것이고

콜바이 레퍼런스는 주소에 의해 전달 되는 것이다.

 

4) 함수를 호출할 때 매개변수이름과  값을 같이 대입할 수 있습니다.

함수이름 (매개변수이름 = 값) 의 형태로 호출할 수 있습니다.

매개변수의 순서를 변경 할 수 있습니다

첫번째 매개변수는 이름을 생략하고 두번째 매개변수 부터는 이름과 함께 


result = sum([100,200,300],start=0)
print(result)

 

5) 매개변수를 개수에 상관없이 대입

=> 매개 변수 앞에 *을 추가하면 개수에 상관없이 매개변수를 대입할 수 있다.

 

10. pass

=> 함수나 클래스가 아무런 동작도 수행하지 않아야 하는 경우에 사용

= >추상 클래스나 함수를 만들 때 사용합니다.

나중에 내용을 만들어서 사용할 목적으로 생성

 

11. 도움말 생성

=> 함수의 가장 상단에 """ 도움말 """" 해도 되고 함수를 만든 다음에 함수이름 .__doc__="도움말" 로 작성해도 됩니다.

=> 패키지를 만들어서 

 

def func(): 

"""

이 함수는 내용을 출력하는 함수입니다.

"""

    print("함수")

 

help(func)

 

help on function func in module __main__:

 

func()

     이 함수는 내용을 출력하는 함수입니다.

 

12. 함수형 프로그래밍

=> 데이터를 다루는 일을 하는 프로그램을 만들 때 중요

1) Lamda

=>이름이 없는 한 줄 짜리 함수

lamda 매개변수 나열 : 수행할 내용

=>수행할 내용은 보통 return 하는 문장

lamda x : 

 

def func(a,b):            f = lamda a,b : a+b

return a+b                    r=f(10,30)

람다 표현식 ------>       

 

2) map - reduce

=> 데이터가 나누어져 저장되어 있을 때 데이터를 모아서 연산을 하는 것이 , 아니고 데이터가 존재하는 곳에서 연산을 한 후 결과를 모으는 방식 

=> map : 매개변수가 1개이고 리턴을 하는 함수를 대입해서 데이터를 변환하는 작업을 수행합니다.

 

==> filter : 매개변수가 1개이고 bool 데이터를 리턴하는 함수를 대입해서

데이터를 골라내는 작업을 수행합니다

 

==>reduce : 매개변수가 2개이고 결과를 리턴하는 함수를 대입해서 누적 계산을 수행하는 작업을 수행합니다.

list(함수명(함수,데이터))

 

# 데이터 모임 생성

li = [100,200,300,400,500]

def f(x):
    return x+1
#Li에 f라는 함수를 수행
result=list(map(f,li))
print(result) // 결과는 101,201,301,401,501

 

 

# 매개변수가 300보다 큰지 확인하는 함수

def g(x):

return x>=300

result= list(filter(g,li) // 300보다큰 400 , 500 을 출력시켜준다.

 

예제 ) 'bit' 라는 글자간 들어간 코인 이름을 출력해주세요

 

data= ["ada", "stella", "bitcoin" , "reple" , "bitcoincash", "ritecoin", "SNT"]
keyword= input("오늘 매수 할 코인을 입력하세요:")

def f(x):
    return x.find(keyword)>=0
result=list(filter(f,data))
print(result)

 


13. 중첩함수

=> 함수 안에 만들어진 함수

=> 내부에 있는 함수는 외부에서는 호출할 수 없다

내부에서 만들어진 함수는 함수내부에서만 호출할 수 있다.

 

1) nonlocal

=> 내부 함수에서는 자신을 포함한 함수에 만들어진 변수를 바로 호출할 수 없습니다.

=> 내부 함수안에 nonlocal 과 함께 변수이름을 다시 기재해서 사용해야 합니다.

 

2) closure

=> 함수 안에서 함수를 리턴해서 함수 외부에서 함수 내부의 데이터를 변경 할 수 있도록 해주는 것

 

ex)

n=10

def func():

    //func 안에서만 사용하는 n을 생성
    n=20

    //n을 출력하면 가까운곳에 있는 n을 찾아옵니다.

    print("n=",n)
   // 만약에 함수외부에 있는 n을 사용하고 싶으면 global 을 붙히면 된다.
func()

#func에 만든 n이 아니고 func 바깥쪽에서 만든 n을 사용을 합니다.

#블록 안에서 만든 데이터는 블록이 끝나면 없어집니다.

print("n=",n)

 

** 바깥쪽에있는 값을 호출 하고 싶으면 global로 선언해준다.

global n

n을 쓰면 바깥에 있는 n의 값이 내부함수로 호출되어 들어온다. 

-> 그 뒤에는 n이라는 변수를 선언 할 수 가 없게된다.

 

 

#함수 내부에서 함수의 외부껏을 쓰고싶을땐

def outer():

n=10 

    def inner():

       print("내부 함수")

       nonlocal n

       print('n=' , n)

   inner()

outer()

# 함수 외부에서 함수 내부의 데이터를 쓰고 싶을땐

def outer():

n=1

def inner():

 n=n+1

print(n)

return inner

 

 

외부에 함수를 호출하려면 nonlocal 명령어를 써서 n을 선언해주면 가능하다.

 

# 내부 함수를 호출하여 데이터를 표현할때

def out():
    b=1
    
    def inn():
        nonlocal b //위에처럼 바깥에서 호출하기 논로컬을 작성해주어야 에러없이 돌아간다
        b=b+1
        print(b)
    return inn()

 

15. 함수의 중요한 내용

=> 함수의 도움말을 보고 매개변수와 함께 확인을 해서 함수를 호출할 수 있어야 하고 return이 있는지 확인해서 이 데이,터를 어떻게 사용할 것인지가 가장 중요합니다.

=> 이 부분이 되면 중첩함수 , 재귀함수 등을 그 다음에 보면 됩니다.

 


 

728x90

'Python' 카테고리의 다른 글

[파이썬] 객체지향 프로그래밍  (0) 2021.01.16
[파이썬] 파이썬의 기본 문법  (0) 2021.01.16
[파이썬] function  (0) 2021.01.10
[파이썬] 반복문  (0) 2021.01.10
앞으로  (2) 2020.12.30