20200303----python学习第17天

Posted limin1027

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20200303----python学习第17天相关的知识,希望对你有一定的参考价值。

今日内容

  迭代器

  生成器

  装饰器

  项目结果

  logging模块

内容回顾

  1.函数(内置函数与自定义函数)

    (1)基本函数的结构

      def func(a1,a2):pass

      参数/返回值/执行函数

     (2)函数小高级 函数做参数/函数做变量

     (3)函数中高级 函数做返回值/函数的嵌套

     (4)装饰器&闭包

     (5)匿名函数

     (6)递归

     (7)内置函数

  2.模块(内置模块/第三方模块/自定义模块)

    (1)定义模块

       内置:time/json/os/sys/datetime....[re模块]

       第三方:安装

           方法一:pip包管理工具:pip install xlrd

           方法二:源码安装:

                a.下载源码包:压缩文件;b。解压文件;c:打开cmd窗口,并进入此目录:cd C:Python36Libsite-packages

                d.执行:python36 setup.py build(以安装setup.py文件为例)

                e.执行:python36 setup.py install(以安装setup.py文件为例)

                备注:安装路径为:C:Python36Libsite-packages(每人情况不同)

           目前了解的第三方模块:xlrd/requests

       自定义

        py文件/文件夹__init__.py

    (2)调用模块

      import

       import 模块1   调用方法为:模块1.函数()

       import 模块1.模块2.模块3.模块4  调用方法为:模块1.模块2.模块3.模块4.函数()

      from xx import xxx 

       from 模块1.模块2 import 函数  调用方法:函数()

         from 模块1.模块2 import 函数 as f  调用方法:f()

         from 模块1.模块2 import * 调用方法:函数1() 函数2()

       from 模块1 import 模块2 调用方法:模块2.函数()

       from 模块1 import 模块2 as m 调用方法:m.函数()

    特殊情况

       文件夹与包的区别:包多了一个__init__.py的文件

       import文件夹 加载__init__.py

  3.其他

    a.两个值数据交换

    b.推导式:列表/集合/字典

详细内容

  1.迭代器

    自己不会写迭代器,只用 

    任务:请展示列表中所有的数据

      方法一:while+索引+计数器

     方法二:迭代器:对模块对象(str/list/tuple/dict/set类创建的对象)可迭代对象中的元素进行逐一获取。具体表象为:具有__next__方法且每次调用都获取可迭代对象中的一个元素(从前到后意义获取)

    列表转换为迭代器:

     v1= iter([1,2,3,4])

     v1 = [1,2,3,4].__iter__()

    迭代器想要获取每个值,反复调用val = v1.__next__()   

"""
v1 = [11,22,33,44,55]
#列表转换为迭代器
v2 = iter(v1)
result1 = v2.__next__()
print(result1) #输出结果为:11
result2 = v2.__next__()
print(result2) #输出结果为:22
result3 = v2.__next__()
print(result3) #输出结果为:33
result4 = v2.__next__()
print(result4) #输出结果为:44
result5 = v2.__next__()
print(result5) #输出结果为:55
"""

"""
v1="alex"
v2 = iter(v1)
while True:
try:
val = v2.__next__()
print(val)
except Exception as e:
break
#输出结果为:a l e x
"""
#直到报错:stoplteration错误,表示已经迭代完毕。
#如何判别一个对象是否是迭代器:内部是否有__next__方法;
for循环
v1 = [11,22,33,44]
#1.内部会将v1转换成迭代器
#2.内部反复执行,迭代器:__next__()
#3.取完不报错
for item in v1:
print(item)

  2.可迭代对象    

    # #内部具有__iter__()方法且返回一个迭代器。
    # v1 = [11,22,33,44]
    # v2 = v1.__iter__() #转换为迭代器
    # #可以被for循环

  3.生成器

‘‘‘
#函数
def func():
return 123
func()

#生成器函数(内部是否包含yield)
def func():
print(‘f1‘)
yield 1
print(‘f2‘)
yield 2
print(‘f3‘)
yield 3
print(‘f4‘)
yield 1
print(‘f1‘)
yield 4
‘‘‘
#函数内部代码不会执行,返回一个生成器对象
‘‘‘
v1 = func()
#生成器是可以被for循环,一旦开始循环那么函数内部代码就会开始执行;
for item in v1:
print(item)
def func():
count = 1
while True:
yield count
count += 1
val = func()
for item in val:
print(item)
‘‘‘
#总结:函数中如果存在yield,那么该函数就是一个生成器函数,调用生成器函数会返回一个生成器,
#生成器只有被for循环时,生成器函数内部的代码才会执行,每次循环都会获取yield返回的值。

‘‘‘
def func():
count = 1
while True:
yield count
count +=1
if count ==100:
return
val = func()
for item in val:
print(item)
‘‘‘

‘‘‘
#读文件
def func():
""""
分批去读取文件中的内容,将文件的内容返回调用者
:return:
"""
curson = 0
while True:
f = open(‘bd‘,‘r‘,encoding = "utf-8") #通过网络连接上redis
#代指 redis[0:10]
f.seek(curson)
data_list = []
for i in range(10):
line = f.readline()
if not line:
return
data_list.append(line)
curson = f.tell()
f.close() #关闭于redis的连接

for row in data_list:
yield row

for item in func():
print(item)
‘‘‘

总结

  迭代器:对可迭代对象中的元素进行逐一获取,迭代器对象的内部都有一个next方法,用于以一个个获取数据。

  可迭代对象:可以被for循环且此类对象中都有一个iter方法且要返回一个迭代器(生成器)

  生成器:函数内部有yield则就是一个生成器函数,调用函数则返回一个生成器,循环生成器时,则函数内部代码才会执行。

  特殊的迭代器: 

‘‘‘
def func():
yield 1
yield 2
yield 3

v = func()
result = v.__next__()
print(result)
result = v.__next__()
print(result)
result = v.__next__()
print(result)
result = v.__next__()
print(result)
‘‘‘
  特殊的可迭代对象:
def func():
yield 1
v = func()
result = v.__next__()
print(result)















以上是关于20200303----python学习第17天的主要内容,如果未能解决你的问题,请参考以下文章

学习java第17天

学习java第17天个人总结

201671010116. 2016-2017-17《Java程序设计》第17周学习总结

学习Linux第17节课

2018.09.17python学习第六天part3

学习第四天(2019-11-17)