一.return 返回值

自定义函数的返回值,return 可以把值返回到函数的调用处
(1) return + 六大标准数据类型 , 还有类和对象,函数
如果不定义return , 默认返回的是None
(2) 在执行完return之后,立刻终止函数,后面的代码不执行

模拟简单的计算器 + - * /

def func(sign,num1,num2):if sign == "+":res = num1 + num2elif sign =="-":res = num1 - num2elif sign == "*":res = num1 * num2elif sign == "/":if num2 == 0:return "除数不能为0,脑弟!"res = num1 / num2else:return "这个本计算器真算不了"return resres = func("+",3,5)
res = func("-",10,20)
res = func("*",10,20)
res = func("/",20,10)
res = func("/",20,0)
res = func("&",20,0)
print(res)

二.全局变量 和 局部变量

局部变量 : 在函数内部定义的变量(局部命名空间)
全局变量 : 在函数外部定义的或者使用global在函数内部定义(全局命名空间)
作用域: 作用的范围
局部变量作用域: 在函数的内部
全局变量作用域: 横跨整个文件
生命周期:
内置变量 > 全局变量 > 局部变量

1.局部变量

def func():# 定义局部变量a = 5# 获取局部变量print(a)# 修改局部变量a = 10print(a)func()
# print(a) error 不能再全局调用局部变量

2.全局变量

# 定义全局变量
b = 10
# 获取全局变量
print(b)
# 修改全局变量
b = 20def func():# 可以在函数内部获取全局变量print(b)
func()

3.使用global在函数内部创建全局变量

def func():global cc = 200
func()
print(c)

4.使用global在函数内部修改全局变量

d = 300
def func():global dd = 400
func()
print(d)  # 400

总结:
可以使用global 关键字在函数内部定义一个全局变量
也可以使用global关键字在函数内部修改一个全局变量

三.函数名的使用

1.函数名是个特殊的变量,可以当做变量赋值

函数可以像变量一样销毁
del a

2.函数名可以作为容器类型数据的元素

def func1():print("我是func1函数")
def func2():print("我是func2函数")
def func3():print("我是func3函数")lst = [func1, func2, func3]
for i in lst:print(i)i()"""
<function func1 at 0x000001561BB31F28>
我是func1函数
<function func2 at 0x000001561BD0A158>
我是func2函数
<function func3 at 0x000001561BECD620>
我是func3函数
"""

3.函数名可以作为函数的参数

def func1():print("我是func1函数")
def func2():print("我是func2函数")
def func3():print("我是func3函数")def func4(f):f()func4(func3)
# 我是func3函数

4.函数名可作为函数的返回值

def func1():print("我是func1函数")
def func2():print("我是func2函数")
def func3():print("我是func3函数")
def func(f):return fres = func(func2)
res()
# 我是func2函数

四.doc 或者 help查看文档

def eat_bigchang(something):"""功能: 大肠刺身参数: 肠子名字返回值: 吃的状态  """print("先把{}洗一洗".format(something))print("找出肠子头放嘴里")print("嘬!!")return "吃完了,满意的放下肠子,擦擦嘴"res = eat_bigchang("猪肠子")
print(res)
help(eat_bigchang)
res = eat_bigchang.__doc__
print(res)

五.函数的嵌套

函数之间可以互相嵌套
外层的叫做外函数
内层的叫做内函数
(1)内部函数可以直接在函数外部调用吗 不行!
(2)调用外部函数后,内部函数可以在函数外部调用吗 不可行!
(3)内部函数可以在函数内部调用吗 可以!
(4)内部函数在函数内部调用时,是否有先后顺序 有! 必须先定义再调用

外层是outer , 内层是inner ,最里层是smaller,调用smaller里面的所有代码

def outer():def inner():def smaller():           print("我是smaller函数" , id)smaller()inner()
outer()

LEGB 原则 (就近找变量原则)

