создание объекта функции с условным оператором перед вызовом - PullRequest
0 голосов
/ 03 мая 2019

Я определил две функции (fun1 и fun2), которые возвращают некоторые значения, и я вызываю одну из этих функций в fun3.Я могу сделать, если условие внутри цикла, но есть ли способ, которым функция может быть выбрана раньше.Как показано здесь.Или есть другой подход?

def fun1(a1,b1)
def fun2(a1,b1)

def fun3(a1,b1,some_para):

    if some_para:
        sel_func = fun1()
    else:
        sel_func = fun2()

    for Loop:
        sel_func(a1,b1)

Ответы [ 3 ]

3 голосов
/ 03 мая 2019

Функции являются объектами.Просто назначьте функцию вместо ее вызова.Используя ваш пример:

def fun3(a1, b1, some_para):

    sel_func = fun1 if some_para else fun2

    for Loop:
        sel_func(a1, b1)
1 голос
/ 03 мая 2019
def fun1(a1,b1)
def fun2(a1,b1)


def fun3(a1,b1,some_para = None):
    sel_func = fun1  if some_para else fun2
    for Loop:
        sel_func(a1,b1)

используйте some_para =None в объявлении функции, когда вы вызываете эту функцию, вам всегда нужно передавать ей аргумент, и только fun1 будет запускаться каждый раз, если вы не передадите какое-либо значение, произойдет ошибка атрибута.если используется none и значение не передано, fun2 будет выполнено, в противном случае fun1 будет.

0 голосов
/ 03 мая 2019

Вы можете передать функцию как параметр снаружи, чтобы ее было легче читать:

def fun3(a1, b1, sel_func):
    for Loop:
        sel_func(a1, b1)

# call fun3 with whatever funtion you need in each momment
fun3(a, b, fun1) 
fun3(a, b, fun2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...