python名称空间和函数名
名称空间
命名空间提供了在项目中避免名字冲突的一种方法
各个命名空间是独立的,没有任何关系的
一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响
'''其实就是存放变量名与变量值绑定关系的地方'''
1. 内置名称空间
python解释器提前定义好的
len () print () open ()
2. 全局名称空间
'在py文件中编写的代码运行产生的名字都会存到全局名称空间'
name = 'jason'
def index ():
pass
if True :
a = 111
for i in range (10 ):
pass
while True :
b = 222
3. 局部名称空间
函数体代码运行产生的都是局部名称空间
def index ():
name = 'jason'
'命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束
'
'我们无法从外部命名空间访问内部命名空间的对象'
1. 内置名称空间
python解释器运行 产生
python解释器关闭 销毁
2. 全局名称空间
py文件开始运行 产生
py文件运行结束 销毁
3. 局部名称空间
函数体代码开始运行 产生
函数体代码运行结束 销毁
名字查找顺序
1. 如果在局部名称空间
局部名称空间 >>> 全局名称空间 >>> 内置名称空间
2. 如果在全局名称空间
全局名称空间 >>> 内置名称空间
len = '我是全局名称空间中的len'
def index ():
len = '我是局部名称空间中的len'
print (len )
index()
print (len )
'''局部名称空间之间如果不是嵌套关系 那么互不干涉!!!'''
作用域
'作用域就是一个 Python 程序可以直接访问命名空间的正文区域'
程序任意阶段任意位置均可使用(全局有效)
程序任意阶段任意位置均可使用(全局有效)
一般情况下只在各自局部名称空间中有效(局部有效)
g_count = 0
def outer ():
o_count = 1
def inner ():
i_count = 2
global与nonlocal关键字
当内部作用域想修改外部作用域的变量时
就要用到 global 和 nonlocal 关键字
ddd = 11
def index ():
global ddd
ddd=222
print (ddd)
index()
"""
如果想要在局部修改全局的不可变类型
需要提前加关键字global申明
如果想要在局部修改全局的可变类型
不需要加关键字global申明
"""
def index ():
x = 111
l1 = [11 , 22 , 33 ]
def f1 ():
nonlocal x
x = 333
l1.append(44 )
f1()
print (x)
print (l1)
index()
函数名的多种用法
print (index)
res = index
print (res)
res()
def index ():
print ('from index' )
def func (a ):
print ('from func' )
print (a)
a()
func(index)
def func ():
print ('from func' )
return index
def index ():
print ('from index' )
res = func()
print (res)
res()
'''容器类型:内部可以存档多个元素的数据类型>>>:列表、元组、字典'''
def index ():
print ('from index' )
l1 = [11 , 22 , 33 , 44 , index]
print (l1)
l1[-1 ]()
函数的嵌套
我们可以在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变
def outer ():
name = "python"
def inner ():
print (name)
return inner()
outer()
def my_max (a,b ):
'''返回两个数中的较大值'''
if a > b:
return a
return b
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统