进击のpython
嵌套函数&匿名函数
讲完作用域之后
对变量的作用范围有大致的了解了吗?
讲个稍微小进阶的东西吧
能够帮助你更加的理解全局和局部变量
-
嵌套函数
玩过俄罗斯套娃不?
没玩过听过不?
没听过?很好!我就喜欢你这种“大人物”
从小的一点一点的往大了装,一个嵌套一个
函数也可以这么玩~~~
msg = "我是全局变量"
def func():
msg = "我是函数func的局部变量"
def func1():
msg = "我是函数func1的局部变量"
print(msg)
func1()
print(msg)
func()
print(msg)
结果是这个!能看懂不?
看不懂的继续看,看懂的可以跳到匿名函数了!
好,程序的执行步骤来了,现在来考考你吧
如果程序变为这样呢?输出结果是什么?自己动手敲敲
msg = "我是全局变量"
def func():
msg = "我是函数func的局部变量"
def func1():
# msg = "我是函数func1的局部变量"
print(msg)
func1()
print(msg)
func()
print(msg)
行了,这个想明白了,就差不多了(想不明白继续想!)
谈下一话题了
-
匿名函数
啥叫匿名?不知道就是匿(ni 四声)名,对吧!(看,又学英语又学汉语的)
在函数里,什么叫匿名呢?
就是不给起名字!
what???不给起名字???
def ():
这样????总觉得冥冥之中不对
觉得不对就对了,因为这么写就不对
先给个你熟悉的函数
def calc(x, y): return x ** y print(calc(2, 5))
能看明白吧,不执行了┗|`O′|┛ 嗷~~
现在把他给整匿名了!
那我们需要一个关键字来帮忙 lambda (都学多少关键字了?自己思考一下)
lambda x, y: x ** y
能看明白怎么变得不?看不明白就对比着写两遍!你就看出来了
但是奥,有些人他就发现了问题
我这要怎么调用???????
还是要起个名字(所以我就觉得这个有点智障)
func = lambda x, y: x ** y print(func(2, 5))
有啥用呢?有个函数是这样的
map(函数,可迭代对象)
不用管什么是可迭代对象,这里可以放列表,懂吧
这个函数的意思是把列表(可迭代对象)里的每一个值都拿出来执行一下前面的函数
我们可以试试这个函数
a = map(lambda x: x ** 2, [1, 2, 3, 4, 5]) for i in a: print(i, end=" ")
是吧,把列表里的每个数都进行二次方操作了
别问为啥用循环打印,先记住!
这样,匿名函数的稍微用途就出来了,你可以不用像原先一样
先定义函数,再调用
而是现写现用(依旧感觉鸡肋!)
但是函数体只能写简单的,以及三元运算
a = map(lambda x: x ** 2 if x < 4 else 0, [1, 2, 3, 4, 5])
for i in a:
print(i, end=" ")
自己执行打印吧!