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]
#可变对象作为参数传递,传的是引用,内部修改影响全局
相关推荐
顾林海3 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱5 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽10 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码10 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱20 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵21 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate