繁体   English   中英

何时调用/引用函数以及何时执行?

[英]When is a function called/referred to and when is it being executed?

我对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())

我本来希望这打印“无”,因为print正在寻找函数的返回值来打印它,但是example()不返回值。 而是打印6,11和无。 所以我假设print(example())调用example()的返回值来打印它,但在执行函数之前。 (如果我弄错了,请纠正我。)

即使我只是在定义函数后将返回值赋值给变量x = example(),它也会执行函数并打印6然后再打印11。

x=6

def example():

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

x = example()

函数在写出时是否总是被执行? (在def中的Ecxcept)有没有办法在没有完全执行的情况下使用函数返回值? 例如,如果我有一个更复杂的代码,并且在某些时候我想使用函数返回值但不希望它运行。

提前致谢!

您对函数返回的内容以及函数的作用感到困惑。

在您的情况下,您有一个具有两个print()语句的函数。 这些语句与函数返回的值无关,并将在函数example()每次调用时打印相应的值。

函数的返回值是使用return关键字定义的,如果未定义,则为None 显然,需要执行该函数以使其返回值。

你说的话似乎总体上是正确的,即使它看起来像你期望的那样。

通常,您可以将其视为,当函数末尾有括号时,即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()Falseshortcut的默认值calculate_thing()调用它将使函数运行一段时间,进行一些计算,然后返回分配给它的任何值。变量result_of_calculations

函数做某事,它实际上执行一个函数。 如果您希望该功能在其完成工作时向您显示结果,则可以打印()事物。 如果您只是希望它完成其工作并保存结果以供日后使用,则将它们返回到调用该函数的变量。 你可以做到这两点!

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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM