Global&Return

Python进阶之Global&Return的理解和使用

Posted by Ted on December 19, 2016

让我们来看看这个小函数:

def add(value1, value2):
    return value1 + value2

result = add(3, 5)
print(result)
# Output: 8

这个函数式两个值相加返回和,我们同样可以这样做

def add(value1,value2):
    global result
    result = value1 + value2

add(3,5)
print(result)
# Output: 8

让我们首先谈谈涉及return关键字的第一段代码。 这个函数做的是把值赋给正在调用该函数的变量,在我们的例子中就是result。 在大多数情况下,您不需要使用global关键字。 然而,让我们看看来包含global关键字的代码做了什么,它是创建了一个全局变量的result。 全局在这里意味着什么? 全局变量意味着我们可以在该函数的范围之外访问该变量。 让我用一个例子来演示它:

# first without the global variable
def add(value1, value2):
    result = value1 + value2

add(2, 4)
print(result)

# Oh crap, we encountered an exception. Why is it so?
# the python interpreter is telling us that we do not
# have any variable with the name of result. It is so
# because the result variable is only accessible inside
# the function in which it is created if it is not global.
Traceback (most recent call last):
  File "", line 1, in
    result
NameError: name 'result' is not defined

# Now lets run the same code but after making the result
# variable global
def add(value1, value2):
    global result
    result = value1 + value2

add(2, 4)
result
6

在实际的编程中,你应该尽量远离global关键字,因为它只会通过向全局范围引入不需要的变量而变得困难。

多重返回值

那么如果你想从一个函数返回两个变量呢? 使用全局关键字。 我们来看一个没什么用的例子:

def profile():
    global name
    global age
    name = "Danny"
    age = 30

profile()
print(name)
# Output: Danny

print(age)
# Output: 30

注意,不要试图用上面这种方法。

也有人试图用 tuple, list 或者 dict

def profile():
    name = "Danny"
    age = 30
    return (name, age)

profile_data = profile()
print(profile_data[0])
# Output: Danny

print(profile_data[1])
# Output: 30

或者用一种更常用的方法

def profile():
    name = "Danny"
    age = 30
    return name, age

profile_name, profile_age = profile()
print(profile_name)
# Output: Danny
print(profile_age)
# Output: 30