添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Python流程控制
7 函数和lambda表达式
7.1 Python函数
7.2 Python函数值传递和引用传递(包括形式参数和实际参数)
7.3 深度剖析Python函数参数传递的内部机制
7.4 Python位置参数
7.5 Python关键字参数
7.6 Python默认参数
7.7 Python函数如何传入任意个参数?
7.8 Python如何用序列中元素给函数传递参数?
7.9 Python None(空值)
7.10 Python return函数返回值
7.11 Python函数怎样返回多个值?
7.12 Python partial偏函数
7.13 从实例出发,攻克Python函数递归
7.14 Python变量作用域(全局变量和局部变量)
7.15 Python如何在函数中使用同名的全局变量?
7.16 Python局部函数
7.17 更高级的Python函数用法,玩转Python函数!
7.18 Python闭包函数
7.19 Python lambda表达式(匿名函数)
7.20 Python eval()和exec()函数
7.21 使用exec()和eval(),不要犯这样的低级错误!
7.22 Python函数式编程(map()、filter()和reduce())详解
7.23 函数注解,号称Python3新增的最独特的功能!
7.24 如何才能提高代码颜值,让代码变得有逼格?
Python类和对象 类特殊成员(属性和方法) Python异常处理机制 Python模块和包 Python文件操作(I/O)
所谓 作用域(Scope) ,就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只能在 for 循环内部使用。
变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。本节我们只讲解两种变量, 局部变量 全局变量
Python 局部变量 在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这样的变量称为 局部变量(Local Variable)。
要知道,当函数被执行时,Python 会为其分配一块临时的存储空间,所有在函数内部定义的变量,都会存储在这块空间中。而在函数执行完毕后,这块临时存储空间随即会被释放并回收,该空间中存储的变量自然也就无法再被使用。
举个例子: def demo(): add = "http://c.biancheng.net/python/" print("函数内部 add =",add) demo() print("函数外部 add =",add) 程序执行结果为: 函数内部 add = http://c.biancheng.net/python/
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\file.py", line 6, in <module>
print("函数外部 add =",add)
NameError: name 'add' is not defined

可以看到,如果试图在函数外部访问其内部定义的变量,Python 解释器会报 NameError 错误,并提示我们没有定义要访问的变量,这也证实了当函数执行完毕后,其内部定义的变量会被销毁并回收。
值得一提的是,函数的参数也属于局部变量,只能在函数内部使用。例如: def demo(name,add): print("函数内部 name =",name) print("函数内部 add =",add) demo("Python教程","http://c.biancheng.net/python/") print("函数外部 name =",name) print("函数外部 add =",add) 程序执行结果为: 函数内部 name = Python教程
函数内部 add = http://c.biancheng.net/python/
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\file.py", line 7, in <module>
print("函数外部 name =",name)
NameError: name 'name' is not defined

由于 Python 解释器是逐行运行程序代码,由此这里仅提示给我“name 没有定义”,实际上在函数外部访问 add 变量也会报同样的错误。

Python全局变量 除了在函数内部定义变量,Python 还允许在所有函数的外部定义变量,这样的变量称为 全局变量(Global Variable)
和局部变量不同,全局变量的默认作用域是整个程序,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。
定义全局变量的方式有以下 2 种: 在函数体外定义的变量,一定是全局变量,例如: add = "http://c.biancheng.net/shell/" def text(): print("函数体内访问:",add) text() print('函数体外访问:',add) 运行结果为: 函数体内访问: http://c.biancheng.net/shell/
函数体外访问: http://c.biancheng.net/shell/

在函数体内定义全局变量。即使用 global 关键字对变量进行修饰后,该变量就会变为全局变量。例如: def text(): global add add= "http://c.biancheng.net/java/" print("函数体内访问:",add) text() print('函数体外访问:',add) 运行结果为: 函数体内访问: http://c.biancheng.net/java/
函数体外访问: http://c.biancheng.net/java/

