python中oxf2是多少_python之函数进阶

本章内容

引入

命名空间和作用域

函数嵌套及作用域链

函数名的本质

闭包

本章小结

引入

假如有一个函数,实现返回两个数中的较大值:

def my_max(x,y):

m = x if x>y else y

return m

bigger = my_max(10,20)

print(bigger)

之前是不是我告诉你们要把结果return回来你们就照做了?可是你们有没有想过,我们为什么要把结果返回?如果我们不返回m,直接在程序中打印,行不行?

来看结果:

defmy_max(x,y):

m= x if x>y elseyreturnm

my_max(10,20)print(m)

D:Python36python3.exe D:/Python36/Python_workspace/s9/函数/求两个数的较大者.py

Traceback (most recent call last):

File"D:/Python36/Python_workspace/s9/函数/求两个数的较大者.py", line 6,

in

print(m)

NameError: name'm' is notdefined

Process finished with exit code1

报错了!错误是“name 'm' is not defined”。变量m没有被定义。。。为啥?我明明定义了呀!

在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的。

从python解释器开始执行之后,就在内存中开辟了一个空间

每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。

但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心。

等执行到函数调用的时候,python解释器会再开辟一块内存来存储这个函数里的内容,这个时候,才关注函数里面有哪些变量,而函数中的变量

会存储在新开辟出来的内存中。函数中的变量只能在函数的内部使用,并且会随着函数执行完毕,这块内存中的所有内容也会被清空。

我们给这个“存放名字与值的关系”的空间起了一个名字——叫做命名空间

代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间,在函数的运行中开辟的临时的空间叫做局部命名空间

命名空间和作用域

3350b879e51a2d3a4ab06ea2e0854724.gif

5c953341f0166a24adb5872919d817e9.gif

>>> importthis

The Zen of Python, by Tim Peters

Beautifulisbetter than ugly.

Explicitisbetter than implicit.

Simpleisbetter than complex.

Complexisbetter than complicated.

Flatisbetter than nested.

Sparseisbetter than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should neverpasssilently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way maynot be obvious at first unless you're Dutch.

Now isbetter than never.

Although neveris often better than *right*now.

I

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值