当前位置:
首页 > 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 也一样
-
items
其他知识补充
-
导入模块
- import 模块
- from 模块.模块 import 模块
- from 模块.模块.模块 import 模块
-
相对导入 【模块必须有父级目录,不能再根目录下进行该操作】
- from .. import 模块
- from . import 模块
- 注意:文件和文件夹的命名不能是导入的模块名称相同,否则就会直接在当前目录中查找。
-
主文件【主函数】 (运行的py文件)
-
通过 属性 name 来区分,属性__name__的值为
__main__
,表示为主文件
-
通过 属性 name 来区分,属性__name__的值为
#判断是否为主文件,如果是主文件则执行
if __name__ == '__main__':
run() #执行入口
个人学习路上的一席土壤,希望自己在这块土壤里茁壮成长!内容贫乏,还望不吝赐教,多谢!
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式