前言
python在高中时学习过一些入门知识,也是下面的大部分知识,很久没有接触,大多都忘记了,虽然我的专业是计算机科学与技术,但Python的学习还不知要到什么时候,还好上学期已经学习了c语言的一些基础知识,再加上高中有所基础,所以自学python的基础知识对我来说并不困难,这篇blog记录我的学习过程。
一、数据
#1.数值
- 整数类型:int
常见运算+、-、*
整除://
除:/
取余:%
divmod(m,n) 得到两个整数,一个是m//n,一个是m%n
m**n m的n次方
abs(m) 求绝对值
比较:== ; > ; >= ; < ; <= ;
浮点型:float
复数类型: (1+3j)*(2+3j)=(-4+7j)
复数之间只能比较是否相等
字符串类型:str 用双引号或者单引号成对都可以表示字符串;多行字符串用三个连续单引号表示,如’’’abc
def‘’‘
第一个字符编号为0
获取字符串长度:len函数
切片操作:s[start:end:step] start、end、step:三个数
+:两个字符串连接
*:将字符串重复若干次 如: “abc”*2=”abcabc”
== 判断是否相同
in:判断字符串中是否包含某个字符串 如:”h” in a
常见字符串操作
chr() : 输入ASCII值得到字符
ord() : 输出字符的ASCII值
str.strip:去掉字符串前后空格,内部空格不受影响
str.lstrip:去除字符串前部的所有空格
str.rstrip:去掉字符串后部的所有空格
str.isalpha:判断字符串是否全部由字母组成
str.isdight:判断字符串是否全部由数字构成
str.isalnum:判断字符串是否仅由字母和数字组成
字符串高级操作
replace:替换子串
- “Tom smiled,Tom,cried”.replace(‘Tom’,’Jane’) : ‘Jane smiled,Jane cried’
upper/center/swapcase:大小写相关
‘abc’.upper() : ‘ABC’
‘aBC’.lower() : ‘abc’
‘Abc’.swapcase() : ‘aBC’
join:合并
‘-‘.join([“One”,”for”,”Two”]) : ‘One-for-Two’
split:分割
‘You are my sushine.’.split(‘ ‘) : [‘You’,’are’,’my’,’sunshine.’]
转义符号:\
如换行:\n
两个\\表示\本身
数学函数:math模块:import math(处理整型和浮点型)
数学常数:圆周率,自然对数的底数
三角函数、对数、最大公约数、最小公倍数等
#2.逻辑值(bool)
逻辑值只包括真和假两个值
整数、浮点数和复数:0为false,所有非0值都为true
字符串类型:空串(”“)为false,所有非空串都是true
所有序列类型:空序列为false,所有非空序列都是true
空值None 表示无意义或不知道,也是false
逻辑运算
”与“ : and (and连接的两个真值同时为真,计算结果才为真)
“或”:or (or连接的两个真值只要有一个为真,计算结果就为真)
”非“: not (not 连接的一个真值,非真为假,非假为真)
优先级:not 最高,and次之,or最低
#3.变量
命名规则
字母和数字组合,”_”算字母,字母区分大小写,不带特殊符号(空格、标点、运算符等)
名字第一个字符必须是字母(python中汉字算字母)
赋值
最基本赋值语句
合并赋值: a=b=c=1
按顺序依次赋值: a,b,c=7,8,9
简写赋值语句: a+=1 ; a*=1.5 ; a/= 3
进制
hex()十六进制
cot()八进制
bin()二进制
二、容器
#1.列表和元组
列表可变可更新,元组是不可变序列(去掉灵活性换取性能)
元素类型没有限制
- 创建列表:[] 、 list()
创建元组: () 、 tuple()
增长列表:
append:列表末尾加上一个:alist.append(item)
insert: 列表中间任意一个地方添加: alist.insert(i,item)
extend:将两个列表连接
缩减列表:
pop:指定去除一个元素并返回其值: alist.pop(i) 不指定则去除列表最后一个,并返回其值:alist.pop()
remove:指定一个数据值(删除首次出现的那个):alist.remove(“item”)
clear:变成空列表
reverse:把列表头尾重新反转排列: alist.reverse()
sort:把列表的数据元素按照大小顺序重新排列(从小到大):alist.sort()
reversed/sorted:得到重新排列的列表,而不影响原来的列表
count:返回item在列表中出现的次数: alist.count(item)
del:删除第i个元素:del alist[i]
index:找到item在列表中首次出现位置:alist.index(item)
len(alist)
合并:
加法运算+:连接两个列表/元组(生成新的列表,不影响原来两个列表/元组)
乘法运算*:复制n次,生成新列表/元组
列表切片:alist[ start : end : step] 或 atuple[start : end : step]
计算:
sum函数:列表所有数据元素累加
min/max函数:返回列表中最小/最大的数据元素
#2.集合
创建集合:{}或者set()
集合会自动忽略重复的数据
集合不能加入可变类型数据
增长集合:
add:添加一个数据: aset,add(item)
update:批量添加数据: aset.upset
缩减集合
clear: 清空集合: aset.clear()
pop:删除任意一个数据并提供其值作为返回值输出:aset,pop()
remove/discard:删除指定数据: aset.remove(item)
remove一个不存在的元素时会报错,discard一个不存在的元素时不会报错
集合大小:len函数
in:判断元素是否属于集合
运算:
并:a|b
交:a&b
差:a-b
对称差:a^b: a-b|b-a
关系判定:<= , < ,= , >= , >:子集/真子集/相等/超集/真超集
isdisjoint():判断两交集是否为空:a.isdisjoint(b)
#3.数据类型
##1.灵活性强会花费一些计算或者存储的代价去维持这些强大的功能
不可变类型(一旦创建就无法修改数据值的数据类型):整数、浮点数、复数、字符串、逻辑值、元组
可变类型(可以随时改变的数据类型):列表、字典、集合
##2. 字典的类型可以是任意不可变类型
用元组作为坐标,索引元素:poi={(100,100):’bus stop’}
索引:poi[(100.100)]
二.输入和输出
#1.input函数
input(prompt[^1]) 1.提示信息
例:x= input(‘x:’)
- *input()返回值是字符串**,可通过int()函数将字符串类型强制转换为整数类型
#2.print函数
- print([object,…][,sep[^1]=’’][,end[^2]=’\n’][,file[^3]=sys.stdout])
表示变量之间用什么字符串隔开,缺省是空格
表示以这个字符串结尾,缺省为换行
file:指定了文本将要发送到的文件、标准流或其他类似文件的对象;默认是sys.stdout
##3.格式化字符串
%d:整数 %s:字符串 %f:浮点数
‘%d %s’%(23,’hello’) ‘23 hello’
‘%d’%(23,[^1]) ‘23’ 1.单个字符需要在最后加逗号
‘(%4d):K:%s’%(12,’Hello’) ‘( 12):K:Hello’
‘(%04d):K:%s’%(12,’Hello’) ‘(0012):K:Hello’
%前面加-则为左对齐
三、计算和控制流
#1.条件分支语句(if)
if <逻辑表达式>:
<语句块1>
……
else:
<语句块2>
冒号表示语句层次
语句块必须缩进
多种情况的条件语句:elif语句
if <逻辑表达式1>:
<语句块1>
elif <逻辑表达式2>:
<语句块2>
else:
<语句块3>
#2.条件循环语句(while)
while<逻辑表达式[^值为true则循环]>:
<语句块>
break[^1] 1.跳出循环
continue[^2] 2.略过余下循环语句
<语句块>
else[^3]: 3.条件不满足退出循环,则执行
<语句块>
中断程序循环:CTRL+C
#3.迭代循环(for)
for <循环变量[^普通变量]> in <可迭代对象[^1]>:
<语句块1>
break 跳出循环
continue 略过余下循环语句
<语句块2>
else: 迭代完毕,则执行
<语句块3>
- 可为列表、字典、元组
#range函数
range(<终点>) 返回一个从零到终点的数列(不包含终点)
range(<起点>,<终点>) 从0以外的任何整数开始构建数列(包含起点不包含终点)
range(<起点>,<终点>,<步长>) 修改数列的步长,通过将步长设置为复数能够实现反向数列
range类型的对象:可直接当作序列或转换成list或tuple等容器类型
#4.代码组织:函数(def)
定义函数:
用def语句创建一个函数
用return关键字指定函数返回值
def <函数名> (<参数表>):
<缩进的代码段>
return <函数返回值>
调用函数:
<函数名>(<参数>)
无返回值: <函数名>(<参数表>)
返回值赋值:v = <函数名>(<参数表>)
局部变量:在函数内部定义的参数和变量:只在该函数定义范围内有效
全局变量:在函数外部定义的,作用域是整个代码段
在函数内部使用与全局变量同名的变量时,若未在函数内进行定义,则使用全局变量的值,局部变量的值不会影响全局变量的值
#5.map函数(对列表中每一个元素做一个相同的处理,得到新处理)
map(fuc,list1,list2)
例如列表每个值都乘以3:
num = [10,20,40,80,160]
def mul3(a):
return a*3
print (list(map(mul3,num)))
#”)6.匿名函数(lambada)
有时函数只用一次,其名称也不重要,可以无需费神去def一个
表达式
- lambda <参数表>:<表达式>
#7.函数的参数
参数:传入到函数的值
形式参数:函数创建和定义过程中,函数名后面括号里的参数
只是代表一个位置、一个变量名
可变参数
def func(*args):#不带key的多个参数(未知,多少都可以)(元组列表等)
def func(**kwargs):#key=val形式的多个参数(字典等)
固定参数
def func(key1,key2,key3…)
位置参数:按照前后顺序对应到函数参数传入
func(arg1.arg2…)
关键字参数:由于指定了key,可以不按照顺序对应
func(key1=arg1,key2=arg2…)
混用:所有位置参数必须在前,关键字参数必须在后
实际参数:函数在调用时传入的参数
一个具体内容,赋值到变量的值
四、引用拓展模块
模块引用方式
import <模块> [as<别名>] 使用时要加上命名空间
from <模块> import <函数> 引用模块中的某个函数,调用时不需要再加上命名空间
标准库:
加密服务
hashilib:安全哈希和消息摘要算法接口
hamc:用于消息身份验证的密钥哈希算法
secrets:生成用于管理机密的安全随机数
并发执行
threading:基于线程的并发性
multiprocessing:基于进程的并发性
concurrent.futures:启动并行任务
subprovess:子流程管理
sched:事件的调度程序
queue:同步的队列类
_thread:低级线程ApI
通用系统服务
os:其他操作系统接口
io:用于处理流的核心工具
time:时间访问和转换
argparse:用于命令行选项,参数和子命令的解析器
getopt:用于命令行选项的c风格解析器
logging:Python的日志记录工具
getpass:便携式密码输入
cuises:字符单元格显示的终端处理
platform:访问底层平台的标识数据
errno:标准errno系统符号
ctypes:Python的外部函数库
文件和目录访问
pathlib:面向对象的文件系统路径
os.path:常见的路径名操作
fileinput:迭代多个输入流中的行
stat:解释stat()结果
filecmp:文件和目录比较
tempfile:生成临时文件和目录
glob:Unix样式路径名模式拓展
fnmatch:Unix文件名模式匹配
linecache:随机访问文本行
shutil:高级文件操作
macpath:Mac OS 9路径操作函数
文件格式
csv:CSV文件读写
configparser:配置文件解析器
netrc:netrc文件处理
xdrlib:对XDR数据进行编码和解码
plistlib:生成并解析MAC OS X.plist文件
数据压缩和存档
zlib:与gzip兼容的压缩
gzip/bz2:支持gazip/bzilp2文件
lzma:使用LZMA算法进行压缩
zipfile:使用在ZIP存档
tarfile:读取和写入tar归档文件
数据持久化:
pickle:python对象序列化
copyreg:注册pickle支持功能
shelve:python对象持久化
marshal:内部python对象序列化
dbm:与unix”数据库“的接口
sqlite3:sqlite数据库的DB-API 2.0接口
功能编程模块:
itertools:为搞笑i循环创建迭代器的函数
functools:可调用对象的高阶函数和操作
opertor:标准运算符作为函数
数据类型:
datetime:基本日期和时间类型
1.时间
datetime.date():处理日期(年月日)
修改日期格式:strftime
例如:datetime.date.today().strftime(‘%Y-%m-%d %H:%M:%S’)
输出为’2024-01-27 00:00:00’
- 修改为国际标准格式:datetime.datetime.now().isoformat()
获取今天的日期:
datetime.date.today()
datetiem.datetime.now()
datetime.time():处理时间(时分秒、毫秒)
datetime.datetime():处理日期+时间
datetime.timedelta():处理时段(时间间隔)
##2.时间戳
指格林威治时间1970年1月1日00时00分00秒其至现在的总秒数
将时间戳转换成日期:
datetime.date.fromtimestamp()
将日期转换为时间戳:
timetuple函数
返回秒数来表示时间的浮点数:time.mktime函数
##3.时间上的加减法
timedelta():表示两个时间点的间隔
例如:
today = datetime.datetime.now()
yesterday = today - datetime.tiemdelta(days=1)
hours = today - datetime,timedelta(hours=1)
calendar:与日历相关的一般功能
calendar.calendar(年)
calendar.month(年,月)
calendar.prmonth(年,月)=print(calendar.month(年,月))
calendar.prcal(年)= print(calendar.calendar(年))
将日历列表化:calendar,monthcalendar():嵌套列表,最里层列表有七个元素,代表一周,如果没有本月日期,则为0
判断闰年:calendar.isleap(年)
计算某月共有几天,从周几开始:
例如:calendar.monthrange(2024,2)
输出为(calendar.THURSDAY, 29)
计算
collections:容器数据类型
heapq:堆队列算法
bisect:数组二分算法
array:高效的数值数组
weakref:弱引用
types:动态类型创建和内置类型的名称
copy:浅层和深层复制操作
pprint:格式化输出
reprlib:备用repr()实现
enum:支持枚举
数字模块:
numbers:数字抽象基类
math:数学函数
cmath:复数的数学函数
decimal:十进制定点和浮点算术
fractions:有理数
random:生成伪随机数
statistics:数学统计功能