Fork me on GitHub

python3 迭代

如果给定一个list或者tuple,我们可以通过for循环来遍历这个list或者tuple,这种遍历我们称为迭代、

如何判断一个对象是可迭代对象呢?方法是通过 collections 模块 的 Iterable 类型判断:

 

两个变量进行循环迭代。

 

 
引入两个变量的python   for循环
for x,y in [(1,1),(2,4),(3,9)]:
  print(x,y)

 

小结:任何可迭代对象都可以作为for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。

列表生成式
  列表生成式,是python内置的非常简单却强大的可以用来创建list的生成式、
print(list(range(1,11)))
 如果要生成[1*1,2*2,3*3,4*4,,,10*10]:
 L = [ ]
for x in rang(1,11):
  L.append(x*x)
print(L)

 

 for 循环后面还可以加上 if 的判断,这样我们就可以筛选出仅偶数的平方:
[x*x for x in range(1,11) if x % 2 == 0]
[4,16,36,64,100]

可以直接使用for循环的数据类型有以下几种:

1、集合数据类型,如list、tuple、dict、set、str等;
2、一类是generator,包括生成器和带yield的generator function。
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable
可以使用isinstance()判断一个对象是否是Iterable对象:

小结:
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

map/reduce
python内建了map()和reduce() 函数。
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

 

 

filter() 函数
filter() 函数是用于过滤序列的,他和map()类似,也接受一个函数和一个序列。和map()不同的是,filter()把每个

例如:过滤掉偶数,只留下奇数

 

 

 例如:把一个序列中的空字符串删掉,

 

 

sorted
排序算法
在python中,内置了sorted()函数就可以对list进行排序
sorted([36,5,-12,-9,24])
[-12,-9,5,24,36]

sort默认从小到大进行排序。它还可以搭配一个key函数来实现自定义的排序。俩如按照绝对值大小进行排序:

 

 这里我们按照名字的首字母从a-z进行排序,并且忽略大、小写。(key=str.lower)

 

 

函数作为返回值

只有调用函数 f 的时候,才真正计算求和的结果:

 

闭包


匿名函数
我们有时候不需要显式地定义函数,直接传入匿名函数更方便。
例如:list(map(lambda x : x*x,[1,2,3,4,5,6,7,8,9]))
[1,4,9,16,25,36,49,64,81]

通过对比可以看出,匿名函数lambda x:x*x 实际上就是:
                       def f(x):
                           return x*x
关键字lambda表示匿名函数,冒号前面的x表示函数参数。

装饰器
    由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。
偏函数
    Partial function
  

 

每一个包目录下面都会有一个__init__.py 的文件,不然Python 就把这个目录当成普通目录,而不是一个包。

 

 作用域:  private和public ,前面一个表示私有的类型,而public则是公有类型。

greeting() 函数不关心内部的private函数细节,这是一种有效的封装方式。

 

 

 

 

 

 

 

 

 

 

 

 

 

 


posted @ 2022-08-29 11:32  小百天  阅读(115)  评论(0)    收藏  举报