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
这节就讲到这里,有问题欢迎评论