Python函数作用域

函数作用域

函数作用域标志了变量的生命周期

本地&全局

python 复制代码
a = 1
def add(y,z):
	print y+z+a
	return y+z+a
  • 全局变量名:a add

    • 因为这个a是在这个文件内最外层注册的变量名,所以他是全局变量
    • 全局变量能够在函数内部直接使用,而不需要特定的声明
    • 全局变量的生命周期:在整个程序运行期间。
  • 本地变量名:y,z

    • y和z的注册地址在函数内部,y和z是局部变量
    • 局部变量生命周期:函数运行期间

python 复制代码
>>> a = 1
>>> def change():
...     a = 2
...     print(a)
...
>>> a
1
>>> change() #打印函数内部修改之后的a
2
>>> a #打印外部a
1
  • 外部的a并没有被修改
    • 这是因为,函数内部赋值 的变量除非声明为全局变量或非本地变量,否则均为本地变量
    • 这里的a = 2,因为是在函数内部使用赋值的,所以解释器会把它当作一个函数内部的变量,他的作用域是这个函数内部
    • 如果想修改 一个全局变量,只需要在函数内部被修改变量前加global语句
python 复制代码
>>> a = 1
>>> def change():
...     global a
...     a = 2
...     print(a)
...
>>> a
1
>>> change() #打印函数内部修改之后结果
2
>>> a #打印外部的a值
2

传值&传引用

  • 可变对象作为参数传递,可以在函数内部直接修改初始数据对象的值,是传引用
  • 不可变对象传递时,无法直接修改初始数据对象的值,是传值

传递一个不可变对象,按值传递:

python 复制代码
>>> a = 1
>>> def change(a):
...     a = 2
...     print(a)
...
>>> change(a)
2
>>> a
1

传递一个可变对象,按引用传递:

python 复制代码
>>> a = [1,2,3]
>>> def change(a):
...     a[0] = 'a'
...     print(a)
...
>>> a
[1, 2, 3]
>>> change(a)
['a', 2, 3]
>>> a
['a', 2, 3]
#可变对象作为参数传递,传的是引用,内部修改影响全局
相关推荐
我星期八休息44 分钟前
C++异常处理全面解析:从基础到应用
java·开发语言·c++·人工智能·python·架构
2401_841495641 小时前
【数据结构】汉诺塔问题
java·数据结构·c++·python·算法·递归·
哈里谢顿2 小时前
Celery app 实例为何能在 beat、worker 等进程中“传递”?源码与机制详解
python
qq_402605653 小时前
python爬虫(二) ---- JS动态渲染数据抓取
javascript·爬虫·python
AI数据皮皮侠3 小时前
中国地级市旅游人数、收入数据(2000-2023年)
大数据·人工智能·python·深度学习·机器学习·旅游
mooooon L3 小时前
DAY 43 复习日-2025.10.7
人工智能·pytorch·python·深度学习·神经网络
yzx9910133 小时前
数据库完整指南:从基础到 Django 集成
数据库·python·django
Allen_LVyingbo3 小时前
医疗科研管理系统到院级生命科学平台的升级路径
python·信息可视化·健康医疗·ai编程
MoRanzhi12033 小时前
11. Pandas 数据分类与区间分组(cut 与 qcut)
人工智能·python·机器学习·数学建模·分类·数据挖掘·pandas
码界筑梦坊4 小时前
276-基于Python的爱奇艺视频数据可视化分析系统
开发语言·python·信息可视化