VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 学习python基础函数编程部分梳理(2)

  • UTC/GMT:世界时间
  • 本地时间:本地时区的时间
  • time模块【获取时间戳】
    • time.time() :时间戳:1970-1-1 00:00 【随机值可以用到】
    • time.sleep(10) 休眠时间/等待秒数
    • time.timezone 时区
  • datetime模块
from datetime import datetime,timezone,timedelta
vl = datetime.now() #当前本地时间
v2 = datetime.utcnow() # 当前UTC时间
tz = timezone(timedelta(hours=7)) # 当前东7区时间
v3 = datetime.now(tz)
  • datetime时间格式转换
from datetime import datetime,timezone,timedelta
v1 = datetime.now()
# datetime时间格式转换字符串
v1.strftime('%Y-%m-%d %H-%M-%S')
#
v2 = datetime.strptime('2020-03-22','%Y-%m-%d')
  • datetime与时间戳的关系
ctime =time.time()
v1 = datetime.fromtimestamp(ctime) # 时间戳转datetime
v2 = datetime.now()
v2.timestamp() #datetime转时间戳

1.3 第三方模块【下载/安装/使用】

1.3.1 前提安装pip包管理工具 ,通过pip安装第三方模块

  • 先需要安装pip,然后通过pip下载安装需要的第三方模块 https://pypi.org
    • 默认在python的安装目录 \Lib\site-packages
# pip.exe所在目录添加到环境变量中
pip install 需要安装的模块名称
  • 常用第三方模块 [requests,xlrd]

1.3.2 源码安装第三方模块

  • 下载源码文件:压缩文件
  • 解压文件并通过命令进入此目录
  • 执行 python3 setup.py(模块安装文件名) build 【编译检查】
  • 执行 python3 setup.py(模块安装文件名) install 【安装】

1.4 自定义模块

1.4.1 步骤

  • 创建xxx.py文件
def func1():
    pass
def func2():
    pass
  • 导入自定义模块并调用功能
import xxx
xxx.func1()
xxx.func2()

2、异常处理

  • 基本语法
try:
    程序处理
except exception as e:
    print("异常处理")
  • try包含的代码执行报错,会直接捕获异常,try块内代码将不再继续执行。所以在循环内部try和try包裹循环,执行结果是不一样的。

17节课/18节课

1、迭代器

  • 迭代器:对可迭代对象中的元素进行逐一获取,且存在__next__方法。
  • 可迭代对象:可被for循环或内部有__iter__方法且返回一个迭代器。
# 列表转换成迭代器的两种方式:
v = [1,2,3,4]
#方式一
v1 = iter(v)
#方式二
v2 = v.__iter__()
# 迭代器逐一获取元素,反复调用__next__()方法
val = v1.__next__()

2、生成器

2.1 生成器

  • 生成器:
    & 函数内部具有yield关键字即为生成器函数
    & 生成器函数不在函数调用时调用,调用函数会返回一个生成器,只有当生成器在被for循环时生成器函数内部代码才会执行,
    每次for循环都会获取yield返回的值
def func():
    yield 1
    print("f1")
    yield 2
    print("f2")
    yield 3
    print("f3")
v = func()
# item只拿函数中yield的值
for item in v:
    print(item)
#输出结果:
# 1
# f1
# 2
# f2
# 3
# f3

  • 可迭代对象:被for循环且此类对象都拥有iter方法,且返回一个迭代器(也可以是生成器)
  • 生成器:可被for循环且拥有__iter__方法,同时也拥有__next__()方法,所以生成器也可以称为特殊的迭代器,或者特殊的可迭代对象
  • 可以通过div(函数对象)来查看函数对象拥有的方法
  • 生成器经典示例,【模拟redis分批读取数据】
#通过生成器读取大数据文件 	[模拟redis数据读取]
import time
"""生成所需数据
with open("data.txt",mode='a+',encoding='utf-8') as fileobject:
    for i in range(1,100):
        fileobject.write("你领取到的号牌是:"+str(i)+"\n")
"""
"""生成器函数"""
"""分批去读取文件中的内容,将文件的内容返回给调用者"""
def func():
    index=0
    while True:
        time.sleep(2)
        with open("data.txt",mode='r',encoding='utf-8') as fileobject: #连接上redis
           li = []
           fileobject.seek(index)
           for i in  range(10):
                line = fileobject.readline().strip()
                if not  line:
                    break
                li.append(line)
           index=fileobject.tell()
        # fileobject.close()
        for i in li:
            yield i

v=func()
for l in v:
    print(l)

2.2 生成器推导式

  • 列表推导式和生成器推导式的区别
#列表推导式
v1 = [i for i in range(10)]
#生成器推导式
v2 = (i for i in range(10))
  • 列表推导式立刻执行,返回for循环0~9的一个列表。
  • 生成器推导式返回的v2是一个生成器,内部for循环没有立刻执行,只有当后面存在for循环调用v2进行循环时,内部for循环才会执行,返回0~9元素
v1 = [lambda : i for i in range(10)] # 列表推导式
v1 = (lambda : i for i in range(10))  # 生成器推导式
# 两者区别
# 列表推导式
def func():
    result = []
    for i in range(10):
        def f():
            return i        
        result.append(f)
    return result
v = func()
for item in v:
    print(item()) # 9*9
#上面函数与下面推导式相等
v1 = [lambda : i for i in range(10)]
for item in v1:
    print(item())

#########################################
# 生成器推导式,
def func():
    for i in range(10):
        def f():
            return i
    yield f     
v = func()
for item in v:
    print(item()) # 0~9
   
# 上面函数与下面推导式相等
v2 = (lambda : i for i in range(10))
for item in v2:
    print(item)

2.3 yield from

  • yield from 后面的值需要返回一个生成器,【比如下面test()函数中的返回值不能是return】
  • 详见代码
def test():
    yield 1
    yield 2
    yield 3

def func():
    yield "alex"
    yield "enki"
    yield from test()
v = func()
for item in v:
    print(item)
# 执行结果
"alex"
"enki"
1
2
3

3、前面知识的补充

py2/py3的区别补充

  • str字符串类型和编码相关
    • py3中,str字符串类型 【一般用于内存中做数据操作,存储编码为unicode】
    • py3中,bytes字节类型 【一般用于网络传输和数据存储,具体编码有执行py文件的文件头编码类型决定】
    • py2中的unicode类型 ---> 为py3中的str类型
    • py2中的 str类型 ----> 为py3中的bytes类型
  • 字典中返回值的不同
    • items
      • py2 返回的列表
      • py3 迭代器 【不能通过索引取值】
    • values
      • py2 返回的列表
      • py3 迭代器 【不能通过索引取值】
    • keys
      • py2 返回的列表
      • py3 迭代器 【不能通过索引取值】
    • 同理 map/filter 也一样

其他知识补充

  • 导入模块
    • import 模块
    • from 模块.模块 import 模块
    • from 模块.模块.模块 import 模块
    • 相对导入 【模块必须有父级目录,不能再根目录下进行该操作】
      • from .. import 模块
      • from . import 模块
    • 注意:文件和文件夹的命名不能是导入的模块名称相同,否则就会直接在当前目录中查找。
  • 主文件【主函数】 (运行的py文件)
    • 通过 属性 name 来区分,属性__name__的值为 __main__ ,表示为主文件
#判断是否为主文件,如果是主文件则执行
if __name__ == '__main__':
    run() #执行入口

个人学习路上的一席土壤,希望自己在这块土壤里茁壮成长!内容贫乏,还望不吝赐教,多谢!

相关教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号