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]
#可变对象作为参数传递,传的是引用,内部修改影响全局
相关推荐
2301_803875613 小时前
PHP 中处理会话数组时的类型错误解析与修复指南
jvm·数据库·python
m0_743623923 小时前
c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】
jvm·数据库·python
2501_914245934 小时前
CSS如何处理CSS变量作用域冲突_利用特定类名重写变量值
jvm·数据库·python
菜鸟学Python4 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
<-->4 小时前
Megatron(全称 Megatron-LM,由 NVIDIA 开发)和 DeepSpeed(由 Microsoft 开发)
人工智能·pytorch·python·深度学习·transformer
测试19984 小时前
2026最新软件测试面试八股文【附文档】
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
maqr_1105 小时前
MySQL数据库迁移到云端如何保障安全_数据加密与SSL连接配置
jvm·数据库·python
u0109147605 小时前
MySQL如何限制触发器递归调用的深度_防止触发器死循环方法
jvm·数据库·python
weixin_381288185 小时前
MySQL中如何使用HEX函数转换十六进制_MySQL进制转换函数
jvm·数据库·python
maqr_1105 小时前
HTML怎么生成订单预览_HTML只读订单信息结构【操作】
jvm·数据库·python