함수 매개변수에 외부함수 포함한 조건 넣을 때 질문 입니다.

조회수 85회

파이썬 함수 질문입니다. 예를 들어 현재 온도를 리턴하는 외부함수 a 가 있고 온도에 따라서 작동하는 함수 b 를 만드는데 있어서

def b (c = True):
    while true:
        if c:
            에어컨을 튼다.
        else:
            에어컨을 끈다.

b( a() > 30 )

라고 만들었을 때, 위처럼 함수실행시 c 매개변수에 a() > 30 을 넣게 된다면 함수 작동시 계속해서 a()함수를 불러와서 상황을 갱신하지 않고 실행당시의 리턴 값으로 매개변수가 고정되게 되어버립니다. 해보니 당연한 결과라는 생각은 들지만..

이것을 온도, 혹은 습도 등으로 조건을 바꾸면서 매개변수에 조건을 전달하고 함수가 실행될때 외부함수의 조건이 함수 b 안에서 계속 갱신되게 만들고 싶은데 어떤식으로 매개변수에 전달해야 하나요? 아니면 다른 방법이 있을까요? 조건을 매개변수에 넣는 식으로 이 문제를 해결 할 수 있는지 궁금합니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    함수와 조건이 바뀔수 있는 구조인데 함수 안에서 확인할 수 있는 형태로 이해했습니다.

    최대한 간단한 구조로 만들어 드리자면

    class B:
        def __init__(self, func, greater_than=None, less_than=None):
            self.func = func
            self.greater_than = greater_than
            self.less_than = less_than
    
        def _check_greater_than(data):
            if self.greater_than:
                return data > self.greater_than
            return True
    
        def _check_less_than(data):
            if self.less_than:
                return data < self.less_than
            return True
    
        def loop(self):
            while True:
                result = self.func()
                if self._check_greater_than(result) and self._check_less_than():
                    print("에어컨을 튼다")
                else:
                    print("에어컨을 끈다")
    
    b = B(a, greater_than=30)
    b.loop()
    

    이렇게 해보시면 어떨까 하네요

    func 에 원하시는 함수를 실행하지 않고 넣으시고,
    greater_than에는 func에 나온 값이 어떤 값보다 컸으면 하는 값(필수X),
    less_than에는 func에 나온 값이 어떤 값보다 작았으면 하는 값(필수X)

    이렇게 넣으시면 자동으로 계산이 될거에요.

    • 시간내서 답변해주셔서 정말 감사합니다. 복받으실거에요. 매개변수 처리방식 같은게 있어서 외부함수와 조건 그 자체를 참조?형태로 바꿔서 전달이 가능할까 싶어서 그렇게 1차원적으로 해결할 수 있을 줄 알았는데 그런방식은 없나보군요. JL. 2022.9.2 14:19

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.