找寻变量的调用顺序采用LEGB原则(即就近原则)
B —— Builtin(Python);Python内置模块的命名空间 (内建作用域)
G —— Global(module); 函数外部所在的命名空间 (全局作用域)
E —— Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)
L —— Local(function);当前函数内的作用域 (局部作用域)
依据就近原则,从下往上 从里向外 依次寻找

六.nonlocal 修改局部变量

nonlocal遵循LEGB就近找变量原则
(1)找当前空间上一层的局部变量进行修改
(2)如果找不到,会继续向上寻找
(3)最后什么也没有,直接报错

(1)找当前空间上一层的局部变量进行修改

def outer():a = 100def inner():nonlocal aa = 200print(a)inner()print(a)outer()

(2) 如果找不到,会继续向上寻找

def outer():a = 100def inner():def smaller():nonlocal a a = 400print(a)smaller()print(a)inner()print(a)
outer()
# 400 400 400

(3) 注意点:nonlocal只能修改局部变量

# 最后什么也没有,直接报错
a = 100
def outer():def inner():def smaller():nonlocal a a = 400print(a)smaller()print(a)inner()print(a)
outer()

(4) 不使用nonlocal 修改局部变量

def func():lst = [1,2,3,4]def inner():lst[-1] = 10inner()print(lst)
func()
# [1, 2, 3, 10]

七.locals 和 globals (了解)

locals 获取当前作用域中所有变量

locals 如果在全局,调用locals之后,获取的是打印之前的所有变量,返回字典,全局空间作用域
locals 如果在局部,调用locals之后,获取的是locals调用之前的所有变量,返回字典,局部空间作用域

# 例子1
def func():ff = 123
a = 1
b = 2
res = locals()
c = 3
print(res)
d = 4
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000025C21CDB278>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/培训/所有代码/day11/1.py', '__cached__': None, 'func': <function func at 0x0000025C21BD1F28>, 'a': 1, 'b': 2, 'res': {...}, 'c': 3}
# 例子2
a1 = 10
def func():a = 1 b = 2res = locals()c = 3print(res)d = 4
a2 = 20
func()
a3 = 30
# {'b': 2, 'a': 1}

globals 只获取全局空间中所有变量

globals 如果在全局,调用globals之后,获取的是打印之前的所有变量,返回字典,全局空间作用域
globals 如果在局部,调用globals之后,获取的是调用之前的所有变量,返回字典,全局空间作用域

# 例子1
def func():ff = 123
a = 1
b = 2
res = globals()
c = 3
print(res)
d = 4
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000014D6956B278>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/培训/所有代码/day11/1.py', '__cached__': None, 'func': <function func at 0x0000014D69461F28>, 'a': 1, 'b': 2, 'res': {...}, 'c': 3}
# 例子2
a1 = 10
def func():a = 1 b = 2res = globals()c = 3print(res)d = 4
a2 = 20
func()  # globals
a3 = 30
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001621179B278>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/培训/所有代码/day11/1.py', '__cached__': None, 'a1': 10, 'func': <function func at 0x0000016211691F28>, 'a2': 20}

八.globals 动态批量创建全局变量

1.用字符串定义全局变量

在全局的字典当中,通过添加键值对,自动创建全局变量

2.批量定义全局变量

def func():dic = globals()# 通过在全局系统字典当中,添加键值对,批量创建变量for i in range(1, 6):# "a%d" % (1) => "a1"  "a%d" % (2) => "a2"dic["a%d" % (i)] = i  # 1~5print(dic)
func()
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001565533B278>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/培训/所有代码/day11/1.py', '__cached__': None, 'func': <function func at 0x0000015655231F28>, 'a1': 1, 'a2': 2, 'a3': 3, 'a4': 4, 'a5': 5}

