关键字:return
自定义函数的返回值,return可以把值返回到函数的调用处
1.return+六大标准数据类型,还有类和对象,函数
如果不定义return,默认返回的是None
2.在执行return之后,立刻终止函数,后面的代码不执行
# 1.return的返回类型def func(): return 1 return 3.14 return "abc" return [] return () return {"a":1} passres=func() 如果不定义return,默认返回的是Noneprint(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 resres = 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=200func()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 aa()
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): fres = func(func2) f---> func2 -----> res=func2()res()
5.__doc__ 或者help查看文档
__doc__ 或者help查看文档 func(a): """ 功能:xxxx 参数:a 返回值:1 """ xxxxreturn 1help(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() 200outer()2.如果找不到,会继续向上寻找
2.如果找不到,会继续向上寻找 smaller(): nonlocal a a=400 400 smaller() 400outer()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 = 123a = 1b = 2res = 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 = 4a2 = 20func()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 = 4func() 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()总结
以上是内存溢出为你收集整理的day11:return关键字&全局/局部变量&函数名的使用&函数的嵌套&nonlocal关键字&locals/globals全部内容,希望文章能够帮你解决day11:return关键字&全局/局部变量&函数名的使用&函数的嵌套&nonlocal关键字&locals/globals所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)