十八、python中匿名函数lambda,生成器函数yield及函数命名空间用法详解

1、匿名函数lambda,lambda主要是用于如果一个函数只有一条代码的时候。我们就可以用lambda匿名函数,后面用在数据分析中会比较多。

我们来先定义一个函数,把所有人的名字的首字母大写,按照我们原来的知识。

lis = ['xiaoming','lilei','xiaohong']
def toupper(name):
    return name.title()
for name in lis:
    print(toupper(name))
#输出结果是
Xiaoming
Lilei
Xiaohong

我们来用lambda函数来重新输出一下,大家记住这个数据结果就行,记得外面需要一个map

list(map(lambda name:name.title(),lis))
#输出结果是
['Xiaoming', 'Lilei', 'Xiaohong']

2、生成器函数,我们可以用元组来定义一个生成器,或者用yield来在函数在返回一个生成器

用元组来定义一个生成器,我们可以看到是一个生成器,我们可以用list把他输出出来

(i for i in range(10))
#输出结果是
<generator object <genexpr> at 0x000001EE7166A5E8>
list((i for i in range(10)))
#输出结果是
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 用yield来在函数在返回一个生成器,先定义一个函数,返回所有的身高,我们调用看一下,会看到返回的是一个生成器,这时我们需要用for循环把他输出出来

lis = ['xiaoming','lilei','xiaohong']
def get_high(lis):
    for item in lis:
        yield item + '....158'
get_high(lis)
#输出结果是
<generator object get_high at 0x000001EE7166AD68>
for item in get_high(lis):
    print(item)
#输出结果是
xiaoming....158
lilei....158
xiaohong....158


3、函数命名空间,函数中变量只能作用于当前函数,如果想在函数中调用外部变量就可以用global来调用

我们定义一个函数,求0-9的和并返回,我们调用一下,可以看到是返回45,但是我们直接输出num是会报错的,提示num未定义,因为num变量是在addnum函数中的

def addnum():
    num = 0
    for i in range(10):
        num += i
    return num
addnum()
#输出结果是45
num
#输出结果是
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-c774dac2b598> in <module>
----> 1 num

NameError: name 'num' is not defined

这时我们在外部加一个num=100,我们调用addnum(),发现结果没变化,这时我们直接输出num,会发现输出结果是100,而不是45,因为他是调用了外部的这个num的值

num = 100
def addnum():
    num = 0
    for i in range(10):
        num += i
    return num
addnum()
#输出结果是45
num
#输出结果是100

 这时我们想调用外部的这个num=100,我们可以在函数内部使用global调用,然后我们可以看到addnum最终输出的结果是145。num的话还是外部的100.

num = 100
def addnum():
    global num
    for i in range(10):
        num += i
    return num
addnum()
#输出结果是145
num
#输出结果是100

这节就讲到这里,有问题欢迎评论 

猜你喜欢

转载自blog.csdn.net/u010590983/article/details/89925367