ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 문법 기초 14 - 중첩 함수, 함수의 주소 호출
    Python 2022. 10. 22. 16:01

     

    # 함수 만들기
    # def 함수명(매개변수,...): ~   매개변수가 있을 수도있고 없을 수도 있다.
    
    print('뭔가를 하다가...')
    
    def DoFunc1(): # 함수의 생성
        print('DoFunc1 수행')
        #return None # 생략한다. 생략해도 반드시 리턴된다.
        
    print('뭔가를 하다가 2...')
    DoFunc1() # 함수 호출
    print('뭔가를 하다가 2...')
    DoFunc1() # 함수 호출
    print(DoFunc1) // 주소 호출
    DoFunc2 = DoFunc1 # 주소 치환
    DoFunc2()
    print(DoFunc1()) # 리턴을 생략했으므로 None 이 반환 됨
    
    
    <console>
    뭔가를 하다가...
    뭔가를 하다가 2...
    DoFunc1 수행
    뭔가를 하다가 2...
    DoFunc1 수행
    <function DoFunc1 at 0x0000029BA2A3A160>
    DoFunc1 수행
    DoFunc1 수행
    None

    함수를 만들고 필요할 때마다 호출할 수 있다.

    함수를 호출할 때, () 를 빼고 호출하게 되면 함수의 주소를 호출하는 것이다.

    함수를 치환하여 똑같은 함수를 만들 수도 있다.

    return 은 보통 생략하며, 생략해도 반드시 리턴된다.

    print() 로 함수를 호출하게 되면 None 이 리턴된다.

     

    def doFunc3(para1, para2):
        # pass pass 를 사용하면 함수를 호출해도 내용이 pass 되므로 없다는 소리와 같음
        result = para1 + para2
        # print(result)
        return result
    
    print(doFunc3(10, 20))
    aa = doFunc3(10, 20)
    print(aa)
    print(id(doFunc3), doFunc3, doFunc3(1, 2))
    print('현재 파일(모듈)이 사용 중인 객체(함수) 목록 : ', globals())
    
    print(doFunc3('대한','민국'))
    # print(doFunc3('대한',1))  err 타입이 맞지 않기때문에
    # print(doFunc3(1))  missing 1 required positional argument 매개변수를 1개밖에 주지 않음
    
    
    <console>
    30
    30
    2867471819248 <function doFunc3 at 0x0000029BA2A3A1F0> 3
    현재 파일(모듈)이 사용 중인 객체(함수) 목록 :  {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000029BA2586CD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\JEONGYEON\\Desktop\\Python\\에어컨 빵빵한 에이콘 Python\\pro1\\pack2\\func2.py', '__cached__': None, 'DoFunc1': <function DoFunc1 at 0x0000029BA2A3A160>, 'DoFunc2': <function DoFunc1 at 0x0000029BA2A3A160>, 'doFunc3': <function doFunc3 at 0x0000029BA2A3A1F0>, 'aa': 30}
    대한민국

    매개변수를 사용할 경우 함수에 필요한 값을 넣어줌으로써 값을 받는다.

    함수에서 () 가 없으면 주소를 이야기하며, ()가 있으면 호출하는 의미이다.

    현재 사용하고 있는 객체 목록 확인한다. 자신이 만든 함수도 포함되어있다.

    함수 호출 시 매개변수의 갯수대로 주어야 하며 타입은 맞게 주어야 한다.

     

    def doFunc4(arg1, arg2):
        if (arg1 + arg2) % 2 == 1:
            return // 실행하지 않고 넘긴다.
        else:
            aa = doFunc5(arg1, arg2) # 함수 내에서 다른 함수 호출
            print(aa)
    
    def doFunc5(arg1, arg2):
        return arg1 + arg2
    
    doFunc4(5, 6) // 값이 없음
    doFunc4(5, 5) // 10
    
    
    <console>
    10

    함수 내에서 다른 함수를 호출할 수 있다.(중첩함수)

    함수 내에서 if 문 사용하였다. return 을 사용하면 함수에서 탈출하는 의미이다.

     

    def swapfunc(a, b):
        return b, a  # return 은 한가지밖에 리턴하지 못하는데
        # return (b, a)  tuple type 으로 묶여 하나의 값으로 리턴한다.
        # return [b, a]   그러므로 왼쪽의 리턴 값은 하나로 봐야한다.
    a = 10; b = 20
    print(swapfunc(a, b))
    
    
    <console>
    (20, 10)

    return 은 한가지의 값밖에 리턴하지 못하는데 위의 경우에는 tuple type 으로 묶여 하나의 값으로 리턴한다. 그러므로 위쪽의 리턴 값은 하나로 봐야한다.(파이썬에서만 유효)

    list, set 타입으로도 반환 가능하다.

     

    def func1():
        print('func1 함수 멤버')
        def func2():
            print('func1의 내부 함수 인 func2 멤버')
        func2()
        
    func1()
    
    
    <console>
    func1 함수 멤버
    func1의 내부 함수 인 func2 멤버

    내부함수로서 위처럼 정리할 수 있다. 하지만 계속 내부함수로서 들어가면 안 되는데 이는 콜백지옥으로 이어질 수 있다. 그러므로 1,2 가지만의 내부함수를 설정하는 것이 좋다.

     

    # if 조건식 안에 함수 사용
    def isOdd(para):
        return para % 2 == 1
    
    print(isOdd(5))
    print(isOdd(6))
    mydict = {x:x*x for x in range(11) if isOdd(x)}
    print(mydict)
    
    
    <console>
    True
    False
    {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}

    for 문과 if 문을 사용하여 0~9을 반복문을 돌려서 조건문을 통해 dict 타입으로 출력했다.

    인자로 짝수를 넣으면 0이되므로 False가 나오고 홀수를 넣으면  값이 나온다.

    'Python' 카테고리의 다른 글

    Python 문법 기초 15 - random 함수  (0) 2022.10.22
    function(함수) 예제  (0) 2022.10.22
    Python 문법 기초 13 - function(함수) 내장함수  (0) 2022.10.22
    Python 문법 기초 12 - function(함수) 특징  (0) 2022.10.22
    for 문 예제  (0) 2022.10.22

    댓글

Designed by Tistory.