Python自由之路(四)变量作用域

简介: Python中,在一个函数里,当搜索一个标识符的时候,先从函数你的局部变量开始搜索,如果局部作用域没有,再到模块所在的命名空间下的全局域找,再找不到就抛出NameError异常。一个变量的作用域与它寄住的名称空间有关(下面会讨论到)。
Python中,在一个函数里,当搜索一个标识符的时候,先从函数你的局部变量开始搜索,如果局部作用域没有,再到模块所在的命名空间下的全局域找,再找不到就抛出NameError异常。一个变量的作用域与它寄住的名称空间有关(下面会讨论到)。
 当函数中存在一个 变量 example,而全局域中也存在一个变量example,那么这时候规则会变得很有趣。但也很容易弄错。来看几个例子吧。。。
 _global="I'm a global variable"
 def testgloba1(): 
     print _global
 def testgloba2():
     print _global
      _global='123'
Testglobal2()异常:UnboundLocalError: local variable '_global' referenced before assignment
当在函数中创建了与全局域中同名的局部变量_global时,需要特别注意在_global之前是否又引用了同名的全局变量_global,如果是这样就会引发变量未声明的异常,接下来看看解释器怎样解决这个问题,我们引入了global关键字,在函数内部直接传递全局变量的引用:
 print _global ,id(_global)
def testgloba3():
  global _global   #1.直到再次声明同名变量_global之前的所有_global
      print _global,id(_global) #2.都是对全局变量_global的引用
      _global='123' 
      print _global,id(_global)
如果在#2之后还要对全局变量进行访问,那么最好就是在#1之后为全局_global定义一个新的别名。
注意:局部同名变量不能在global关键字之前使用,否则会有警告,而且结果也不正确。
 print _global ,id(_global)
def testgloba3():
  _global='123' 
      print _global,id(_global)
  global _global   #SyntaxWarning
      print _global,id(_global)
SyntaxWarning: name '_global' is assigned to before global declaration
Global关键字的还有一个作用就是在函数内部可以声明全局域的变量,看例子:
def testgloba4():
  global _my_global
  _my_global = "I'm a global variable from testglobal4()"
 Print _my_global
目录
相关文章
|
9天前
|
人工智能 Python
[oeasy]python039_for循环_循环遍历_循环变量
本文回顾了上一次的内容,介绍了小写和大写字母的序号范围,并通过 `range` 函数生成了 `for` 循环。重点讲解了 `range(start, stop)` 的使用方法,解释了为什么不会输出 `stop` 值,并通过示例展示了如何遍历小写和大写字母的序号。最后总结了 `range` 函数的结构和 `for` 循环的使用技巧。
20 4
|
28天前
|
Python
【10月更文挑战第5天】「Mac上学Python 8」基础篇2 - 变量深入详解
本篇将详细介绍Python中变量的使用方式和进阶操作,涵盖变量的输入与输出、变量的多重赋值、变量的内存地址管理以及变量的传递和交换等操作。通过本篇的学习,用户将对变量的使用有更深入的理解,并能灵活运用变量进行各种编程操作。
50 1
【10月更文挑战第5天】「Mac上学Python 8」基础篇2 - 变量深入详解
|
21天前
|
存储 Python
在Python中,什么是作用域
【10月更文挑战第12天】在Python中,什么是作用域
11 2
|
2月前
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
43 5
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
|
29天前
|
存储 编译器 Python
Python--变量、输出与输入
【10月更文挑战第5天】
|
30天前
|
测试技术 Python
Python MagicMock: Mock 变量的强大工具
Python MagicMock: Mock 变量的强大工具
|
27天前
|
存储 Java 编译器
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
这篇文章是关于Python编程语言中变量命名规则、基本数据类型、算数运算符、比较运算符、逻辑运算符、赋值运算符以及格式化输出与输入的详细教程。
18 0
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
|
1月前
|
存储 C语言 Python
解密 Python 的变量和对象,它们之间有什么区别和联系呢?
解密 Python 的变量和对象,它们之间有什么区别和联系呢?
19 2
|
2月前
|
Python
关于 Python 列表解析式的作用域问题
关于 Python 列表解析式的作用域问题
54 11
|
1月前
|
存储 自然语言处理 Python
解密 Python 的作用域和名字空间
解密 Python 的作用域和名字空间
13 1