Проверка функций на булево значение

Подскажите правильно ли я понял данные строки кода:

def checkbuy(investment):
    if not pos_dict['in_position']:
        if df.Buy.values:
           return True
        else:
           print('already in a position')

Данная функция первым действием проверяет словарь на отсутствие строки in_position, если ее нет, выполняется проверка фрэйма данных(ячейки в таблице) на наличие там True и если оно там есть, функция возвращает True. Если есть хотя бы словарь, он печатает уже на позиции. То есть по сути эта запись, эквивалентна вот этой, более понятной по смыслу для новичка.

def checkbuy(investment):
    if not pos_dict['in_position'] = True:
       if df.Buy.values = True:
          return True
       else:
          print('already in a position')

Если я не прав, объясните подробно, кому не лень.


Ответы (1 шт):

Автор решения: CrazyElf

Нет, это будет эквивалентно коду:

def checkbuy(investment):
    if not bool(pos_dict['in_position']):
        if bool(df.Buy.values):
           return True
        else:
           print('already in a position')

А далее нужно знать, что при приведении значений к типу bool действуют такие правила:

Тип Значение bool
bool True
False
без изменения
int,float 0
не 0
False
True
str пустая строка ""
любая другая
False
True
коллекция пустая
не пустая
False
True
NoneType None False

Судя по названию, в поле df.Buy.values лежит какая-то коллекция и тут, соответственно, проверяется, что она не пустая и не None.

→ Ссылка