Python 第十八天学习笔记

迭代器

提供迭代方法的容器称为迭代器,通常接触的迭代器有序列(列表,元组,字符串)和字典

字典:   {键:项}

links = {"爸爸":"father",\

         "妈妈":"mother",\
         "妹妹":"sister"}
for each in links:

    print("%s -> %s" % (each,links[each]))          %s表示字符串

结果:

爸爸 -> father
妈妈 -> mother
妹妹 -> sister


关于迭代,Python有两个BIF,分别是:

iter()      

next()

>>> string = "fishc"
>>> it = iter(string)

>>> while True:
try:
each = next(it)
except StopIteration:
break

print(each)

与for循环结果相同:

>>> for each in string:

print(each)


魔法方法:

__iter()__

__next()__

#斐波那契数列,一个数是前两个数的和
class Fibs:
    def __init__(self):
        self.a = 0
        self.b = 1
    def __iter__(self):
        return self
    def __next__(self):
        self.a, self.b=self.b, self.a + self.       译为:self.a = self.b  同时  self.b = self.a+self.b  ,一定是同时,不能分开写

        return self.a

>>> fibs = Fibs():

>>> for each in fibs:
if each < 20:

print(each)


生成器

def fibs():
a = 0
b = 1
while True:
a,b = b,a+b
yield a

for each in fibs():
if each <20:

print(each)



列表推导式

求100 以内,能被2整除,但不能被3整除的所有整数:

>>> a = [i for i in range(100) if not(i % 2) and (i % 3)]
>>> a
[2, 4, 8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98]

如果i是偶数,则  i%2 == 0  , 0 表示False,not(i % 2)  表示1,True  

如果i不能被3整除,则i%3不等于0,表示True             

True and True 表示True  , 但是注意 False and False 还是等于 False



字典推导式

>>> b = {i:i%2==0 for i in range(10)}
>>> b
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}


集合推导式

>>> c = {i for i in [1,1,2,3,3,4,5,5,6,7,7]}         (去除重复数)
>>> c
{1, 2, 3, 4, 5, 6, 7}


生成器推导式   用小括号括起来

>>> e = (i for i in range(10))
>>> e
<generator object <genexpr> at 0x0000005D9EDE87D8>
>>> next(e)
0
>>> next(e)
1

>>> sum (i for i in range(10) if i %2 == 0)

20


第十三章  模块

导入模块:

import 模块名

from 模块名 import函数名

import 模块名 as 新名字


__name__ == "__main__":

     test()

有了这个代码可以确保只有单独运行某一代码时才会执行  test()函数


查看文件路径


查看说明



更常用print(),给人看



查看变量说明



但是并不是所有这些名字对我们都有用,所以要过滤一些不需要的东西

用__all__属性



不是所有的模块都有 __all__属性,

如果一个模块设置了 __all__属性,那么使用  from timeit import * 这样的形式导入命名空间,就只有__all__属性这个列表里边的名字才会被导入,其他的名字不受影响

如果没有设置__all__属性,那么使用  from timeit import * 这样的形式导入命名空间,就会把所有不以下划线开头的名字都导入到当前的命名空间

所以建议在编写模块时,将对外提供的接口函数和类都设置到__all__属性这个列表里



课后题:


>>> a = range(5)

>>> it = iter(a)

>>> while True:
try:
each = next(it)
except StopIteration:
break

print(each)



猜你喜欢

转载自blog.csdn.net/weixin_41151172/article/details/80026952
今日推荐