大家好,我是从事Python数据分析的一名专业人士,希望通过分享我在转型过程中的经验,帮助大家更好地掌握相关技能。为此,我编写了一套系列教程,分别是《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》以及《33天搞定机器学习》。
本文是《15天学会Python编程》系列的第八篇,我们将一起探讨函数作用域的相关知识。
并非所有变量在程序中的任何位置都能被访问。变量的作用域决定了可以在程序的哪些部分访问特定的变量名称。Python中的变量作用域主要分为以下几种情况:
int()
和max()
等。优先级顺序为:局部作用域 > 嵌套作用域 > 全局作用域 > 内建作用域,优先使用局部作用域。
```python x = max(1, 6) # max为内建变量,作用域为Python的所有模块
y = 1 # y为全局变量,作用域为当前模块
def outer():
i = 3 # i的作用域为当前函数,包括嵌套函数
def inner():
count = 2 # count为局部变量,仅在当前函数有效
```
全局变量可以在整个文件中被任何函数调用,这类变量在整个程序中都可以使用。
局部变量通常只能在定义它们的函数外部使用,这些变量只能在程序的特定部分使用。
要实现在函数内使用全局变量或修改其值,Python提供了global
关键字。
```python
str = 'global'
def func1(): str = 'local' print(str)
func1()
print(str)
运行结果:
local
global
```
```python
str = 'global'
def func1(): print(str)
func1()
print(str)
运行结果:
global
global
```
```python
str = 'global'
def func1(): global str str = 'local' print(str)
func1()
print(str)
运行结果:
local
local
```
注意:字符串和数字类型的变量不能在局部被修改,除非使用global
关键字。列表和字典是可以修改的,但不能重新赋值,如果需要重新赋值,必须在函数外部使用global
关键字。
```python
x = 123
def outer(): x = 100
def inter():
nonlocal x
x = x + 1
print(x)
inter()
print(x)
outer()
运行结果:
101
101
```
闭包是一种特殊的函数,由两个嵌套函数组成,外函数返回内函数的引用,从而形成闭包。闭包的主要功能是优先使用外函数中的变量,并对外部变量起到封装保护的作用。
```python
def func(a, b): def line(x): return a * x - b return line
line = func(2, 3) print(line(5))
```
在这个例子中,外函数func
接收参数a=2
和b=3
,内函数line
接收参数x=5
。内函数在体内计算a*x-b
的值并返回。外函数返回内函数的引用,最终调用内函数line()
得到结果7
。
闭包的意义在于它能够优先使用外函数中的变量,并对外部变量起到封装保护的作用,使得外部无法直接访问。
希望以上内容对你有所帮助!如需了解更多,欢迎订阅我们的内容,加入学习圈,获取更多学习资源。
以上内容是对原文进行了改写,保证了信息的准确性与完整性,同时降低了与原文的相似度。