一、包的具体使用

	包的名称可以作为模块导来导去,如果导包,是调用包文件夹下的__init__.py文件,所以就和昨天博客写的那个例子一样,在该文件中导入同目录下的文件,这样别人在导包时就可以点出来包下的文件了

二、编程思想的转变

就按照我们目前快学了一个月的转变来说:

​ 1.最初是所有代码都写在一个py文件内,一排排自上而下的写,代码低级冗余

​ 2.学会了用while循环 if嵌套 函数等,让代码变得结构化起来,而且精简了部分代码

​ 3.熟练掌握模块和包,让不同的文件负责不同的功能,集中管理统一调度

PS:有点像开公司,或者组建工会,就是逐渐专人干专事,再发展到部门

三、软件开发目录规范——背下来!!!

- api   存放接口文件,接口主要用于为业务逻辑提供数据操作
    - api.py --> 应用程序编程接口

- bin   整个项目的启动文件放置在这个文件夹中
    - start.py --> 启动软件入口

- conf  整个项目的配置文件放置在这个文件夹
    - settings.py   配置文件,一般都是全大写
        - 比如存放一些固定的路径

- core  整个项目的核心文件
    - src.py 核心业务逻辑代码 (第一层:用户视图层:核心业务逻辑代码)

- db    用于存放数据文件与操作数据的代码文件
    - db_file ---> db.txt ...
    - db_handler.py---> 存放操作数据的代码(第三层:数据处理层)
    
- interface   用于存放接口文件
    - user_interface.py ---> 用户接口文件(第二层:用户接口)

- lib   项目的公共功能,比如第三方包,共享的一些库
    - common: 存放公共的功能
        - 比如存放 装饰器

- log	用于存放项目的日志文件
    - log.txt  存放日志的文件

- requirements.txt文件
    - 主要存放项目所需模块及版本

- README.TXT    整个项目的说明文件,项目需求和大致流程,相当于产品说明书

四、常见内置模块——collections模块

1.namedtuple——具名元组

​ 返回一个名为typename的新元组子类,新的子类用于创建类似元组的对象,这些对象具有可通过属性查找访问的字段以及可索引和可迭代的字段field_names

例子:
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])  # 类名为Point,属性有'x'和'y'

p = Point(888, y=999)  # 用位置或关键字参数实例化,因为'x'在'y'前,所以x=888,和函数参数赋值一样的
print(p[0] + p[1])  # 我们也可以使用下标来索引访问取值
# >>>1887

x, y = p  # 也可以像一个元组那样解析
print(x, y)
# >>>(888, 999)

print(p.x + p.y)  # 也可以通过属性名来访问
# >>>1887

print(p)  # 通过内置的__repr__函数,显示该对象的信息
# >>>Point(x=888, y=999)
————————————————————————————————————
其实更像一个带名字的字典 

p = Point(x=888, y=999)  # 新建一个对象
d = p._asdict()  # 解析并返回一个字典对象
print(d)
# >>>{'x': 888, 'y': 999}

2.deque——队列

​ 实现了两端都可以操作的队列,相当于双端队列

import collections

t = collections.deque()
t.append('a')
t.append('666')
t.append('hahaha')
t.appendleft('d') # 不是尾部追加而是头部追加
t.extend('777')   # 字符串会被迭代拆分
t.extend([777])   # 换成列表就可以
t.extendleft(['出去玩'])
print(t)
>>>
deque(['出去玩', 'd', 'a', '666', 'hahaha', '7', '7', '7', 777])

​ 剩下很多方法就和列表一样了,诸如删除,翻转,统计数等等

3.orderddict() 有序字典

​ 让创建字典时,存放顺序和添加顺序一致(注意:和dict直接转过去的顺序不一定相同)

​ 其实python 3.6以后,已经优化了相当于给字典打了这个功能,字典输入数据值时,先输入的位置就在前,后输入的位置就在后

4.Counter ——字符串字符个数统计,注意大写!返回元组包字典

import collections
t = "WOW you can really dance"
print(collections.Counter(t))
>>>
Counter({' ': 4, 'a': 3, 'W': 2, 'y': 2, 'c': 2, 'n': 2, 'e': 2, 'l': 2, 'O': 1, 'o': 1, 'u': 1, 'r': 1, 'd': 1})

五、常见内置模块——time模块

1.time.time()——时间戳(1970纪元后经过的浮点秒数)

2.time.sleep()——代码阻塞(默认以秒为单位)

