Запуск кода функции только в том случае, если НЕ назначен вывод переменной? - PullRequest
0 голосов
/ 14 декабря 2018

Я ищу способ в Python остановить определенные части кода внутри функции, но только когда выходные данные функции назначены переменной.Если функция запускается без какого-либо назначения, то она должна запускать все внутри нее.

Примерно так:

def function():
    print('a')
    return ('a')

function()

A=function()

При первом вызове function() на экране должно отображаться a, а во второй раз ничего не должно print и только сохранятьзначение вернулось в A.

Я ничего не пробовал, так как я новичок в Python, но я думал, что это будет что-то вроде if __name__=='__main__': способа проверки, используется ли скрипт какмодуль или запустить напрямую.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Я не думаю, что такое поведение могло бы быть достигнуто в python, потому что в рамках вызова функции нет указания, что вы будете делать с возвращенным значением.Вы должны будете дать аргумент функции, которая говорит ей пропустить / остановить со значением по умолчанию, чтобы облегчить вызов.

def call_and_skip(skip_instructions=False): 
    if not skip_instructions: 
        call_stuff_or_not() 
    call_everytime()

call_and_skip()
# will not skip inside instruction

a_variable = call_and_skip(skip_instructions=True)
# will skip inside instructions 
0 голосов
/ 14 декабря 2018

Как уже упоминалось в комментариях, то, что вы запрашиваете, технически невозможно - функция знает (и не может иметь) какие-либо сведения о том, что будет делать вызывающий код с возвращаемым значением.

Для простого случая, подобного вашему примеру фрагмента, очевидным решением является просто удалить вызов print из функции и оставить его вызывающей стороне, то есть:

def fun():
   return 'a'

print(fun())

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

...