0717Python总结-return返回值,全局及局部变量,函数名的使用,函数的嵌套,nonlocal修改局部变量,及locals和globals相关推荐

  1. Python ------ return返回值等

    杂 return 全局变量和局部变量 函数名的使用 函数的嵌套 nonlocal return # ### return 返回值 """ 自定义函数的返回值,return ...

  2. c++ return返回值与内存

    在学习函数的时候,发现有些函数返回一个变量,有些返回引用,有些返回指向当前对象的指针,深入挖掘,发现这牵扯到内存相关的东西 1.内存 如下图:32位X86机器的内存布局图,内存主要分为栈.堆.BSS段 ...

  3. R语言return返回值的形式实战

    R语言return返回值的形式实战 目录 R语言return返回值的形式实战 #包含return的R函数 #不包含return的R函数

  4. return 返回值的问题

    def yue(): print("1. 打开手机") print("2. 打开陌陌") print("3. 找个漂亮的小姐姐") prin ...

  5. C#获取存储过程的 Return返回值和Output输出参数值

    一.不用SQLHelper.cs等帮助类 1.获取Return返回值  程序代码  存储过程 Create PROCEDURE MYSQL   @a int,   @b int AS   return ...

  6. 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值...

    关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...

  7. python return返回值_Python return语句 函数返回值

    return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...

  8. python没有return语句的函数将返回_为什么Python没有return返回值

    为什么Python没有return返回值 发布时间:2020-08-24 17:12:18 来源:亿速云 阅读:118 今天就跟大家聊聊有关为什么Python没有return返回值,可能很多人都不太了 ...

  9. return返回值返回到哪里

    c语言return,返回给了上一级,比如一个递归程序,从第三层返回到第二层:又比如一个普通的子程序,那就返回到主程序中去. 主程序中return返回给了操作系统. main函数调用了sum函数,sum ...

最新文章

  1. hive链接mysql的shell命令_Hive shell 基本命令
  2. [渝粤教育] 西南科技大学 英美文学 在线考试复习资料
  3. nyoj91 阶乘之和
  4. ymodem传输的终端工具_Serial for Mac(现代化的终端设计软件)
  5. rest syntax(parameters)
  6. [WPF系列]-DataBinding(数据绑定) 自定义Binding
  7. mysql cmd定时_windows下定时执行mysql冷备份
  8. 我的世界基岩版种子和java版种子_我的世界:当前基岩版最强村庄神种,村庄下面集合所有要素...
  9. DBeaver mysql驱动连接问题
  10. 【微信小程序怎么开店铺】微信小程序店铺怎么制作?
  11. 验证牛顿公式的局部收敛性,并找到对于牛顿公式不收敛(发散)的函数,比较二分法与牛顿公式的收敛速度
  12. Python分组百分比排名
  13. ResNet再进化!重新思考ResNet:采用高阶方案的改进堆叠策略
  14. spark JAVA 开发环境搭建及远程调试
  15. 【办公协作软件】万彩办公大师教程丨图片OCR工具的应用
  16. Coremail2022Q4邮件安全报告:暴力破解骤降,盗号问题有所缓解?
  17. H.323 and Associated Protocols
  18. csp-j2第四题解
  19. php面试自我介绍结束语,面试自我介绍的结束语
  20. 辗转相除法Python实现

热门文章

  1. 10分钟教你生成超高逼格微信朋友圈
  2. 挖掘用户反馈中的宝藏——NLP文本标签化解密
  3. windows server 2016 下域环境的搭建(完整版)
  4. 数据系统架构-5.实时离线统计系统
  5. 由dorp database 数字引发的思考
  6. Dell730xd服务器与IntelX520万兆网卡兼容性问题解决过程
  7. 因计算机中丢失msvcr120.dll,msvcr120.dll丢失怎样修复 附解决方法
  8. 上交计算机系专硕学费,上海交通大学2021级专硕学费再涨,最高翻3倍!@上海考研党...
  9. MATLAB符号积分范例
  10. [Zer0pts2020]Can you guess it?