前言
本文记录了模块, python语法风格和模块布局,和部分字符串函数
一、模块基础、
模块是从逻辑上组织python代码的形式
当代码量相当大的时候,最好把代码分成一些有逻辑的代码段,前提是它们可以彼此交互
这些代码片段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数
通俗的讲,一个 .py文件 就是一个python模块
导入模块可以提升开发效率,简化代码
1、导入模块import
使用import导入模块
模块属性通过 “模块名.属性” 的方式调用
模块函数通过 “模块名.函数名” 的方式调用
如果仅需要模块中的某些属性,也可以单独导入
from 模块名 import 属性/函数名
可以一行只导入一个模块,也可以一行导入多个模块
2、模块加载
无论导入多少次,一个模块只被加载一次,只加载一次可以阻止多重导入时,代码被多次执行,且如果两个文件相互导入,防止了无限的相互加载
模块加载时,顶层代码会自动执行,所以只将函数放入模块的顶层是好的编程习惯
ps:模块的特性就是在被导入时会先完整的执行一次模块中的所有程序
3、时间模块time
时间戳 timestamp:表示的是从 1970 年1月1日 00:00:00 开始按秒计算的偏移量
UTC(Coordinated Universal Time, 世界协调时)亦即格林威治天文时间,世界标准时间。在中国为 UTC+8 DST(Daylight Saving Time) 即夏令时;
结构化时间(struct_time): 由 9 个元素组成,使用time.localtime()等方法可以获得一个结构化时间
结构化时间共有9个元素,如下表:、
索引 | 属性 | 取值范围 |
---|---|---|
0 | tm_year(年) | eg:2021 |
1 | tm_mon(月) | 1-12 |
2 | tm_mday(日) | 1-31 |
3 | tm_hour(时) | 0-23 |
4 | tm_min(分) | 0-59 |
5 | tm_sec(秒) | 0-59 |
6 | tm_wday(一周中周几) | 0-6 |
7 | tm_yday(一年中第几天) | 1-366 |
8 | tm_idst(是否为夏令时) | 默认-1 |
ps:
结构化时间是一个序列,那么就可以通过索引进行取值,也可以进行分片,或者通过属性名获取对应的值。
time类型不可变,所有时间值都只读,不能改
格式化时间字符串
用time.strftime(‘%Y-%m-%d %H:%M:%S’)等方法可以获得一个格式化字符串
ps:格式中的空格,短横线和冒号只是为了美观的修饰符,只有%是有控制作用
每个参数含义如下:
格式 | 含义 | 格式 | 含义 |
---|---|---|---|
%a | 本地简化星期名称 | %m | 月份(01-12) |
%A | 本地完整 | %M | 分钟数(00-59) |
%b | 本地简化月份名称 | %p | 本地am或pm相位符 |
%B | 本地完整月份名称 | %S | 秒(01-59) |
%c | 本地相应的日期和时间 | %U | 一年中的星期数(00-53)周日为开始 |
%d | 一月中的第几天 | %w | 一星期中第几天 |
%H | 一天中第几个小时(24小时制) | %x | 本地相应时间 |
%I | 第几个小时(12小时制) | %X | 本地相应时间 |
%j | 一年中的第几天 | %y | 去掉世纪的年份 |
%Z | 时区名 | %Y | 完整年份 |
time模块使用方法
1、time.sleep(t)
让程序睡眠t秒,t可为浮点数或整数
2、time.time()
返回当前系统时间戳,可做算术运算
3、time.gmtime([secs])
将一个时间戳转换为UTC时区结构化时间,可选参数secs默认值为time.time()
4、time.localtime([secs])
将一个时间戳转换为当前时区的结构化时间,如果secs参数未提供,则以当前时间为准,即time.time()
5、time.mktime(t)
结构化时间转换为时间戳,t为结构化时间参数
6、time.strftime(format[,t])
返回格式化字符串表示的当地时间,把一个struct_time(eg:time.localtime()和time,gmtime()的返回值)转化为格式化的时间字符串,显示的格式由参数format决定。如果未指定t,默认传入time.localtime()
7、time.strptime(string[,format])
将格式化时间字符串转化成结构化时间
该方法是 time.strftime()方法的逆操作。
time.strptime() 方法根据指定的格式把一个时间字符串解析为结构化时间。
提供的字符串要和 format参数 的格式一一对应
如果string中日期间使用 “-” 分隔,format中也必须使用“-”分隔
时间中使用冒号 “:” 分隔,后面也必须使用冒号分隔
并且值也要在合法的区间范围内
时间格式之间的转换
从 | 到 | 方法 |
---|---|---|
时间戳 | UTC结构化时间 | gmtime() |
时间戳 | 本地结构化时间 | localtime() |
本地结构化时间 | 时间戳 | mktime() |
结构化时间 | 结构化字符串 | strftime() |
格式化字符串 | 结构化时间 | strptime() |
二、python语法风格和模块布局
变量赋值
1、python支持链式多重赋值
x = y = 1
2、给列表使用多重赋值时,两个列表同时指向同一个列表空间,任何一个列表改变,另外一个随着改变
因为指向的地址是同一个地址
3、 python 的多元赋值方法
# 将 10 20 分别赋值给a,b
a, b = 10, 20
# 将m n, 分别赋值给c,d
c, d = 'mn'
# 将元组中的元素, 分别赋值给e, f
e, f = (100, 200)
# 将列表中的元素,分别赋值给变量m, n
m, n = ['bob', 'lihua']
4、在python中,完成两个变量值的互换
a, b = 100, 200
a, b = b, a
合法标识符
Python 标识符,字符串规则和其他大部分用 C 编写的高级语言相似
第一个字符必须是 字母或下划线 _,剩下的字符可以是字母和数字或下划线,大小写敏感
关键字
和其他的高级语言一样,python 也拥有一些被称作关键字的保留字符
任何语言的关键字应该保持相对的稳定,但是因为 python 是一门不断成长和进化的语言,其关键字偶尔会更新
关键字列表和 iskeyword() 函数都放入了 keyword 模块以便查阅
import keyword
keyword.kwlist
# 判断xxx是否是关键是,是为True,否为False
'xxx' in keyword.kwlist
内建
Python 为什么可以直接使用一些内建函数,而不用显式的导入它们?
比如 str()、int()、id()、type(),len() 等,许多许多非常好用,快捷方便的函数。
这些函数都是一个叫做 builtins 模块中定义的函数,而 builtins 模块默认 在Python环境启动的时候就自动导入,所以可以直接使用这些函数
三、字符串
百分号:可以使用格式化符号来表示特定含义
%s 优先用str()函数进行字符串转换
f字符串是3.6版本后加入的标准库
eg:
name, age, list1 = "luhua", 25, [1,2]
str = "name:%s, age:%s, %s" % (name. age, list1)
str2 = f"name:{name}, age:{age}, {list1}"
ps: 可以传入任意类型的数据,如 整数、浮点数、列表、元组甚至字典,都会自动转成字符串类型
字符串函数
str = "hello world"
# 判断字符串是否以he开头
str.startswith('he')
# 判断字符串是否以rld结尾
str.endswith('rld')
# 判断字符串是否全是大写字母
str.isupper()
# 判断字符串是否全是小写字符
str.islower()
# 删除字符串两端空白
str.strip()
# 删除左边空格
str.lstrip()
# 删除右边空格
str.rstrip()
# 转换小写为大写
str.upper()
# 以指定字符串为分割切分字符串, 默认为空格
str.split("xxxx")
# 用'xxx'.join(列表)将列表元素用xxx拼接在一起
list1 = ['xiaohong', 'xiaobai', 'lihua']
'-'.join(list1) # 用-将list1里面元素连接在一起