新手易犯错的地方Python作用域(python作用域和命名空间)
itomcoil 2025-04-10 23:48 10 浏览
好多新手一开始比较容易犯错的地方
理解作用域对于编写高效的python代码十分重要
现在就讲下四种作用域,按照从内到外的顺序:
- 局部作用域(Local) - 在函数内部定义的变量
- 嵌套作用域(Enclosing) - 在嵌套函数中,外层函数的作用域
- 全局作用域(Global) - 在模块级别定义的变量
- 内置作用域(Built-in) - Python内置的变量名(如print, len等)
作用域规则:LEGB
Python使用LEGB规则来查找变量名:
- 先在Local作用域查找
- 找不到则在Enclosing作用域查找
- 还找不到则在Global作用域查找
- 最后在Built-in作用域查找
- 如果都找不到,则抛出NameError
示例
1. 局部作用域(Local)
def func():
x = 10 # 局部变量
print(x)
func() # 输出: 10
print(x) # 报错: NameError: name 'x' is not defined
2. 嵌套作用域(Enclosing)
def outer():
y = 20 # 嵌套作用域变量
def inner():
print(y) # 可以访问外部函数的变量
inner()
outer() # 输出: 20
3. 全局作用域(Global)
z = 30 # 全局变量
def func():
print(z) # 可以访问全局变量
func() # 输出: 30
4. 内置作用域(Built-in)
print(len("hello")) # len是内置函数
修改作用域变量
修改全局变量
要使用global关键字:
count = 0
def increment():
global count
count += 1
increment()
print(count) # 输出: 1
修改嵌套作用域变量
Python 3中使用nonlocal关键字:
def outer():
num = 10
def inner():
nonlocal num
num = 20
inner()
print(num) # 输出: 20
outer()
常见注意事项
- 变量遮蔽(Shadowing): 局部变量会遮蔽同名的全局变量
x = 10
def func():
x = 20 # 这是一个新的局部变量
print(x) # 输出: 20
func()
print(x) # 输出: 10 (全局变量未被修改)
循环和条件语句没有独立作用域:
for i in range(5):
pass
print(i) # 输出: 4 (i仍然存在)
类定义中的特殊作用域:
class MyClass:
x = 10 # 类变量
def method(self):
print(x) # 错误! 不能直接访问类变量
print(self.x) # 正确
这个必须要理解,这个没办法理解直接放弃吧,
看官点个赞呗
相关推荐
- Python合集之Python字符串常用操作(一)
-
在上一节的合集中,我们了解了Python集合增删改及集合间运算的相关知识,本节我们将进一步了解一下Python字符串的常用操作的相关知识。1.拼接字符串使用+运算符可完成对多个字符串的拼接,+运...
- Python 入门系列——17. tuple 简介
-
tupletuple常用来将多个item放在一个变量中,同时tuple也是python4个集合类型之一,其他的三个是:List,Set,Dictionary,它们都有自己的用途和场景。tupl...
- Python基础 - 变量的作用域(python中变量由什么组成)
-
变量的作用域决定了变量在程序中的可见性和生命周期。在Python中,变量的作用域有以下几种:局部作用域(当前函数内部)嵌套作用域(外层函数)全局作用域(模块级别)内置作用域(Python的内置函数和内...
- Python中冷门但非常好用的内置函数
-
Python中有许多内置函数,不像print、len那么广为人知,但它们的功能却异常强大,用好了可以大大提高代码效率,同时提升代码的简洁度,增强可阅读性Countercollections在pytho...
- Python常用函数整理(python常用函数大全pdf)
-
以下是Python中常用函数整理,涵盖内置函数、标准库及常用操作,按类别分类并附带示例说明:一、基础内置函数print()输出内容到控制台。pythonprint("Hello,World!")#...
- 新手易犯错的地方Python作用域(python作用域和命名空间)
-
好多新手一开始比较容易犯错的地方理解作用域对于编写高效的python代码十分重要现在就讲下四种作用域,按照从内到外的顺序:局部作用域(Local)-在函数内部定义的变量嵌套作用域(Enclosin...
- 函数与模块:Python编程中的核心工具
-
一、函数的定义与核心概念1.1函数的定义函数是封装可重复执行代码的模块化单元,通过命名的方式组织代码逻辑,实现代码复用和功能解耦(将不同功能独立开来,减少代码之间的依赖关系)。其基本语法结构为:de...
- 太好用!教你几招Python魔法方法的妙用
-
专注Python、AI、大数据,请关注公众号七步编程!Python是一种简单的编程语言,满足一个需求,可以有各种各样的实现方法。正是因为它可以通过各种串联满足很多复杂的逻辑,因此,对代码可读性关注度不...
- 深入解析Python中的range()函数(python里面range函数)
-
range()是Python中一个非常基础且功能强大的内置函数,广泛用于循环控制和数字序列生成。它在迭代、索引处理和循环次数控制中扮演重要角色。本文将从基础用法到高级技巧,全面解析range()的使用...
- 站长在线python精讲在Python中使用len()函数计算字符串长度详解
-
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中使用len()函数计算字符串的长度详解》。本知识点主要内容有:在Python中使用len()函数计算字符串在UTF-8编...
- linux工作中常用之必备基础命令(二)
-
1、clear命令功能说明:清屏。举例:clear;ctrl+l2、who命令功能说明:当前在本地系统上的所有用户的信息举例:whoami;who3、uptime命令功能说明:查询系统...
- CentOS7装Ollama,本以为小菜一碟,没想到掉坑里了!
-
今天准备在CentOS7上安装Ollama,原本以为是小事一桩。哪想还是遇上了点小麻烦。因为在Windows上安装Ollama太小儿科了,上ollama.com网站下载程序,一键安装即可,最多就是设...
- Linux下 sudo命令(linux里sudo怎么用)
-
平常使用Linux的时候,都是用普通用户登录执行命令,但是有些命令需要root权限才能执行,如果切换到root用户去执行,就需要输入root密码,为了系统的安全性,应该尽可能少的直接在终端上输入roo...
- CentOS7.3 Linux系统中杀死进程的方法
-
CentOS7.3学习笔记总结(二十四)-Centoslinux系统中杀死进程的方法在工作中,我常常需要终止有问题的进程,一般通过程序的关闭命令把进程关闭掉,这是最安全的方法,但是有些时候,我们无法...
- Linux(CentOs7)防火墙命令,两种使用方式示例
-
一、CentOs7关闭防火墙的命令1:查看防火状态systemctlstatusfirewalldserviceiptablesstatus2:暂时关闭防火墙systemctlstop...
- 一周热门
- 最近发表
- 标签列表
-
- ps像素和厘米换算 (32)
- 截取小数点后两位函数 (32)
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)