Можно ли использовать конструкцию `a = b или c`, если b и c являются массивами / DataFrames в python? - PullRequest
0 голосов
/ 14 мая 2018

Это следующий тип заявления:

b = np.array([1,2,3,4])

def func(a=None):
    if a is None:
        a = b

который я хотел бы заменить оператором if:

def func(a=None):
    a = a or b

Итак, во-первых, две вещи: я не могу сделать вышеупомянутое в качестве аргумента по умолчанию, потому что мне нужно, чтобы значение по умолчанию оценивалось во время выполнения (т. Е. Если значение по умолчанию на самом деле является атрибутом объекта, который, как ожидается, изменится). Во-вторых, я слышал, что, возможно, способ, которым я хочу сделать это, не всегда рекомендуется соглашением, но я просто спрашиваю с более гипотетической точки зрения, как заставить вышеупомянутое работать. До сих пор я всегда писал это первым способом, но, по моему честному мнению, второй чувствует себя лучше.

a = a or b выше не удается, потому что в этом случае ожидается, что a будет массивом или pandas.DataFrame, поэтому он дает мне стандартную ошибку truth value of an array is ambiguous. Это сработало бы, если бы a и b были поплавками, например.

Так что есть какой-то способ написать выше, аналогично тому, как я делаю (и кратко), но использовать тот факт, что массивы / списки ненулевой длины оцениваются как истинные в Python (то есть это будет работать, если a был список например?

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете использовать третичный оператор и вычислить значение истинности самостоятельно.Предположим, a является массивом, например:

a = a if a is not None and all(a) else b

, где вы можете заменить логику истинности, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...