3

上周我一直在学习 Python,而且进展非常顺利,但是现在我已经了解了自定义函数,但我有点碰壁了。虽然我了解它的基础知识,例如:

def helloworld():
    print("Hello World!")

helloworld()

我知道这会打印“Hello World!”。

然而,当涉及到从一个函数到另一个函数获取信息时,我发现这令人困惑。即:function1 和 function2 必须一起工作才能执行任务。此外,何时使用该return命令。

最后,当我在函数中有一个列表或字典时。我会编造一些东西作为一个例子。

def my_function():
    my_dict = {"Key1":Value1,
              "Key2":Value2,
              "Key3":Value3,
              "Key4":Value4,}

我将如何访问键/值并能够从函数外部更改它们?即:如果我有一个程序可以让您在视频游戏中输入/输出玩家统计数据或角色属性。

我理解这一点,当他们有不同的功能相互调用时,这让我感到困惑。

另外,因为这是我第一次遇到自定义函数。这真的是雄心勃勃的追求吗,这可能是我所有困惑的原因吗?因为这是我见过的最复杂的程序。

4

3 回答 3

4

Functions在 python 中,既可以是常规的,也可以procedurefunction带返回值的。实际上,每个 Python 的函数都会返回一个值,可能是None.

如果没有返回语句,那么您的函数将被完全执行并按照代码流正常离开,None并作为返回值产生。

def foo():
    pass
foo() == None
>>> True

如果你return的函数中有一个语句。返回值将是它后面的表达式的返回值。例如,您可能拥有return None并且您将明确返回None. 你也可以return没有其他任何东西,在那里你会隐式返回None,或者你可以拥有return 3,你将返回值 3。这可能会增加复杂性。

def foo():
   print('hello')
   return
   print('world')

foo()
>>>'hello'

def add(a,b):
    return a + b
add(3,4)
>>>7

如果您想要在函数中创建的字典(或任何对象),只需返回它:

def my_function():
    my_dict = {"Key1":Value1,
              "Key2":Value2,
              "Key3":Value3,
              "Key4":Value4,}
    return my_dict
d = my_function()
d['Key1']
>>> Value1

这些是函数调用的基础。还有更多。有些函数返回函数(也被视为装饰器。你甚至可以返回多个值(不是真的,你只是返回一个元组)和很多有趣的东西:)

def two_values():
    return 3,4
a,b = two_values()
print(a)
>>>3
print(b)
>>>4

希望这可以帮助!

于 2013-07-30T01:46:34.300 回答
3

在函数之间传递信息的主要方式是使用参数和返回值。函数不能看到彼此的变量。你可能会认为之后

def my_function():
    my_dict = {"Key1":Value1,
              "Key2":Value2,
              "Key3":Value3,
              "Key4":Value4,}
my_function()

my_dict将具有其他函数能够看到的值,但事实证明这是设计语言的一种非常脆弱的方式。每次调用my_functionmy_dict都会失去它的旧值,即使你还在使用它。此外,在编写新函数时选择要使用的名称时,您必须知道系统中每个函数使用的所有名称,整个事情很快就会变得难以管理。Python 不是这样工作的。我想不出任何可以做到的语言。

相反,如果一个函数需要向它的调用者提供信息,它的调用return者需要看到的东西:

def my_function():
    return {"Key1":"Value1",
            "Key2":"Value2",
            "Key3":"Value3",
            "Key4":"Value4",}
print(my_function()['Key1']) # Prints Value1

请注意,函数在执行到return语句时结束(即使它在循环中间);你不能现在执行一个返回,稍后返回一个,继续,当你到达函数末尾时返回两个东西。如果您想这样做,请保留一份您想要退回的物品的清单,并在您完成后退回清单。

于 2013-07-30T01:38:57.630 回答
2

您分别使用参数返回值将信息传入传出函数。这个函数,例如:

def square(number):
    """Return the square of a number."""
    return number * number

...通过number参数接收信息,并将信息与return ...语句一起发送回。你可以像这样使用它:

>>> x = square(7)
>>> print(x)
49

如您所见,我们将值传递7给函数,然后它返回值49(我们存储在变量中x)。

现在,假设我们有另一个功能:

def halve(number):
    """Return half of a number."""
    return number / 2.0

我们可以通过几种不同的方式在两个函数之间发送信息。

  1. 使用临时变量:

    >>> tmp = square(6)
    >>> halve(tmp)
    18.0
    
  2. 直接使用第一个函数作为第二个函数的参数:

    >>> halve(square(8))
    32.0
    

您使用哪一个将部分取决于个人品味,部分取决于您尝试做的事情有多复杂。

尽管它们具有相同的名称,但内部的number变量和内部square()的变量halve()是完全分开的,并且它们在这些函数之外是不可见的:

>>> number
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'number' is not defined

因此,实际上不可能“看到”my_dict示例函数中的变量。你通常会做的是这样的:

def my_function(my_dict):
    # do something with my_dict
    return my_dict

...并my_dict在函数之外定义。

(实际上比这要复杂一点——dict对象是可变的(这只是意味着它们可以改变),所以通常你实际上并不需要返回它们。但是,目前最好习惯于返回所有东西,为了安全起见)。

于 2013-07-30T02:19:18.813 回答