09-Python之路---函数进阶
2021-01-15 00:14
标签:关注 个数 完成 比较 闭包函数 lang image info put 程序员三大美德: 因为一直致力于减少工作的总工作量。 因为一旦让你去做本该计算机完成的事,你将会怒不可遏。 因为被荣誉感冲晕头的你会把程序写得让谁都挑不出毛病来。 大家好??, 现在让我们一起来学习一下函数进阶部分的内容?? 我们在前面学会了函数的基本使用,那么我们来看以下的代码: so? ??, 执行代码: 报错了!程序猿??最怕的并不是报错,而是报的错误解决不了。 我们来看下这个报错,“name ‘m‘ is not defined”,变量m没有被定义?,但是我们明明在函数内定义了! 首先,我们看看上篇文章中的一张图片,了解下代码运行时遇到函数是怎么做的: 这就是为什么变量m没有定义的原因? 而我们给这个“存放名字与值”的空间起来一个名字---命名空间 命名空间是一种绝妙的理念,让我们尽情的使用发挥吧!----《Python之禅》 命名空间一共分为三种: PS:*内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们拿过来就可以用的方法。 加载顺序:内置命名空间-->全局命名空间-->局部命名空间 取值顺序:局部命名空间-->全局命名空间-->内置命名空间 作用域就是作用范围(铜锣湾陈浩南??) 按照生效范围分为: global关键字的作用:全局声明 我们学过if语句嵌套,for循环嵌套,其实函数也可以嵌套 函数名本质上就是函数的内存地址 可以被引用 可以被当作容器类型的元素 PS: 一句话,可以当成普通变量用 内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数 闭包的常用的用法: 命名空间: 函数的嵌套: 嵌套定义:定义在内部的函数无法直接在全局被调用 函数名的本质: 就是一个变量,保存了函数所在的内存地址 闭包: 内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数 09-Python之路---函数进阶 标签:关注 个数 完成 比较 闭包函数 lang image info put 原文地址:https://www.cnblogs.com/mark-wq/p/12939649.html??Python之路---函数进阶??
?? 药引
def myfunc(x, y):
m = x + y
myfunc(10, 20)
print(m)
NameError: name ‘m‘ is not defined
1. 从Python解释器开始执行之后,就会在内存中开辟一个空间
2. 每当遇到一个变量时,就会把变量名和值的对应关系保存下来
但是当遇到函数定义时,解释器只是象征性的把函数名读入内存,表示知道有这个函数存在了,而函数内部的变量和逻辑,解释器不关心。
3. 等调用函数时,python解释器会在开辟一块内存来存储函数里的内容,这个时候才关注函数里面有哪些变量,而函数中的变量只能在函数内部使用,并且会随着函数执行完毕,这块内存中的内容会被清空(垃圾回收)
命名空间
作用域
global
a = 10
def func():
global a
a = 20
print(a)
func()
print(a)
函数嵌套
函数嵌套定义
def f1():
print("in f1")
def f2():
print("in f2")
f2()
f1()
函数嵌套调用
def max2(x, y):
‘‘‘比较两个数的大小‘‘‘
m = x if x > y else y
return m
def max4(a, b, c, d):
res1 = max2(a, b)
res2 = max2(res1, c)
res3 = max2(res2, d)
return res3
the_max = max4(23, -7, 30, 11)
print(the_max)
函数名
def func():
print(‘in func‘)
print(func) # output:
def func():
print(‘in func‘)
f = func
print(f)
闭包
def func(): # 外部函数
name = ‘mark‘
def inner(): # 内部函数
print(name)
print(inner.__closure__) #判断闭包函数的方法
return inner
f = func()
f()
总结
文章标题:09-Python之路---函数进阶
文章链接:http://soscw.com/index.php/essay/42011.html