Когда вызывается / вызывается функция и когда она выполняется? - PullRequest
0 голосов
/ 13 апреля 2019

Я относительно новичок в Python, и у меня есть (я думаю) довольно простой вопрос о функциях в Python.

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

x=6

def example():

    globx = x
    print(globx)
    globx+=5
    print(globx)

example()

Определяет функцию, а затем вызывает ее выполнение, и при выполнении она печатает 6, а затем печатает 11, как и ожидалось.

Сейчас:

x=6

def example():

    globx = x
    print(globx)
    globx+=5
    print(globx)

print(example())

Я ожидал, что это выведет «None», так как print ищет возвращаемое значение функции, чтобы напечатать его, но example () не возвращает значение.Вместо 6, 11 и None печатаются.Поэтому я предполагаю, что print (example ()) вызывает возвращаемое значение example () для его печати, но до того, как также выполнит функцию.(Пожалуйста, исправьте меня, если я ошибся.).

Даже когда я просто присваиваю возвращаемое значение переменной x = example () после определения функции, она также выполнит функцию ивыведите 6, а затем 11.

x=6

def example():

    globx = x
    print(globx)
    globx+=5
    print(globx)

x = example()

Всегда ли выполняется функция при ее записи?(Ecxcept в def) Есть ли способ использовать возвращаемое значение функции без его полного выполнения?Например, если у меня был более сложный код, и в какой-то момент я хочу использовать возвращаемое значение функции, но не хочу, чтобы оно выполнялось.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 13 апреля 2019

То, что вы говорите, кажется в целом правильным, даже если это не так, как вы ожидали.

Как правило, вы можете видеть это, когда функция имеет круглые скобки в конце, то есть example(), функция выполняется.

Ваш последний вопрос немного расплывчат, но в какой-то момент вы можете прекратить выполнение функции, используя ключевое слово return внутри функции. Это имеет смысл, например, функция, которая выполняет некоторые ресурсоемкие вычисления, но иногда есть шанс использовать ярлык.

Как пример

def calculate_thing(shortcut = False):
    if shortcut:
        return 3
    # Resource-intensive, time-consuming calculations go here
    return result_of_calculations

Вызов этой функции с помощью calculate_thing(shortcut=True) быстро вернет 3, потому что функция прекращает выполнение, когда мы нажимаем return 3. С другой стороны, вызов его с помощью calculate_thing(shortcut=False) или calculate_thing() (False является значением по умолчанию для shortcut) заставит функцию некоторое время выполняться, выполняя некоторые вычисления, а затем возвращает то значение, которое было присвоено переменная result_of_calculations.

0 голосов
/ 13 апреля 2019

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

def just_print(input):
   print('Here is a function printing!', input)

just_print('cool!')
>> 'Here is a function printing!', 'cool!'


def return_value(input):
    return 'Hello ' + input

# We can store the return for future use
save_return_val = return_value('Ari')

print(save_return_val)
>> 'Hello Ari'

# Just print it
print(return_value('Ari'))
>> 'Hello Ari'
0 голосов
/ 13 апреля 2019

Вас смущает то, что функция возвращает и что делает функция.

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

. Возвращаемое значение функции определяется с помощью ключевого слова return.и если он не определен, то это None.Очевидно, что функция должна быть выполнена, чтобы заставить ее возвращать значение.

...