关键字:return
自定义函数的返回值,return可以把值返回到函数的调用处
1.return+六大标准数据类型,还有类和对象,函数
如果不定义return,默认返回的是None
2.在执行return之后,立刻终止函数,后面的代码不执行
# 1.return的返回类型 def func(): return 1 return 3.14 return "abc" return [] return () return {"a":1} pass res=func() 如果不定义return,默认返回的是None print(res)
2.在执行完return 之后,立刻终止函数,后面的代码不执行 print(1) print(2return 3 立刻终止函数,后面的print(4)和print(5)不执行 print(4print(5) res =print(res) for i in range(3): if i==2: return 1 (i) res = func() print(res) 0 1 1
3.模拟简单的计算器 + - * / func(sign,num1,num2): if sign=="+": res= num1+num2 elif sign==-: res =num1-*: res = num1*/: if num2 ==0: return 除数不能为0,老弟 res = num1/else这个本计算器真算不了" return res res = func(",3,5) res = func(,0) res = func(&print(res)
全局变量和局部变量
局部变量:在函数内部定义的变量(局部命名空间)
全局变量:在函数外部定义的或者使用global在函数内部定义(全局命名空间)
作用域:作用的范围
局部变量作用域:在函数的内部
全局变量作用域:横跨整个文件
生命周期:
内置变量>全局变量>局部变量
1.局部变量
1.局部变量 定义局部变量 a=5 获取局部变量 (a) 修改局部变量 a=10 (a) func() print(a) error 不能在全局调用局部变量
2.全局变量
2.全局变量 # 定义全局变量 b=10 获取全局变量 (b) 修改全局变量 b=20 可以在函数内部获取全局变量 (b) func()
3.使用global在函数内部创建全局变量
3.使用global在函数内部创建全局变量 global c c=200 func() print(c)
4.使用global在函数内部修改全局变量
4.使用global在函数内部修改全局变量 d=300 d d=400print(d)
5.总结:
可以使用global关键字在函数内部定义一个全局变量
也可以使用global关键字在函数内部修改一个全局变量
函数名的使用
1.函数名是一个特殊的变量,可以把函数当做变量对它赋值
print(我是func函数return 1 1.函数名是个特殊的变量,可以当做变量赋值 a=你好" (a) a= a() 函数可以像变量一样销毁 del a a()
2.函数名可以作为容器类型数据的参数
2.函数名可以作为容器类型数据的元素 func1(): 我是func1函数) func2(): 我是func2函数 func3(): 我是func3函数) lst=[func1,func2,func3] in lst: (i) i() func1() func2() func3()
3.函数名可以作为函数的参数
3.函数名可以作为函数的参数 ) func4(f): f() 我是func3函数 func4(func3)
4.函数名可以作为函数的返回值
4.函数名可以作为函数的返回值 func(f): f res = func(func2) f---> func2 -----> res=func2() res()
5.__doc__ 或者help查看文档
__doc__ 或者help查看文档 func(a): """ 功能:xxxx 参数:a 返回值:1 """ xxxxreturn 1 help(func) res = func.__doc__ (res) 输出结果: 功能:xxxx 参数:a 返回值:1
函数的嵌套
1.一个简单的例子
outer(): inner(): 我是inner函数) inner() outer() inner() 调用外部函数时,内部函数不可以再函数外部调用!
1.内部函数可以直接在函数外部调用吗?不行
2.调用外部函数后,内部函数可以在函数外部调用吗?不行
3.内部函数可以在函数内部调用吗? 可以
4.内部函数在函数内部调用时,是否有先后顺序?有!必须先定义再调用
2.函数嵌套案例
外层是outer,内层是inner,最里层是smaller,调用smaller里面的所有代码 smaller(): 我是smaller函数nonlocal关键字nonlocal 遵循LEGB就近找变量原则
1.找当前空间上一层的局部变量进行修改
2.如果找不到,会继续向上寻找
3.最后什么也没有,直接报错1.找当前空间上一层的局部变量进行修改
1.找当前空间上一层的局部变量进行修改 outer(): a=100 inner(): nonlocal a a=200 200 inner() 200 outer()2.如果找不到,会继续向上寻找
2.如果找不到,会继续向上寻找 smaller(): nonlocal a a=400 400 smaller() 400 outer()3.注意点:nonlocal只能修改局部变量
3.注意点:nonlocal只能修改局部变量 a=100 smaller(): nonlocal a nonlocal只能修改局部变量,而本程序中第一行的a是全局变量,nonlocal无法修改 a=400 (a) smaller() (a) inner() (a) outer()4.不使用nonlocal修改局部变量--->只能适用于列表
4.不使用nonlocal修改局部变量 func(): lst=[1,2,4] inner(): lst[-1]=10 inner() (lst) func()globals和locals
1.locals 获取当前作用域中所有变量
locals 如果在全局,调用locals之后,获取的是打印之前的所有变量,返回字典,全局空间作用域
locals 如果在局部,1)">调用之前的所有变量,局部空间作用域locals 在全局:获取打印之前的所有变量 func(): ff = 123 a = 1 b = 2 res = locals() c = 3 是一个大字典,里面有很多键值对,a:1 b:2 c:3均可以打印出来(截止到打印之前) d = 4 d:4 不会被打印locals 在全局 a1 = 10 func(): a = 1 b = 2 res = locals() c = 3 a:1 b:2 会被打印出来 截止到调用local()之前的都会被打印出来 d = 4 a2 = 20 func() a3 = 302.globals 只获取全局空间中所有变量
globals 如果在全局,调用globals之后,1)">打印之前的所有变量,全局空间作用域
globals 如果在局部,1)">调用之前的所有变量,全局空间作用域global 在全局 res = globals() a:1 b:2 c:3 截止到打印之前 c = 3 (res) d = 4global 在局部 a1 = 10 globals() c = 3 (res) d = 4 func() globals() a1:10 a2:20 截止到调用处 a3 = 303.globals 动态批量创建全局变量
1.用字符串定义全局变量 dic = globals() 必须是global定义的字典,普通字典无效 print(dic) 返回的是系统的字典 在全局的字典当中,通过添加键值对,自动创建全局变量 对应的键时变量名,对应的值是变量指向的值 dic[name"] = 致和print(name) 致和2.批量定义全局变量 func(): dic = globals() 通过在全局系统字典当中,添加键值对,批量创建变量 in range(1,6 "a%d" % (1) => "a1" "a%d" % (2) => "a2" dic[a%d" % (i)] = i 1~5 func()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。