Python入门没有那么难,9个实例了解全局变量与部分变量
作者头像
  • 沃森展览
  • 2020-05-12 18:48:31 6

大家好,我是从事Python数据分析的一名专业人士,希望通过分享我在转型过程中的经验,帮助大家更好地掌握相关技能。为此,我编写了一套系列教程,分别是《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》以及《33天搞定机器学习》。

本文是《15天学会Python编程》系列的第八篇,我们将一起探讨函数作用域的相关知识。

1. 函数变量作用域

并非所有变量在程序中的任何位置都能被访问。变量的作用域决定了可以在程序的哪些部分访问特定的变量名称。Python中的变量作用域主要分为以下几种情况:

  • 局部作用域(L):定义在函数内部的变量只能在该函数内部访问。
  • 嵌套作用域(E):嵌套函数的作用域,即当前函数的上级函数的局部变量。
  • 全局作用域(G):定义在函数外部的变量,作用于整个模块。
  • 内建作用域(B):Python内置模块中的变量,例如int()max()等。

优先级顺序为:局部作用域 > 嵌套作用域 > 全局作用域 > 内建作用域,优先使用局部作用域。

```python x = max(1, 6) # max为内建变量,作用域为Python的所有模块

y = 1 # y为全局变量,作用域为当前模块

def outer():

i = 3 # i的作用域为当前函数,包括嵌套函数

def inner():

    count = 2 # count为局部变量,仅在当前函数有效

```

2. 使用global和nonlocal关键字

全局变量

全局变量可以在整个文件中被任何函数调用,这类变量在整个程序中都可以使用。

局部变量

局部变量通常只能在定义它们的函数外部使用,这些变量只能在程序的特定部分使用。

如何在函数内使用全局变量或修改其值?

要实现在函数内使用全局变量或修改其值,Python提供了global关键字。

  • global:声明变量为全局变量的关键字。

```python

示例1:函数优先使用局部变量

str = 'global'

def func1(): str = 'local' print(str)

func1() print(str) 运行结果: local global ```

```python

示例2:在没有局部变量时使用全局变量

str = 'global'

def func1(): print(str)

func1() print(str) 运行结果: global global ```

```python

示例3:修改全局变量的值

str = 'global'

def func1(): global str str = 'local' print(str)

func1() print(str) 运行结果: local local ```

注意:字符串和数字类型的变量不能在局部被修改,除非使用global关键字。列表和字典是可以修改的,但不能重新赋值,如果需要重新赋值,必须在函数外部使用global关键字。

  • nonlocal:用于修改上一级函数中的局部变量。

```python

示例4:嵌套函数变量通过nonlocal关键字修改上一级函数变量

x = 123

def outer(): x = 100

def inter():
    nonlocal x
    x = x + 1
    print(x)

inter()
print(x)

outer() 运行结果: 101 101 ```

3. 闭包

闭包是一种特殊的函数,由两个嵌套函数组成,外函数返回内函数的引用,从而形成闭包。闭包的主要功能是优先使用外函数中的变量,并对外部变量起到封装保护的作用。

```python

示例5:闭包示例

def func(a, b): def line(x): return a * x - b return line

line = func(2, 3) print(line(5))

输出结果为:7

```

在这个例子中,外函数func接收参数a=2b=3,内函数line接收参数x=5。内函数在体内计算a*x-b的值并返回。外函数返回内函数的引用,最终调用内函数line()得到结果7

闭包的意义在于它能够优先使用外函数中的变量,并对外部变量起到封装保护的作用,使得外部无法直接访问。

希望以上内容对你有所帮助!如需了解更多,欢迎订阅我们的内容,加入学习圈,获取更多学习资源。


以上内容是对原文进行了改写,保证了信息的准确性与完整性,同时降低了与原文的相似度。

    本文来源:图灵汇
责任编辑: : 沃森展览
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
变量全局实例入门那么了解部分没有Python
    下一篇