Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python的函数(二):作用域

python的函数(二):作用域

作者头像
企鹅号小编
发布于 2018-01-22 07:21:59
发布于 2018-01-22 07:21:59
7480
举报
文章被收录于专栏:编程编程

我们在写函数时,时常需要引用全局的变量,或对全局变量赋值。又或者偶尔遇到局部变量与全局变量同名。在处理这些问题时,python语言的游戏规则是怎样的?今天我们就来学习这方面的内容。

什么是作用域?

在python语言里,在函数内部定义的变量,仅在函数内有效。在函数外面定义的变量对全局有效。我们把这种变量的有效范围叫作变量的作用域。

在python语言里,当引用变量时,会按照由内向外、由近及远的找查变量的定义及赋值。例如下面的代码:

a=1

deffunc():

b=a

c=a

当执行到b = a时,

第一步,会先在函数内部查找变量a。

第二步,如果第一步没有找到,会继续向外、向上查找。在这里就是查找函数外部,查找函数定义之前的代码,找到a = 1。(如果第一步查找到了a的定义,就忽略第二步。)

当执行到c = a时,向上跳过func(),直接找到a = 1。就是说会跳过同级的函数。也就是说,函数内的变量只对本函数有效,对外部没有影响。

三段代码对比

#示例一:函数内部

a=1

deffunc_a():

a=2

deffunc_b():

a=3

print(a)

func_b()

func_a()#打印结果3

#示例二:向上一级

a=1

deffunc_a():

a=2

deffunc_b():

print(a)

func_b()

func_a()#打印结果2

#示例三:全局

a=1

deffunc_a():

deffunc_b():

print(a)

func_b()

func_a()#打印结果1

global和nonlocal是干什么的?

从上面的代码来看,python会自动按照由里向外、由近及远的规则查找变量。来看下面的几段代码。

#示例一:func_b不能修改func_a里的变量

a=1

deffunc_a():

a=2

deffunc_b():

a=3

func_b()

print(a)

func_a()#打印结果仍然是2

#示例二:func_b修改了func_a里的变量

a=1

deffunc_a():

a=2

deffunc_b():

nonlocala

a=3

func_b()

print(a)

func_a()#打印结果3

#示例三:func_b修改了全局变量,而不影响func_a内部的变量

a=1

deffunc_a():

a=2

deffunc_b():

globala

a=3

func_b()

print(a)

func_a()#打印结果仍然是2

print(a)#打印结果3

所以,当需要修改外部变量的值时global和nonlocal是必需的。一般建议是不管是引用还是修改,都使用global和nonlocal。

for循环没有单独的作用域

for内部定义的变量在循环结束后变量仍然有效。如:

foriin range(3):

a=i

print(a)#打印结果2

总结

简单总结一下变量作用域的规则:

由内向外、由近及远。

可直接引用外部变量、全局变量(建议使用nonlocal和global)。

当需要修改外部变量和全局变量时必需使用nonlocal和global来定义。

预告

下一次,我们学习函数的参数传递。

