Python全系列 教程
3567个小节阅读:5928.9k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
【示例】使用全局变量实现变量自增,但污染了其他程序
xxxxxxxxxx
#coding=utf-8
#需求:实现变量a 自增
#通过全局变量,可以实现,但会污染其他程序
a = 10
def add():
global a
a+=1
print("a:",a)
def print_ten():
if a==10:
print("ten!")
else:
print("全局变量a,不等于10")
add()
add()
add()
print_ten()
"""
运行效果:
a: 11
a: 12
a: 13
全局变量a,不等于10
"""
【示例】定义局部变量,不污染,但无法递增
xxxxxxxxxx
#coding=utf-8
#需求:实现变量a 自增
#通过局部变量,不能实现递增
a = 10
def add():
a = 10
a += 1
print("a:",a)
def print_ten():
if a==10:
print("ten!")
else:
print("全局变量a,不等于10")
add()
add()
add()
print_ten()
"""
运行结果:
a: 11
a: 11
a: 11
ten!
"""
【示例】通过闭包,可以是函数内部局部变量递增,也不会影响全部变量,完美!!
xxxxxxxxxx
#coding=utf-8
#需求:实现变量a 自增
#通过闭包,也没有污染全局变量a。也实现了自增
a = 10
def add():
a = 10
def increment():
nonlocal a
a +=1
print("a:",a)
return increment
def print_ten():
if a==10:
print("ten!")
else:
print("全局变量a,不等于10")
increment = add()
increment()
increment()
increment()
print_ten()
print("global a:",a)
"""
运算结果:
a: 11
a: 12
a: 13
ten!
global a:10
"""
- 闭包在爬虫以及web应用中都有很广泛的应用
- 闭包也是装饰器的基础
- 我们后续可以通过实际场景使用闭包,本节课掌握基本语法即可
实时效果反馈
1. 如下关于关于闭包中的自由变量,说法错误的是:
A 自由变量:如果变量在一个代码块中被使用但不是在其中定义,则为自由变量
B 自由变量其实和全局变量,一模一样
C 自由变量不会被销毁
D 自由变量不会被垃圾回收机制回收,造成内存消耗
答案
1=>B