第五周 内容回顾

第五周 内容回顾

1、常见的内置函数

函数名功能
abs()求绝对值
all()容器中所有数据为True时结果为True
any()容器中有一个数据为True时结果就为True
bin()十进制数转二进制
int()任意进制数转为十进制
bytes()字符串转二进制编码
callable()判断该名字能否添阔后后调用
char()依据ASCII码表示字符与数字间转换
dir()获取 该对象可以用句点符点出的方法
函数名功能
divmod()获取除法以后的整数与余数
enumerate()枚举(获取索引值)
eval()能够将字符串中的python代码执行
exec()能够将字符串中复杂的python代码执行
hash()返回一串随机的数字(哈希值)
help()查看使用帮助
isiinstance()判断该数据是否为某个数据类型
pow()幂指数
round()四舍五入 并不是很精确

2、可迭代对象

迭代就是更新换代,每次迭代基于上一次的成果

每一次的结果与上一次无关 不属于迭代

while True:
    print('哈哈')

每次迭代 都是基于上一次结果

n=0
while n <10:
    print(n)
    n+=1

2.1、可迭代对象区分

内置有__iter__方法的叫可迭代对象

通过句点符能够直接点出来的东西都叫内置

可迭代对象名字
str字符串
list列表
dict字典
tuple元组
set集合
f=open(r’usernaem.txt’,‘r’,encoding=‘utf’)文件本身是一个迭代器对象

可迭代对象能够支持for循环

3、迭代器对象

内置有__iter__并且有__next__的对象都称为迭代器对象

正因为有迭代器对象的存在,我们才能对字典、集合这些无序类型循环取值

可迭代对象用了iter后会变成迭代器对象

迭代器对象不管调用多少次双下iter后,都还是最初始的迭代器本身

迭代器对象迭代取值

list_1=['11','23','32','53']
new_list=list_1.__iter__()
print(new_list.__next__())
print(new_list.__next__())
print(new_list.__next__())
>>>
11
23
32

迭代器反复使用情况

list_1=['11','23','32','53']
print(list_1.__iter__().__next__())
print(list_1.__iter__().__next__())
print(list_1.__iter__().__next__())
print(list_1.__iter__().__next__())
print(list_1.__iter__().__next__())
>>>
11
11
11
11
11

将迭代器对象重复迭代取值

list_1=['11','23','32','53']
new_list_1=list_1.__iter__()
print(new_list_1.__iter__().__next__())
print(new_list_1.__iter__().__next__())
print(new_list_1.__iter__().__next__())
>>>
11
23
32

__iter____next__还可以写成iter()

nuw_list_1=iter(list_1)
next(new_list_1)

3.1、迭代器取值与索引取值的差异

  • 索引取值:
    • 优点:可以反复取任意一个索引对应的值
    • 缺点:不能对无序的容器类型取值
  • 迭代取值:
    • 优点:能够对任何迭代器进行取值
    • 缺点:取值只能往后取不能往回取

4、模块的简介

模块的理解:
模块可以看成是一系列功能的结合体,使用了模块就是拥有了这结合体的所有功能

模块的分类:

  1. 内置模块:

    1. python解释器自带的,直接可以使用的模块
  2. 自定义模块:

    1. 自己写的模块
  3. 第三方模块

    1. 别人写好的模块,都是别人写好发在往上的,可以下载下来使用

    2. 例如:图形识别,语音识别,图形可视化

自定义模块创建注意事项:

  • 项目中一般py文件都会以纯英文命名
  • 并且不可以使开头数字名字
  • 项目的目录创建也嘚用英文

5、导入模块的两种句式

同一给执行文件,反复导入相同的模块。导入语句只会执行一次

导入句式一:

在此文件中代码都可已利用被导入文件名后面句点符来使用被导入文件中的功能

优点:能够通过点的形式直接用到该py文件中名字

缺点:权限太大,所有名字都能使用

import 被导入文件名

导入句式二:

使用这种句式,在调用文件内功能时,不用再在名字前面加文件名前缀

优点:指名道姓的选择需要使用的功能名字

缺点:变量名回与当前文件变量名字产生冲突

from 被导入文件名 in 被导入文件

5.1、导入句式的其他使用技巧

  1. 起别名

当导入多个模式时,出现模块文件名相同或文件中名字相同时,可以通过起别名方式,防止模块冲突

from Day21.a import name as n
from Day22.a import name as m
  1. 导入多个名字

在import后面,通过逗号隔开,可以一次导入多个名字或多个文件

