python基础
2020-07-28 13:57:04 69 举报
AI智能生成
python基础知识点
作者其他创作
大纲/内容
注释及变量
单行注释
如何来表示?
用#来表示
注释后的代码不会被执行
多行注释
如何来表示
用'''或"""来表示
嵌套规则
如果外层使用三个双引号,内层必须使用三个单引号,反之亦然
变量
什么是变量?
可以改变的量,实际指代内存的一块空间
多个变量的定义
多个变量可用逗号隔开
a,b = 1,2
print (a,b)
print (a,b)
变量的命名规则
字母数字下划线,首字符不能用数字。
严格区分大小写,且不能使用关键字。
变量命名有意义,且不能使用中文哦。
六大基本数据类型
Number类型
int类型
什么是整型?
数字0,正整数,负整数
进制整型
可用其他进制(二、八、十六)表示,print会自动将其转换为十进制
float类型
什么是浮点型?
含有小数点的数据都是浮点型
科学计数法
用e来表示,e后面的数字表示小数点向左(-)或向右移动几位
complex类型
什么是复数?
含有虚数的数据就是复数,表示为实数+虚数
表示方法
表示方法一
实数+虚数
表示方法二
complex(实数,虚数)
bool类型
什么是布尔值?
True
False
str类型
什么是字符串?
用引号引起来的就是字符串
单引号、双引号、三引号
转义字符
\ +字符
把无意义的字符转为有意义
把有意义的字符转为无意义
\n
换行符
\t
水平制表符
\r
把\r后面的字符拉到当前行首
\r\n
换行
元字符串
r+字符串
表示不转义字符,原型化输入字符串
list类型
定义一个空列表
listvar=[]
定义一个普通列表
lst=[元素,元素...]
正向索引下标
列表元素从左到右依次为:0,1,2,3,4,5...
逆向索引下标
列表元素从右到左依次为:-1,-2,-3,-4,-5...
如何获取(修改)列表元素
可通过正、逆向索引获取(修改)
列表的特点
可获取,可修改,有序
tuple类型
定义一个空元组
tuplevar=()
定义一个普通元组
tuplevar=(元素,元素...)
如何获取元组中元素
可通过正、逆向索引获取
元组的特点
可获取,不可修改,无序
元组注意点
加逗号才是元组,逗号是元组标识符
set类型
定义一个空集合
setvar=set()
定义一个普通集合
setvar={元素,元素...}
集合中的元素不可获取
集合具有元素自动去重的功能
集合的特点
无序,自动去重
dict类型
定义一个空字典
dictvar={}
定义一个普通字典
dictvar={键:值,键:值...}
如何获取(修改字典中的值)
通过键来获取(修改)值
字典的特点
键值对存储数据,表面有序实际无序
字典的键和集合的值要求
必须为可哈希数据类型
可哈希数据类型
Number型数据
字符串型数据
元组型数据
不可哈希数据类型
列表型数据
集合型数据
字典型数据
类型转换
Number强制类型转换
强制转换为整型
用int()强转
可转类型
浮点型
只保留整数部分
布尔型
True为1,False为0
纯数字字符串
转换为整型数字
强制转换为浮点型
用float()强转
可转类型
整型
加.0
布尔型
True为1.0,False为0.0
纯数字字符串
转为浮点型数字
强制转换为复数型
用complex()强转
可转类型
整型
加0j
浮点型
加0j
布尔型
True为1+0j,False为0j
纯数字字符串
对应数字+0j
强制转换为布尔型
用bool()强转
可转类型
布尔值为假(False)的十种情况
0
0.0
0j
False
""
[]
()
set()
{}
None
默认按照精度从低到高进行转换
bool -> int -> float -> complex
容器数据的强制类型转换
强制转换为字符串
用str()强转
可强转一切类型
转换后的类型为原类型套上引号变为字符串
强制转换为列表
用list()强转
只能转容器类型
如果是字符串,把里面的字符作为列表新元素,
如果是字典,只保留字典的键,忽略掉值,
剩下的容器数据,都是单纯在原数据两边套上[]
强制转换为元组
用tuple()强转
和列表一样
强制转换为集合
用set()强转
和列表一样
强制转换为字典
用dict()强转
可转类型
除字符串外的容器类型数据
必须是等长的二级容器
二级容器内的元素个数为2
运算符
算数运算符
+
两数相加
-
两数相减
*
两数相乘
/
两数相除,结果为小数
//
地板除,结果为整数,除非除数或被除数中含有小数
%
两数取余
**
幂运算
比较运算符(返回布尔值)
<
两数相比,a小于b
>
两数相比,a大于b
<=
两数相比,a小于等于b
>=
两数相比,a大于等于b
==
两数相比,a等于b
!=
两数相比,a不等于b
赋值运算符
+=
写法: a += b
-=
写法: a-= b
*=
写法: a *= b
/=
成员运算符
逻辑运算符
身份运算符
位运算符
基本语法
判断类型
type
判断给予属于属于哪个数据类型
isinstance
isinstance(要判断的值,要判断的类型);返回True或False
判断给定的值是否属于指定的一堆数据类型中,返回True或False
代码块和作用域
代码块
以冒号作为开始,用缩进来划分作用域
作用域
作用的区域,作用的范围
流程控制
流程
代码执行的过程
控制
对代码执行过程的一种把控
分支结构
单项分支
if 条件表达式:
code1
code2
code1
code2
当条件表达式成立,返回True,执行对应的代码块,反之不执行。
双项分支
if 条件表达式:
code1
code2
else:
code3
code4
code1
code2
else:
code3
code4
如果条件表达式成立,执行if对应代码块。
如果条件表达式不成立,执行else对应的代码块。
如果条件表达式不成立,执行else对应的代码块。
多项分支
if 条件表达式1:
code1
code2
elif 条件表达式2:
code1
code2
elif 条件表达式3:
code1
code2
else:
code1
code2
code1
code2
elif 条件表达式2:
code1
code2
elif 条件表达式3:
code1
code2
else:
code1
code2
如果条件表达式1成立,返回True,执行对应代码块,反之则向下执行
直到最后,任何条件都不满足,执行else。
直到最后,任何条件都不满足,执行else。
巢状分支
单项、双项、多项分支互相嵌套
循环结构
while循环
while 条件表达式:
code1
code2
code1
code2
for循环
for循环的作用:遍历、循环、迭代
for 变量 in 可迭代的对象:
code1
code2
code1
code2
range对象
range(开始值,结束值,步长)
结束值本身取不到,取到结束值之前的那个数
总结
1)while: 较为复杂的逻辑
2)for : 数据的遍历
3)while 和 for 部分代码可相互转换
2)for : 数据的遍历
3)while 和 for 部分代码可相互转换
循环关键字
pass
过(起占位作用)
break
终止当前循环
continue
跳过当前循环,从下一次循环开始
经典案例
代码见博客
打印十行十列★
打印十行十列 ★,隔列换色(☆)
打印十行十列★,隔行换色
99乘法表(四个方向)
求吉利数字100~999
百钱买百鸡
字符串进阶
字符串相关操作
字符串拼接
用+拼接
字符串的重复
用*进行重复输出
字符串跨行拼接
用\跨行拼接
字符串的索引
字符串是有序容器类型数据,也可通过正向及逆向索引获取相应字符
字符串切片
字符串可通过索引及步长进行切片
字符串方法
capitalize
首字母大写
title
每个单词首字母大写
upper
所有字母大写
lower
所有字母小写
swapcase
字母大小写互换
len
计算字符串长度
count
计算字符串中某字符的个数
find
寻找字符串中某字符第一次出现的索引,如果找不到,返回-1
index
寻找字符串中某字符第一次出现的索引,如果找不到,则报错
startswith
判断是否以某字符或字符串开头,“字符或字符串”:开始索引:结束索引
endswith
判断是否以某字符或字符串结尾,“字符或字符串”:开始索引:结束索引
isupper
判断字符串是否都是大写
islower
判断字符串是否都是小写
isdecimal
判断字符串是否以数字组成
ljust
填充字符串,原字符串居左,默认填充空格
rjust
填充字符串,原字符串居右,默认填充空格
center
填充字符串,原字符串居中,默认填充空格
strip
默认去掉首尾两边空白符
rstrip
去掉右边某个字符,默认空白符
lstrip
去掉左边某个字符,默认空白符
split
按某个字符将字符串切割成列表,可指定切割次数
rsplit
从右向左按某字符切割字符串,可指定切割次数
join
按照某字符将列表拼接成字符串(容器类型皆可)
replace
字符串替换
replace(“被替换字符或字符串”,“替换字符或字符串”)
字符串格式化
顺序传参
用{}代替要进行格式化的字符,format()括号内按顺序填写传参
索引传参
根据索引进行传参,可随意指定传参顺序
关键字传参
可根据关键字进行传参,可随意指定传参顺序
容器类型数据传参(列表、元组等)
format()括号内跟列表或元组,可通过索引获取其元素进行传参
format填充字符的使用
> 原字符居右
< 原字符居左
^ 原字符居中
进制转换等特殊符号的使用
:d
整型占位符(要求数据类型必须为整型)
:2d 占用两位,不够用空格来补,默认居右
可用> < ^来调整位置
:f
浮点型占位符(要求数据类型必须为浮点型)
:.2f 可保留小数点后两位
:s
字符串占位符(要求数据类型必须为字符串)
:,
金钱占位符
将一堆纯数字字符串切割为三位一组
容器类型数据进阶
列表相关操作
列表的拼接(同元组)
两个列表相加可进行切片
列表的复刻(同元组)
一个列表进行乘法运算可进行复刻,类似于字符串
列表的切片
可通过索引正向或逆向截取
[开始索引:结束索引:步长] 从开始索引截取到结束索引之前按照指定的步长截取列表元素值
[开始索引:结束索引] 从开始索引处截取到结束索引之前
[:结束索引] 从列表开始截取到结束索引之前
[开始索引:] 从开始索引截取到列表最后
[:]或[::] 截取所有列表
列表的获取(同元组)
可通过索引获取元素
列表的修改(可切片)
要求的数据类型是: 可迭代型数据
容器类型数据
range对象
迭代器
列表的删除(可切片)
del +列表[索引]
列表相关函数
增
append
向列表末尾添加新的元素
insert
在指定索引之前添加元素
extend
迭代追加所有元素(容器类型数据)
删
pop
按照索引删除元素
remove
通过值进行删除
clear
清空列表
改、查
参考列表操作部分
深浅拷贝
浅拷贝
浅拷贝生成的变量不受原变量更改的影响
浅拷贝的两种方法
引入copy模块,copy.copy()
数据变量.copy()
深拷贝
如果是容器类型的数据,深拷贝可以拷贝多级容器
深拷贝方法
引入copy模块,copy.deepcopy()
字典相关函数
增
dic[键]=值
fromkeys,使用一组键和默认值创建字典
删
pop
通过键删除键值对
popitem
删除最后一个键值对
clear
清空字典
改
update
存在就更改,不存在就添加
查
get
通过键获取值
集合相关操作
intersection
&
交集
difference
-
差集
union
|
并集
symmetric_difference
^
对称差集
issebset
<
子集
issuperset
>
父级
isdisjoint
不相交
集合相关函数
增
add
向集合中添加数据,一次加一个
update
向集合中迭代数据,一次加一堆
删
pop
随机删除一个元素
remove
指定删除一个元素,不存在则发生报错
discard
指定删除一个元素,不存在不删除
clear
清空集合
冰冻集合
frozenset
集合冰冻后只能进行交差并补,不能增删
文件操作
文件操作
文件的写入
打开文件
fp = open("文件名",mode="w",encoding="utf-8")
写入文件
fp.write()
关闭文件
fp.close()
文件的读取
打开文件
fp = open("文件名",mode="w",encoding="utf-8")
读取文件
res=fp.read()
print(res)
关闭文件
fp.close()
字节流转换
用来传输或存储的数据格式
b’1234’ b’abcd’ -->b开头的字节流,范围只能是ascii编码
如果是中文,需使用encode和decode进行编码和解码
encode
将字符串转为字节流
decode
将bytes流转化为字符串
存储二进制字节流
wb
读取二进制字节流
rb
文件扩展模式
read
读取字符个数(里面参数代表字符个数)
seek
调整指针位置(里面参数代表字节个数)
seek(0):将光标移动到文件开头
seek(0,2):将光标移动到文件结尾
tell
当前光标左侧所有的字节数(返回字节数)
r+
先读后写
w+
可读可写
会清空文件,重新写入
a+
可读可写,追加
with语法
with open("文件名",mode="模式",encoding="字符编码") as fp:
文件的相关函数
flush
刷新缓存区
readline
按行读取
readlines
将文件中的内容按行读取到列表中
writelines
将内容是字符串的可迭代数据写入到文件中
readable
判断文件是否可读
writable
判断文件是否可写
truncate
把要截取的字符串提取出来,然后清空内容将提取的字符串重新写入文件中
函数
基本概念
函数基本格式
定义函数
def func():
code1
code2
调用函数
func()
函数命名规则
字母数字下划线,首字符不能为数字。
严格区分大小写,且不能使用关键字。
函数命名有意义,且不能使用中文。
大驼峰命名法
每个单词首字母大写(定义类:面向对象)
小驼峰命名法
除了第一个单词首字符小写之外,剩下每个单词首字符大写
函数参数
形参
形式参数,在函数的定义处
普通形参
通过定义变量按顺序将实参传参
默认形参
形参上面有默认值,为默认形参
普通收集形参
专门用来收集多余没人要的普通实参
*args
命名关键字形参
专门用来收集多余的没人要的关键字实参
**kwargs
关键字收集形参
两种定义方式
def func(a,b,*,c) c是命名关键字
def func(*args,c,**kwargs) c是命名关键字参数
实参
普通实参
定义具体数据并传向形参
关键字实参
关键字实参是对具体的某个参数赋值,具体的顺序可以打乱。
区分默认形参和关键字实参
默认形参在函数的定义处
关键字实参在函数的调用处
关键字实参在函数的调用处
*和**的用法
*和** 在函数的定义处,用来做收集操作,打包
*和** 在函数的调用处,用来做打散操作,解包
*和** 在函数的调用处,用来做打散操作,解包
参数定义的顺序
普通参数 -> 默认参数 -> 普通收集参数 -> 命名关键字参数 -> 关键字收集参数
return返回值
return + 六大标准数据类型 还有类和对象,函数
如果不定义return,默认返回的是None
在执行完return之后,立刻终止函数,后面的代码不执行
如果不定义return,默认返回的是None
在执行完return之后,立刻终止函数,后面的代码不执行
局部变量和全局变量
作用域
作用的范围
局部变量
函数内部定义的变量(在函数内部定义的变量)
局部变量作用域:在函数内部
全局变量
在函数外部定义的或者使用global在函数内部定义
全局变量作用域:横跨整个文件
可以使用global关键字在函数内部定义一个全局变量
也可以使用global关键字在函数内部修改全局变量
也可以使用global关键字在函数内部修改全局变量
函数名的使用
函数可销毁
del +函数名
函数名可作为容器变量元素
函数名可以作为函数的参数
函数名可作为函数的返回值
return +函数名
函数的嵌套
外函数
外层的叫外函数
内函数
内层的函数叫内函数
LEGB原则
找寻变量的调用顺序采用LEGB原则(即就近原则)
依据就近原则,从下往上 从里向外 依次寻找
L
Local(function);当前函数内的作用域 (局部作用域)
E
Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)
G
Global(module); 函数外部所在的命名空间 (全局作用域)
B
Builtin(Python);Python内置模块的命名空间 (内建作用域)
nonlocal修改局部变量
nonlocal遵循LEGB就近找变量原则
(1)找当前空间上一层的局部变量进行修改
(2)如果找不到,会继续向上寻找
(3)最后什么也没有,直接报错
(2)如果找不到,会继续向上寻找
(3)最后什么也没有,直接报错
闭包函数
什么是闭包函数?
如果内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程,叫做闭包。
获取闭包函数使用的变量
__closure__
获取单元格对象当中的闭包函数
cell_contents
闭包函数的特征和意义
闭包函数的特征
内函数使用了外函数的局部变量,那么该变量与闭包函数发生绑定,
延长该变量的生命周期
延长该变量的生命周期
闭包函数的意义
闭包可以优先使用外函数中的变量,并对闭包中的值起到了封装保护的作用.外部无法访问.
匿名函数
用一句话来表达只有返回值的函数叫做匿名函数,目的追求代码的简洁高效
语法:lambda 参数 : 返回值
高阶函数
迭代器
什么是迭代器?
迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续的
迭代器的特征
不依赖于索引,而通过next指针迭代所有数据,一次只取一个值,大大节省空间
可迭代对象
容器类型数据、range对象、迭代器
如何定义一个迭代器
lst = [1,2,3,4,5]
it = iter(lst)
print(it,type(it))
it = iter(lst)
print(it,type(it))
如何判断一个迭代器
如果it中含有iter和next两种魔术方法,那么其类型为迭代器
Iterator
如何调用一个迭代器
用next调用,next在调用迭代器中的数据时,是单向不可逆,一条路走到黑的过程
map
语法
map(func,Iterable)
功能
把Iterable中的数据一个一个拿出来,扔到func中做处理
把处理后的结果放到迭代器中,最后返回迭代器
把处理后的结果放到迭代器中,最后返回迭代器
参数
func:自定义函数
Iterable:可迭代性数据(容器类型数据、range对象、迭代器)
Iterable:可迭代性数据(容器类型数据、range对象、迭代器)
返回值
迭代器
filter
语法
filter(func,iterable)
功能
return True 当前这个数据保留
return False 当前这个数据舍弃
return False 当前这个数据舍弃
参数
func : 自定义函数
iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
返回值
迭代器
reduce
语法
reduce(func,iterable)
功能
计算数据
参数
func : 自定义函数
iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
返回值
计算之后的结果
sorted
语法
sorted(iterable,key=函数,reverse=False)
功能
排序
参数
iterable(容器类型数据,range对象,迭代器)
key 指定 自定义函数或 内置函数
reverse : 代表升序或者降序 , 默认是升序(从小到大排序) reverse=False
key 指定 自定义函数或 内置函数
reverse : 代表升序或者降序 , 默认是升序(从小到大排序) reverse=False
返回值
排序后的结果
与sort的区别
(1) sorted可以排序一切容器类型数据, sort只能排列表
(2) sorted返回的是新列表,sort是基于原有的列表进行修改
(3) 推荐使用sorted
(2) sorted返回的是新列表,sort是基于原有的列表进行修改
(3) 推荐使用sorted
推导式
列表推导式
语法:[val for val in Iterable]
单循环推导式
带有判断条件的单循环推导式
双循环推导式
带有判断条件的双循环推导式
集合_字典推导式
集合推导式
语法:{val for val in Iterable}
字典推导式
语法:{k,v for k,v in Iterable}
zip
语法
zip(iterable, … …)
功能
将多个iterable中的值,一个一个拿出来配对组成元组放入迭代器中
enumerate
语法
enumerate(iterable,start=0)
功能
枚举 ; 将索引号和iterable中的值,一个一个拿出来配对组成元组放入迭代器中
生成器
什么是生成器
生成器本质是迭代器,允许自定义逻辑的迭代器
生成器和迭代器的区别
迭代器本身是系统内置的.重写不了.而生成器是用户自定义的,可以重写迭代逻辑
创建生成器的两种方式
生成器表达式 (里面是推导式,外面用圆括号)
生成器函数 (用def定义,里面含有yield)
yield与return的共同点及区别点
共同点
执行到这句话都会把值返回出去
区别点
yield每次返回时,会记住上次离开时执行的位置 , 下次在调用生成器 , 会从上次执行的位置往下走, 而return直接终止函数,每次重头调用.
send
next与send区别
next 只能取值
send 不但能取值,还能发送值
send 不但能取值,还能发送值
注意点
第一个 send 不能给 yield 传值 默认只能写None
最后一个yield 接受不到send的发送值
send 是给上一个yield发送值
最后一个yield 接受不到send的发送值
send 是给上一个yield发送值
yield from
可将一个可迭代对象变成一个迭代器返回
0 条评论
下一页