Это следующий тип заявления:
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
был список например?