python基础13
名称空间的作用域
名称空间
作用域:
变量能够作用的范围
1.内置名称空间
在程序的任何阶段都可以使用(全局有效)
2.全局的名称空间
在程序的任何阶段任何位置都可以使用(全局有效)
3.局部的名称空间
在函数内部有效(局部有效)
####局部变量一般都在函数的内部使用,外部一般不使用
####在全局的变量我们称之为全局变量,全局变量在任何位置任何阶段都可以使用
global 和 nonlocals关键字的使用
global
在函数的内部不能直接修改外部的变量
1.在函数的内部修改外部的不可变的数据类型需要使用global关键字声明
2.在函数的内部修改可变的数据类型不需要global关键字声明
nonlocals
nonlocals的使用:
1.在函数内部修改外部的不可变的数据类型使用nonlocals关键字声明
2.在函数内部修改外部的可变数据类型不需要使用关键nonlocals关键字声明
函数对象
函数对象就是函数名
函数名的四种使用方法
1.函数名可以当变量名来使用
函数名就是函数的内存地址
1 def index(): 2 print(‘inde’) 3 4 a=index 5 a()#相当于index()
2.函数名可以当成函数的实参
def index(): print('from index') def func(name): print('from func') func(index)#name=index name()#等于index()
3.函数名也可以当成函数的返回值
1 def index(): 2 print(‘123’) 3 4 def outer(): 5 print(‘345’) 6 return index 7 8 outer()#相当于outer()=index 9 outer()()=index()
4.函数可以当成容器类型元素
1 def index() 2 print(‘1314’) 3 4 l=[1,2,index] 5 l[2]#相当于index 6 l[2]()#等于index()
5. 练习
1 def register(): 2 print('register') 3 4 5 def login(): 6 print('login') 7 8 9 def transfer(): 10 print('login') 11 12 13 def withdraw(): 14 print('login') 15 16 17 def shopping(): 18 print('login') 19 def shopping1(): 20 print('login') 21 22 func_dict = { 23 '1': register, 24 '2': login, 25 '3': transfer, 26 '4': withdraw, 27 '5': shopping, 28 '6': shopping1 29 } 30 while True: 31 print(""" 32 1. 注册功能 33 2. 登录功能 34 3. 转账功能 35 4. 提现功能 36 5. 购物功能 37 """) 38 choice = input('请输入你的选择:').strip() 39 if choice in func_dict: 40 # func_name = func_dict.get(choice) 41 # func_name() 42 func_dict.get(choice)()
函数的嵌套调用
函数之间相互调用,函数里面调用函数
常用场景:
1.定义一个函数,功能是比较两个数的大小
1 def index(a,b): 2 if a>b: 3 return a 4 return b 5 res=index(1,10) 6 print('res')
2.定义一个函数,比较4个数的大小
1 def my_max(a, b): 2 if a > b: 3 return a 4 return b 5 6 def index_max(a,b,c,d) 7 res=index(a,b) 8 res1=index(res,c) 9 res2=index(res1,d) 10 print(res2)
函数的嵌套定义(了解)
1 # 给外部的用户暴露出来一个接口,告诉他都有什么功能 2 def all_func(type): 3 def login(): 4 print('login') 5 6 def transfer(): 7 print('login') 8 9 def withdraw(): 10 print('login') 11 12 def shopping(): 13 print('login') 14 15 def shopping1(): 16 print('login') 17 18 if type == 1: 19 login() 20 elif type == 2: 21 transfer() 22 elif type == 3: 23 withdraw() 24 elif type == 4: 25 shopping()
闭包函数
1.什么是闭包函数
闭:闭就是函数内部定义函数,至少两层函数
包:内部的函数使用外部函数名称空间中的名字
#####同时满足两个条件才能成为闭包函数
2.闭包函数有什么用
#####闭包函数其实是给函数传参的第二种方法
方式一:
def index(name):
print(name)
index(‘kevin’)
比较两个数的大小---------->使用闭包函数该一下
1 def outer(a, b): 2 # a = 1 3 # b = 10 4 5 def my_max(): 6 if a > b: 7 return a 8 return b 9 10 return my_max 11 12 13 res=outer(2, 20) # my_max的内存地址,res----->my_max 14 print(res()) # my_max() 15 print(res()) # my_max() 16 print(res()) # my_max() 17 res1 = outer(3, 30) 18 print(res1()) 19 print(res1()) 20 print(res1()) 21 '''一次传值,多次调用'''
装饰器
#####饰器这个知识点它不是一个新的知识点,它是我们之前学的:名称空间、闭包函数、函数嵌套调用等知识点汇总而来的知识点.
什么是装饰器
器:就是工具
装饰:给被装饰的对象添加额外功能
装饰器核心思想:
就是在不改变被装饰对象的内部的代码和原有的调用方式的基础上再添加额外功能
1 # 背景知识 2 def index(): 3 print("from index") 4 index() 5 # 现在让你统计index函数执行完毕之后的执行时间 6 7 # 时间模块 8 import time # 内置模块,可以直接拿来使用 9 10 def index(): 11 time.sleep(3) 12 print('from index') 13 14 15 # 1. 在函数执行之前打印一个时间点 16 start_time = time.time() 17 index() 18 19 # 2. 在函数执行完毕之后在打印一个时间点 20 end_time = time.time() 21 22 # 3. 两者的差就是函数的执行时间 23 print("index函数一共执行了:%s秒" % (end_time - start_time))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY