18-4-22列表推导式,函数,迭代器,返回值,匿名函数,高阶函数

列表推导式

l11 = [1,2,34,5,5,6,54,6,8]
l22 = [
12,32,44,65,768,9]
b = [x**
2 for x in l11 if x < 10]
#print(b)
xy = [[x,y] for x,y in zip(l11,l22)]
print(xy)

 

 

函数参数-可变对象与不可变对象的传递

   不可变类型传递的是值,相当于内容,不影响本身,只是修改了复制的对象;

   可变类型是将本身传过去,在方法内部修改后,在外部也有同样的影响;

 

关于函数的返回值

   函数并非总是将结果直接输出,想要把函数的结果返回给调用者,徐艳在函数中使用return;

   return语句用于退出函数,选择性的向调用者返回一个式子。直接return的语句返回None;

   一个函数里只会执行一次return,一次可以有多个发回值;

return后的语句不再执行;

print是将结果输出到控制台;return语句结束函数的调用,并将结果返回给控制台,需要通过print打印才能在控制台输出;

yield的作用是把一个函数变成一个generator;带有yield的函数不再是一个普通函数,Python解释器会将其视为一个生成器,调用此类型的函数时,会返回iterable迭代对象;

与return类似,都有返回值,但yield可以返回多次,return只能返回一次。使用yield返回结果的函数就是生成器,生成器一定是迭代器,反之不一定

 

迭代器

   迭代是python最强大的功能之一,是访问集合元素的一种方式。

   迭代器是一个可以记住遍历的位置的对象。从第一个元素开始访问,直到所有的元素被访问完毕时结束;

   迭代器的基本方法:iter()和next()

   字符串、列表、元祖和集合对象都可以用于创建迭代器;

List=[1,2,3]

it = iter(list)   #创建迭代器对象

print(next(it))   #输出迭代器的下一元素

 

生成器(generator)

   生成器是一个返回迭代器的函数,只能用于迭代操作,可以简单地理解为生成器就是一个迭代器。

   在调用生成器运行的过程中,每次遇到yield时,函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次从当前位置继续运行。

   生成器在python中是一个非常强大的编程结构,可以用更少的中间变量写流式代码,此外,相比其他容器更能节省内存和CPU。

  生成器表达式使用括号(),是列表推导式的生成器版本,它返回

的是一个生成器对象如下:

a = (x*x for x in range(10))
print(a)

结果如下:

<generator object<genexpr> at 0x000001CD85FF9938>

 

小结:

1,    容器是一系列元素的集合,str、list、set、dict、file、sockets对象都可以看作是容器,容器都可以被迭代(用for、while的语句),因此他们被称为可迭代对象。

2,    可迭代对象实现了__inter__方法,该方法返回一个迭代对象。

3,    迭代器持有一个内部状态的字段,用于记录下次迭代返回值,它实现了__next__和__iter__方法,迭代器不会一次性把所有元素加载到内存,而是在需要时生成返回结果。

4,    生成器是一种特殊的迭代器,它的返回值是通过yield。

 

全局变量

   对于不可变类型的全局变量,在函数中修改需要global声明

   对于可变类型的全局变量来说,要在函数中修改可以不使用global声明

 

局部变量,在函数内部定义的变量。

不同的函数,可以定义相同的名字的局部变量,相互不会产生影响。

 

Lambda表达式

   表达式规则为,lambda 参数列表:表达式

   Lambda的主体是一个表达式,不能写入太多的逻辑,其定义的函数的返回值就是表达式的返回值,不需要return。Lambda表达式的主要应用场景就是赋值给变量,作为参数传入其他函数。Lambda函数拥有自己的命名空间,且不能访问自有参数以外或全局命名空间里的参数。

a = lambda x : x * x
print(a(2))

 

递归函数

   递归是指子程序(或函数)直接调用自己或间接调用自己,是一种描述问题和解决问题的基本方法。

   实现斐波那契数列:

def Fibonacci(n):
   
if 0 <= n <= 2:
       
return 1
   
elif n>2:
       
return Fibonacci(n - 1) + Fibonacci(n- 2)
#a = Fibonacci(10)

 

常用的高阶函数

   map(func,seq())接收一个函数及多个集合序列,根据函数对序列做映射,然后返回新的map对象。

#map函数将两个列表相加返回给a2

l1 = [1,2,3,4]
l2 = [
2,4,6,7]
a2 =
map(lambda x,y:x+y,l1,l2)
print(list(a2))

   filter(func,seq)用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的filter对象。

#找出列表l1中小于3的部分

a3 = filter(lambda x:x<3,l1)
print(list(a3))

reduce(func,seq)对于序列中的所有元素调用func进行数据合并,可以给一个初始值。Reduce传入的函数必须接受两个参数

#l1求和

p = functools.reduce(lambda x,y:x+y,l1)
print(p)

#求和函数
p1 = lambda i:functools.reduce(lambda x,y:x+y,range(1,i+1))
print(p1(3))

 

Python闭包

   如果在一个内部函数,对外部作用域(非全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。装饰器就是一种闭包。

def fx(x):
   
def fy(y):
       
return x*y
   
return fy
print(fx(3)(2))

在上面fy()就是闭包

def fc(name):
    aa =
0
   
def fd():
       
nonlocal aa #nonlocal关键字指引python去外部寻找aa
       
aa += 1
       
print('hehe%s,%d'%(name,aa))
   
return fd
a = fc(
'hh')
print(a)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值