Python - Всегда ли выполняется .pop (), даже в условных операторах? - PullRequest
0 голосов
/ 19 июня 2020

Если я использую .pop () в условном выражении, будет ли всплывающее окно выполняться, даже если условие не выполняется?

например,

if something != stack.pop():
    return False
else:
    return True

Скажите, что условие не выполнено и не возвращает False, то последний элемент [stack] все еще выскакивает?

Edit:

Спасибо всем за разъяснение. Я предполагал, что в условном предложении IF он будет проверять, соответствует ли всплывающее окно условию, но фактически не вносит изменения в список.

Ответы [ 4 ]

1 голос
/ 19 июня 2020

Да, элемент появляется во время оценки состояния. Независимо от результата, предмет был обнаружен. Вы можете проверить это, распечатав стек в каждом случае.

def myfunc(stack):
    if 4 != stack.pop(): # Swap 4 to test
        print(stack) # [1, 2, 3]
        return False
    else:
        print(stack) # [1, 2, 3]
        return True


if __name__ == '__main__':
    print( myfunc([1, 2, 3, 4]) )
0 голосов
/ 19 июня 2020

Да, метод pop () будет выполняться независимо от того, выполняется условие или нет. Как и любой условный оператор типа if(something!=stack.pop()), выполняется справа налево. Таким образом, сначала будет выполнен оператор pop, а затем будет выполнено любое сравнение.

Ниже приведен пример, который я использовал для его проверки.

stack=[1,5,7,8,9]
something=9
if(something!=l1.pop()):
    print(False)
else:
    print(True)
    print(l1)
0 голосов
/ 19 июня 2020

В вашем условном выражении вы сравниваете с результатом pop. Итак, всплывающее окно должно быть выполнено, чтобы что-то на самом деле сравнить.

Подумайте об этом

temp = stack.pop()
if 4 != temp:

, если вы хотите проверить, есть ли конкретный элемент c в stack, и только pop (), если это так, вы можете использовать:

# Check if there is anything in the stack, to avoid accessing an invalid position
if (stack.count() > 0 ):
    value = stack[-1]
    if (value == 4:
        stack.pop()
        print( stack )
        return False
    else:
        print( stack )
        return True

Если вам это нужно чаще (или чтобы сделать код более читаемым), вы можете поместить его в небольшую функцию:

def peek( list ):
    if ( list.count() > 0 ):
        return list[-1]
    else:
        return None

if ( peek( stack ) == 4 ):
     stack.pop()

0 голосов
/ 19 июня 2020

Да, он появится, потому что вы его назвали. Независимо от того, где вы назовете это, будь то условие или передача его в качестве аргумента, он будет выполнять свою работу «всплывающим».

Если вы хотите безопасно проверить значение и одновременно всплывать, добавление дополнительной строки не повредит.

if something != stack[-1]:
    stack.pop()
    return False
else:
    return True

Примечание: я сделал этот пример, учитывая, что stack является list и как pop() удалит последний элемент из списка, так что я сделал stack[-1].

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