from Day21 import a,b
print(a,name)
print(b.my_rang(10))
  • 导入多个模块功能时尽量分开导入,除非功能都相似,如果是导入同一模块中的名字则可以适用
  1. 全导入

在模块空间中使用,from···import句式将名字一次性被全局空间绑定,那么就可以用星号

在模块文件,还可以使用__all__=[‘‘导入的名字’’]控制*能够获取的名字填入的可以获取,没填入的不能获取

from Day21.a import *


print(name)
print(name_1)

6、判断文件类型

py文件中有一个自带的内知名__name__作为执行文件时,运行输出双下main

当py文件作为被导入文件时,输出为该文件名

主要作用:用于开发模块的作者自己测试自己的代码

if __name__ == '__main__':
    #当文件为执行文件时就会执行子代码
  • pycharm中可以编写main按tab键自动补全

7、模块查找顺序

查找顺序:

  1. 先取内存中查找
  2. 再去内置中查找
  3. 再去sys.path中查找

导入不在同一级目录下文件时

  1. sys.path.append(目标文件所在路径)
  2. 利用from···import····句式

8、绝对导入与相对导入

只要涉及到模块导入,那么sys.path永远以执行文件为准

8.1、绝对导入

由于pycharm会自动将项目根目录添加到sys.path中,所以查找模块不报错的方式就是从根路径一层层往下找(通过句点符连接下一层目录名)

如果不是用pycharm运行。则需要先将项目根目录添加到sys.path(针对项目根目录的绝对路径可以通过os模块中path.dirname获取)

from Day23.bin import start

8.2、相对导入

相对路径只能在模块中使用,不能再执行文件中使用

相对路径不用参考执行文件所在的路径,直接以当前模块文件路径为准

相对路径在项目比较复杂的情况可能会出错

符号功能
.表示当前路径
..表示上一层路径
../..表示上上层路径
from..conf import settings

9、包的概念

如何理解包:

专业的角度:内部含有__inter__.py目录

直观角度:就是一个文件夹

包的作用:

内部存放多个py文件(模块文件),仅仅只是为了更方便管理模块文件

具体使用:

语句格式:import 包名

导入包名其实导入的是里面的双下init.py 文件(该文件相当于是这个包的关键,它那有什么 我们才能从它那获取什么)

在python3解释器中,其实包文件中有没有__inter__.py已经无所谓了,都是可以当作包
但是在python2版本解释器中,为奴见下面必须要有__inter__.py文件才能当作包

10、软件开发目录规范

目录名其内置文件作用
binstrat.py存储启动程序
confsettings.py存储程序的配置文件
corvesrc.py存储程序的核心功能文件
libcommone.py存储程序的公共功能文件
dbuserinfo.jason存储程序的数据
loglog.log存储程序的
interfaceuser.pt order.py goods.py存储程序接口的文件
readem.txt/存储程序的说明,广告之类的
requierments.txt/存户程序中使用的第三方模块名以及对应的版本

拓展知识

我们在编写代码的时候,可以不完全遵循上面的文件名。

start.py可以放在bin文件下也可以直接放在项目根目录

db目录 之后会被数据库软件替代

log目录之后也会被专门的日志服务替代

11、常见的内置模块

11.1、callections 模块

  1. namedtiple 具名

生成可以使用名字来访问元素内容得tuple

from collections import namedtuple
point=namedtuple('三维坐标'['x','y','z'])
res_1=point(2.5,6)
print(re_1,res_2)
  1. deque 双端队列

可以从左右两边添加或删除元素

from collections import deque
dt_1=deque()
dt_1=append(111)
dt_1=append(222)
dt_1=append(33)
dt_1=appendleff(444) # 从左变添加元素
print(dt1)
dt1.popleft() #从左边删除
  1. orderedDict有序字典

可以将字典变得有序,顺序按键值添加得顺序

from collections import ordered Dict
od_1=orderedDict([('a',1),('b',2),('c',3)])
  1. defaultdict

可以给字典键值添加一个默认得数据类型

lst= ['A', 'B', 'C', 'D', 'e']
dic = defaultdict(int)
res=1
for i in lst:
    dic[i] +=1


print(dic)
>>>>>>>>>>>>>>>>>>>>>>>>>>
defaultdict(<class 'int'>, {'A': 1, 'B': 1, 'C': 1, 'D': 1, 'e': 1})
  1. counter 元素计数

可以将容器中元素进行计数,元素与个数组为键值对,返回一个字典