注意,在使用 global 关键字修饰变量名时,不能直接给变量赋初值,否则会引发语法错误。 获取指定作用域范围中的变量 在一些特定场景中,我们可能需要获取某个作用域内(全局范围内或者局部范围内)所有的变量,Python 提供了以下 3 种方式:
1) globals()函数 globals() 函数为 Python 的内置函数,它可以返回一个包含全局范围内所有变量的字典,该字典中的每个键值对,键为变量名,值为该变量的值。
举个例子: #全局变量 Pyname = "Python教程" Pyadd = "http://c.biancheng.net/python/" def text(): #局部变量 Shename = "shell教程" Sheadd= "http://c.biancheng.net/shell/" print(globals()) 程序执行结果为: { ...... , 'Pyname': 'Python教程', 'Pyadd': 'http://c.biancheng.net/python/', ......}

注意,globals() 函数返回的字典中,会默认包含有很多变量,这些都是 Python 主程序内置的,读者暂时不用理会它们。

可以看到,通过调用 globals() 函数,我们可以得到一个包含所有全局变量的字典。并且,通过该字典,我们还可以访问指定变量,甚至如果需要,还可以修改它的值。例如,在上面程序的基础上,添加如下语句: print(globals()['Pyname']) globals()['Pyname'] = "Python入门教程" print(Pyname) 程序执行结果为: Python教程
Python入门教程

2) locals()函数 locals() 函数也是 Python 内置函数之一,通过调用该函数,我们可以得到一个包含当前作用域内所有变量的字典。这里所谓的“当前作用域”指的是,在函数内部调用 locals() 函数,会获得包含所有局部变量的字典;而在全局范文内调用 locals() 函数,其功能和 globals() 函数相同。
举个例子: #全局变量 Pyname = "Python教程" Pyadd = "http://c.biancheng.net/python/" def text(): #局部变量 Shename = "shell教程" Sheadd= "http://c.biancheng.net/shell/" print("函数内部的 locals:") print(locals()) text() print("函数外部的 locals:") print(locals()) 程序执行结果为: 函数内部的 locals:
{'Sheadd': 'http://c.biancheng.net/shell/', 'Shename': 'shell教程'}
函数外部的 locals:
{...... , 'Pyname': 'Python教程', 'Pyadd': 'http://c.biancheng.net/python/', ...... }

当使用 locals() 函数获取所有全局变量时,和 globals() 函数一样,其返回的字典中会默认包含有很多变量,这些都是 Python 主程序内置的,读者暂时不用理会它们。

注意,当使用 locals() 函数获得所有局部变量组成的字典时,可以向 globals() 函数那样,通过指定键访问对应的变量值,但无法对变量值做修改。例如: #全局变量 Pyname = "Python教程" Pyadd = "http://c.biancheng.net/python/" def text(): #局部变量 Shename = "shell教程" Sheadd= "http://c.biancheng.net/shell/" print(locals()['Shename']) locals()['Shename'] = "shell入门教程" print(Shename) text() 程序执行结果为: shell教程
shell教程

显然,locals() 返回的局部变量组成的字典,可以用来访问变量,但无法修改变量的值。
3) vars(object) vars() 函数也是 Python 内置函数,其功能是返回一个指定 object 对象范围内所有变量组成的字典。如果不传入object 参数,vars() 和 locals() 的作用完全相同。 由于目前读者还未学习 Python 类和对象,因此初学者可先跳过该函数的学习,等学完 Python 类和对象之后,再回过头来学习该函数。

举个例子: #全局变量 Pyname = "Python教程" Pyadd = "http://c.biancheng.net/python/" class Demo: name = "Python 教程" add = "http://c.biancheng.net/python/" print("有 object:") print(vars(Demo)) print("无 object:") print(vars()) 程序执行结果为: 有 object:
{...... , 'name': 'Python 教程', 'add': 'http://c.biancheng.net/python/', ......}
无 object:
{...... , 'Pyname': 'Python教程', 'Pyadd': 'http://c.biancheng.net/python/', ...... }

关注公众号「 站长严长生 」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。

微信扫码关注公众号