本文来自企鹅号 - ExASIC媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - ExASIC媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 基础(十八):命名空间 & 作用域
命名空间(namespace)是名称到对象的映射,当前大部分命名空间都是通过 Python 字典来实现的,它的主要作用是避免项目中的名字冲突,每一个命名空间都是相对独立的,在不同的命名空间中可以同名,在相同的命名空间中不可以同名。
Python小二
2020/08/18
6110
Python 基础(十八):命名空间 & 作用域
最易写出bug?Python命名空间和作用域介绍
简单的说,命名空间就是一种“名称-对象”的映射表,使得我们可以通过对象指定的名称来访问它们。
MeteoAI
2019/08/12
7510
最易写出bug?Python命名空间和作用域介绍
深入理解Python变量作用域与函数闭包
1、引言 最近遇到一个求最长回文子串的题目,于是,我写了如下的代码: class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ if len(s) < 2: return s maxlen = 0 res = ''
石晓文
2018/04/11
1.7K0
命名空间和作用域
命名空间(Namespace)是从名称到对象的映射,命名空间的内容以字典形式给出,字典的key是已命名的变量或函数名称,value是这些变量或函数的值。简单地说就是将不同的名称分类 一般有三种命名空间: ①内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。 ②全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。 ③局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)
用户7886150
2021/01/20
1.1K0
【愚公系列】2021年12月 Python教学课程 13-变量作用域
作用域指的是变量的有效范围。变量并不是在哪个位置都可以访问的,访问权限取决于这个变量是在哪里赋值的,也就是在哪个作用域内的。
愚公搬代码
2021/12/14
3590
函数 (二) 名称空间与作用域
一、什么是名称空间 我们写一段代码,里面肯定会定义一些变量名,函数名,而一旦我们运行代码,python解释器在加载这些代码的时候,会在内存中开辟一片空间专门用来存放这些名字以及这些名字所绑定的值的关系, 这块内存就被称为名称空间。 二、名称空间分类 名称空间分为三种: △内置名称空间   内置名称空间是用来存放python解释器的一些内置方法明以及变量名的。这些名称是在解释器启动的时候就加载好的,我们随时可以调用。比如常见的 print( )、input( )、len( )等都是内置方法,我们在写代码的时候
人生不如戏
2018/04/12
8290
Python学习:作用域
变量名引用分为三个作用域进行查找:首先是本地,之后是函数内(如果有的话),之后全局,最后是内置。L->E->G->B
py3study
2020/01/13
9120
深入探讨Python中的命名空间与作用域
在Python中,命名空间(Namespace)和作用域(Scope)是两个重要的概念,它们决定了变量的可见性和访问规则。本文将深入探讨Python中命名空间和作用域的概念,并通过代码实例进行解释。
一键难忘
2024/07/05
2940
Python3学习笔记 | 十九、Python的函数-作用域
作用域针对的是变量。在使用同一个变量名时,会出现作用域问题。如右边的x,在函数里与函数外是不同的变量。 • 一个def内定义的变量名能够被def内部使用。不能在函数外部引用这个变量名。 • def内的变量名与def外的变量名并不冲突。在def内赋值的与def外赋值的相同变量名是不同的变量。 变量名有如下三种不同作用域: 1、全局:在def外定义的变量名是全局变量 2、本地:在def内部定义的叫做本地变量 3、其它:嵌套def时,各自的变量也是独立的。
TeamsSix
2019/09/24
5880
Python全网最全基础课程笔记(十三)——作用域,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
变量的生命周期与其作用域紧密相关。局部变量在函数被调用时创建,在函数执行完毕后销毁(除非它们被返回或以其他方式传递到外部)。全局变量在模块被加载时创建,在模块被卸载时销毁。内置变量则与Python解释器的生命周期相同。
小白的大数据之旅
2024/11/20
1210
Python全网最全基础课程笔记(十三)——作用域,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python3 | 练气期,函数创建、参数传递、作用域!
描述:上一章,我们学习了Python3编程中最基本而得流程控制语句,相信大家在作者的实践下也已经掌握了相关关键字了吧,这一章我们一起学习Python3编程入门中函数定义、函数调用、函数参数(传递、类型),匿名函数、递归函数。内嵌函数和闭包、装饰器函数,以及命名空间作用域的讲解,它也是Python编程中最基础且常用的部分,所以说也是需要我们掌握的。
全栈工程师修炼指南
2024/07/29
800
Python3 | 练气期,函数创建、参数传递、作用域!
【Python 初级函数详解】—— 参数沙漠与作用域丛林的求生指南
我们知道数学中的函数,我们输入一个数,在通过对应的映射关系得到另一个数,如下图给出了两个简单的数学函数:
换一颗红豆
2025/03/03
750
【Python 初级函数详解】—— 参数沙漠与作用域丛林的求生指南
你知道Python中的4种变量作用域是哪些吗?
意思是,在局部找不到的,便去局部外的局部作用域找(例如 闭包),再找不到的就去全局作业域里找,再找不到就去内建作业域中找。
lyhue1991
2020/07/20
2.2K0
你知道Python中的4种变量作用域是哪些吗?
python函数对象-命名空间-作用域-02
知识点: # 函数名可以作为容器对象的元素值 , # 函数名(即函数内存地址)可以加括号直接调用
suwanbin
2019/09/26
6350
python函数对象-命名空间-作用域-02
图解python | 命名空间与作用域
教程地址:http://www.showmeai.tech/tutorials/56
ShowMeAI
2022/02/23
1.5K0
图解python | 命名空间与作用域
Python 变量的作用域
变量可以使用的范围,程序的变量并不是哪个位置都可以访问的,访问的权限决定于变量时在哪里定义的
星哥玩云
2022/09/08
7910
Python 变量的作用域
【Python系列】5. 函数与变量作用域
一、函数 函数:有一定功能的代码块 函数作用:提高利用率(重复使用)、封装(模块化) 语法 def 函数名(参数列表): 函数体(代码块) 调用 函数名(参数) 分类
用户9914333
2022/07/22
3400
Python内嵌作用域与函数闭包
前情回顾,上一节我们介绍了变量的LEGB索引机制:对一个变量,首先在本地(函数内)查找;之后查找嵌套函数的本地作用域,然后再是查找当前的全局作用域。
Python中文社区
2018/07/27
7530
Python 变量作用域与函数
一个程序的所有的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的,变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称,两种最基本的变量作用域,第一种是局部变量,第二种是全局变量.定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域,而局部变量只能在其被声明的函数内部访问,全局变量则可以在整个程序范围内访问.
王瑞MVP
2022/12/28
2.4K0
Python学习笔记:命名空间和作用域
在Python中,任何“东西”都是一个对象。当我们赋值整数给变量时,例如x = 1,我们告诉Python在引用x时,意味着Python指向整数类型对象1,以便对数值计算或其他方法使用值1。
fanjy
2019/07/19
9250
Python学习笔记:命名空间和作用域
推荐阅读
相关推荐
Python 基础(十八):命名空间 & 作用域
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档