Python进阶系列(六)

举报
zhulin1028 发表于 2022/06/21 00:45:06 2022/06/21
【摘要】 Global和Return 你也许遇到过, python中一些函数在最尾部有一个return关键字。你知道它是干嘛吗?它和其他语言的return类似。我们来检查下这个小函数: def add(value1, value2): return value1 + value2 result = add(3, 5) print(result...

Global和Return

你也许遇到过, python中一些函数在最尾部有一个return关键字。你知道它是干嘛吗?它和其他语言的return类似。我们来检查下这个小函数:


  
  1. def add(value1, value2):
  2. return value1 + value2
  3. result = add(3, 5)
  4. print(result)
  5. # Output: 8

上面这个函数将两个值作为输入,然后输出它们相加之和。我们也可以这样做:


  
  1. def add(value1,value2):
  2.     global result
  3.     result = value1 + value2
  4. add(3,5)
  5. print(result)
  6. # Output: 8

那首先我们来谈谈第一段也就是包含return关键字的代码。那个函数把值赋给了调用它的变量(也就是例子中的result变量)。

大多数境况下,你并不需要使用global关键字。然而我们也来检查下另外一段也就是包含global关键字的代码。 那个函数生成了一个global(全局)变量result。

global在这的意思是什么?global变量意味着我们可以在函数以外的区域都能访问这个变量。让我们通过一个例子来证明它:

首先,是没有使用global变量


  
  1. def add(value1, value2):
  2.     result = value1 + value2
  3. add(2, 4)
  4. print(result)

 Oh 糟了,我们遇到异常了。为什么会这样?python解释器报错说没有一个叫result的变量。

这是因为result变量只能在创建它的函数内部才允许访问,除非它是全局的(global)。

Traceback (most recent call last):

File "", line 1, in result

NameError: name 'result' is not defined

 现在我们运行相同的代码,不过是在将result变量设为global之后


  
  1. def add(value1, value2):
  2.     global result
  3.     result = value1 + value2
  4. add(2, 4)
  5. print(result)
  6. #6

如我们所愿,在第二次运行时没有异常了。在实际的编程时,你应该试着避开global关

键字,它只会让生活变得艰难,因为它引入了多余的变量到全局作用域了。

多个return值

那如果你想从一个函数里返回两个变量而不是一个呢?

新手们有若干种方法。最著名的方法,是使用global关键字。让我们看下这个没用的例子:


  
  1. def profile():
  2.     global name
  3.     global age
  4.     name = "Danny"
  5.     age = 30
  6. profile()
  7. print(name)
  8. # Output: Danny
  9. print(age)
  10. # Output: 30

注意: 不要试着使用上述方法。重要的事情说三遍,不要试着使用上述方法!

有些人试着在函数结束时,返回一个包含多个值的tuple(元组),list(列表)或

者dict(字典),来解决这个问题。这是一种可行的方式,而且使用起来像一个黑魔法:


  
  1. def profile():
  2.     name = "Danny"
  3.     age = 30
  4.     return (name, age)
  5. profile_data = profile()
  6. print(profile_data[0])
  7. # Output: Danny
  8. print(profile_data[1])
  9. # Output: 30

或者按照更常见的惯例:


  
  1. def profile():
  2.     name = "Danny"
  3.     age = 30
  4.     return name, age

这是一种比列表和字典更好的方式。不要使用global关键字,除非你知道你正在做什么。global也许在某些场景下是一个更好的选择(但其中大多数情况都不是)。

文章来源: zhulin1028.blog.csdn.net,作者:zhulin1028,版权归原作者所有,如需转载,请联系作者。

原文链接:zhulin1028.blog.csdn.net/article/details/124978240

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。