名称空间
其实就是存放变量名与变量值绑定关系的地方 类似于民政局、警察局....
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)
x = 111
"""如果函数没有被调用 那么不要去管函数体代码有多复杂 先跳过"""
def f1():
x = 222
def f2():
x = 333
def f3():
print(x)
x = 444
f3()
f2()
f1()
'''局部名称空间之间如果不是嵌套关系 那么互不干涉!!!'''
def index1():
name = 'jason'
def index2():
age = 18
print(name)
index1()
index2()
作用域
内置名称空间
程序任意阶段任意位置均可使用(全局有效)
全局名称空间
程序任意阶段任意位置均可使用(全局有效)
局部名称空间
一般情况下只在各自局部名称空间中有效(局部有效)
'''也可以通过一些手段打破规则'''
global与nonlocal关键字
'''gloabl关键字:局部修改全局不可变类型'''
x = 111
def index():
x = 222
global x
x = 666
index()
print(x)
l1 = [111, 222, 333]
def index():
l1.append(444)
index()
print(l1)
"""
如果想要在局部修改全局的不可变类型
需要提前加关键字global申明
如果想要在局部修改全局的可变类型
不需要加关键字global申明
"""
def index():
x = 111
l1 = [11, 22, 33]
def f1():
x = 222
print(x)
nonlocal x
x = 333
l1.append(44)
f1()
print(x)
print(l1)
index()
"""
局部名称空间嵌套的情况下 内层如果想要修改外层
情况1数据是不可变类型
需要使用关键字nonlocal
情况2数据是可变类型
不需要使用关键字nonlocal
"""
函数名的多种用法
Author:Jason
def index():
print('from function 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 register():
print('注册功能')
def login():
print('登录功能')
def transfer():
print('转账功能')
def withdraw():
print('提现功能')
def check_order():
print('查看账单')
def shopping():
print('购物功能')
def check_account():
print('查看余额')
func_dict = {
'1':register,
'2':login,
'3':transfer,
'4':withdraw,
'5':check_order,
'6':shopping,
'7':check_account
}
while True:
print("""
1.注册功能
2.登录功能
3.转账功能
4.提现功能
5.查看账单
6.购物功能
7.查看余额
""")
choice = input('请输入您想要执行的功能编号>>>:').strip()
if choice in func_dict:
func_name = func_dict.get(choice)
func_name()
else:
print('功能编号不存在')
if choice == '1':
register()
elif choice == '2':
login()
elif choice == '3':
transfer()
elif choice == '4':
withdraw()
elif choice == '5':
check_order()
elif choice == '6':
shopping()
else:
print('请输入正确的功能编号')
函数的嵌套
def index():
func()
print('from index')
def func():
index()
print('from func')
func()
"""在学习函数的时候 前期一定要细心 死咬概念 定义调用"""
def my_max(a,b):
'''返回两个数中的较大值'''
if a > b:
return a
return b
def many_max(a,b,c,d):
'''返回四个数中的最大值'''
res = my_max(a,b)
res1 = my_max(res,c)
res2 = my_max(res1,d)
...
def all_func(cmd):
def register():
print('注册功能')
def login():
print('登录功能')
def transfer():
print('转账功能')
if cmd == '1':
register()
elif cmd == '2':
login()
elif cmd == '3':
transfer()
else:
print('哈哈哈 偷懒了 没有用刚刚的功能字典')
all_func('1')
all_func('2')
"""
函数的学习会让我们的代码逻辑更加清晰 更加便于维护
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人