3.时间的三种模式

  • 时间戳——Timestamp
  • 格式化的字符串——Format String
    import time
    print(time.strftime("%Y-%m-%d %X"))
    			# 格式一定要搞会,大小写不能搞混
        		# %Y-%m-%d 代表年月日 %H-%M—%S代表时分秒                  # %X = %H-%M—%S
    >>>
    可以得到当前的时间,按照设定的格式
    
  • 结构化的时间——struct_time
    这个时计算机能读懂的,我们看起来一般不好看
    struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
    
    import time
    print(time.localtime())
    >>>
    time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=15, tm_min=20, tm_sec=24, tm_wday=2, tm_yday=292, tm_isdst=0)
    

转换关系图+关键字

# 时间戳转结构化时间 —— localtime
import time
t = time.time()
print(time.localtime(t))
————————————————————————————————————
# 结构化时间转时间戳  —— mktime
import time
t = time.time()
F = time.localtime(t)
print(time.mktime(F))
___________________________________
# 格式化字符串时间转结构化时间 —— strptime
import time
print(time.strptime('2022-10-01 16:16:16', '%Y-%m-%d %X'))
					# 注意带上格式再转
—————————————————————————————————————
# 结构化时间转格式化的字符串时间 —— strftime
import time
t = time.localtime()
f = time.strftime('%Y-%m-%d %X', t)
				# 带想要的格式,后面带结构化时间
print(f)

# ps:助记,格转结用strptime,格式在后头
#          结转格用strftime,格式在前头

六、常见内置模块——datetime模块

import datetime
print(datetime.datetime.today())  
print(datetime.datetime.now())      # 北京时间
print(datetime.datetime.utcnow())   # 世界标准时间
print(datetime.datetime.fromtimestamp(1564554654))   # 直接把时间戳转换成标准时间
# 指定时间赋值给一个变量,变为时间对象
import datetime
t = datetime.datetime(2022, 10, 10, 11, 11)
print(t)
>>>
2022-10-10 11:11:00
______________________________
# 对时间对象可以点打印出其属性
# 依旧拿上面的t为例
print(t.year)
print(t.month)
print(t.hour)
print(t.minute)
>>>
2022
10
18
18
# 转化
# 字符串(表示日期和时间)创建一个datetime对象
from datetime import datetime
t = '2022/10/01'
print(datetime.strptime(t, '%Y/%m/%d'))
>>>
2022-10-01 00:00:00
        
——————————————————————————————————
from datetime import datetime
t = datetime.now()
print(t)
t1 = t.strftime('%m/%d/%Y, %H:%M:%S')
# mm/dd/YY H:M:S format
print('t1:', t1)
# 一个好玩的时间差演算——timedelta模块
import datetime
a = datetime.date.today()
print(a)
b = datetime.timedelta(days=7)  # ()内参数可控制
print(a + b)                 # ()运算符可以控制
print(a - b)

七、常见内置模块——random模块

​ 英文是随机的意思,实际生活中很常见,比如验证码,比如强化概率,比如发牌洗牌等

import random

print(random.random())          # float 大于0 小于1 的小数

print(random.randint(1,5))      # [1,5] 开区间 大于等于1 小于等于5 的整数

print(random.randrange(1,5))    # [1,5) 大于等于1 小于5 的整数

print(random.choice([1,'adc',[5,8]]))  # 1 或者 ‘adc’ 或者 [5,8]       多选一,随机拿

print(random.sample([11,'aaa','ccc','ddd',22],2)) # 列表元素 任意2个组合         []后面跟的数字控制取几个

print(random.uniform(1,5))      # 大于1 小于5 的小数

item = ['a','b','c','d','e','f','g']
random.shuffle(item)        # 打乱item的顺序,相当于 “洗牌”
print(item)
课堂中作业:
	Q:设计一个四位数的随机验证码的代码,要求每位都可以是大写字母小写字母、数字
_____________________________________
# 解答思路:每位都有三种可能,三选一,可用choice 
# 四位数验证码,每次随机出一位,随机四次然后组合起来
# 大写小写可以用 chz()来拿数字转

def yanzhengma(n):
    import random
    for i in range(n):
        upper = chr(random.randint(65, 90))
        lower = chr(random.randint(97, 122))
        numbers = random.randint(0, 9)
        print(random.choice([upper, lower, numbers]), end='')

yanzhengma(4)

________________________________________
def yanzhengma(n):
    import random
    a = ''
    for i in range(n):
        upper = chr(random.randint(65, 90))
        lower = chr(random.randint(97, 122))
        numbers = str(random.randint(0, 9))
        n = random.choice([upper, lower, numbers])
        a += n
    return a
ccc = yanzhengma(10)
print(ccc)

原文地址:http://www.cnblogs.com/wznn125ml/p/16807482.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性