list=[5,4,4,6,4,5,6,1,3,5,1,1,]
res = 'abcdeabcdabcaba'
from collections import Counter
res1 = Counter(res)
res2=Counter(list)
print(res1,res2)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}) Counter({5: 3, 4: 3, 1: 3, 6: 2, 3: 1})

11.2、time 时间模块

  1. time.time

输出一个时间戳

import time

print(time.time)
  1. time.gmtime 结构化时间

输出当前 结构化时间 或将时间戳转结构化时间

import time
print(time.getime())
  1. time.strftime格式化时间

输出当前格式化时间,或将结构化时间转为格式化时间

print(time.strftime('%y-%m-%d %H:%M:%S'))
res=time.localtime()
print(res)
print(time.strftime('%y-%m-%d %H:%M:%S',res))
  1. time.strptime格式化转结构化

格式化时间转为结构化时间

print(time.strptime('22-07-14 18:36:04','%y-%m-%d %H:%M:%S'))

11.3、datetime 模块

与time模块类似,都是与时间操作有关

  1. datetime获取精确的时间
import datetime

res=(datetime.datetime.today()) #取现在的时间 非常精确
print(res)
print(res.date())

在提取中的时间中可以通过句点符 关键字来提取对应的值

关键字取值
year
moth
weekday第几周
isoweekday第几工作日
  1. timedelta()通过括号内内加参数来定义时间差
import datetime
res=(datetime.datetime.today())
time_1=datetime.timedelta(hours=24)
res_2=(res + time_1)  # 通过时间加时间差 得出将来时间
print(res_2)  
print(res_2 - res)  #通过将来时间 减现在时间 得出时间差

时间功能扩展

import datetime
print(datetime.datetime.now()) # 获取当前东八区时间
print(datetime.datetime.utcnow()) # 获取0时区时间
print(datetime.datetime(2023, 7, 15, 15, 16)) 定义一个时间

11.4、os模块

os模块主要是根据当前程序所在的操作系统打交道

函数名功能
mkdir创建单极目录
makdirs创建多级目录
mdir删除单级目录
removedirs删除多级目录
lisdir获取指定路径下目录与文件(列表形式返回)
rename重命名指定文件
remove删除指定文件
getcwd查看当前操作路径(绝对路径)
chadir操作路径
函数名功能
path.abspath(__file__)获取当前文件的绝对路径
path.dirname(__file__)获取当前文件目录的绝对路径
exists判断是否存在该目录,文件
isdir/isfile判断是否存在该目录/文件
path.join拼接路径专用

11.5、sys 模块

sys模块主要是根python解释器打交道的

  • sys.path 查看程序环境变量
  • sys.cersion 查看python 解释器 当前版本信息
  • sys.platform 查看当前平台

查看程序环境变量 解释器等信息

import sys
print(sys.path) # 查看程序环境变量
print(sys.version)
print(sys.platform)
  • sys.argv

利用python解释器终端运行时该文件,可以接受外界输入

res=(sys.argv)
print(res)
if len(res)==3
username = res[1]
    password = res[2]
    if username == 'kk' and password == '123':
        print('您可以正在执行该文件')
    else:
        print('用户名或密码错误')
else:
    print('请填写用户名和密码')

11.6、json模块

json模块 也称为序列化模块
json模块是不同编程语言交互必备的模块

json数据格式是字符串

json格式的数据引号都是双引号

关键字功能
dumps将其他数据转为json格式字符串
loads将json格式字符串转为对应数据类型
dump将其他数据以json格式字符串写入文件
load将文件中json格式字符串读取出来转化为对应的数据类型
  • dumps 转为json格式字符串
  • loads 转为对应数据类型
import json
dict_1={'name':'kk','age':'18','gender':'male'}
res=json.dumps(dict_1)  # 利用 dumps将字典转为json 字符串 形式
print(res)
with open(r'username','w',encoding='utf')as f,open(r'username','r',encoding='utf')as read_1:
    f.write(res)  # 将json字符串形式的 字符串写入文件中
    f.flush()  # 保存文件
    res_1=read_1.read()  #将写入的 jason 字符串读出
print(json.loads(res_1)) # 利用loads转回字典
  • dump 转为json格式字符串并写入
  • load 取出并转为对应数据类型
import json
dict_1={'name':'kk','age':'18','gender':'male'}
with open(r'username','w',encoding='utf')as f,open(r'username','r',encoding='utf')as read_1:
    json.dump(dict_1,f)  # 利用dunmo直接将字典变为 json格式字符串并自动传入文件中
    f.flush()  # 保存
    print(json.load(read_1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值