Python高级动态强类型的解释型语言
人生苦短,我用python
让代码自动符合规范
Ctrl + Alt + l (自动规范空格)
函数与其他代码之间要有一个空行
类与其他代码之间要有两个空行
果一行语句太长,可以在 行尾加上\来换行分成多行,但是更建议使用括号来包 。
必要的空格和空行
print()
input(“提示显示:”) 默认是字符串,只能是字符串
每个 import 只导入一个模块
所有把编写的代码写入.py文件中在被Python解释器质性大的方式是脚本 模式。直接在python命令行书写代码被执行的方式是交互模式(命令行模式)。
字符串:数组实现的 ,不可变,有序
列表:有序、可变、可嵌套、可异构
元祖:有序的、不可变、可嵌套、可异构
[外链图片转存失败(img-xKxN1uQD-1565141380133)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563435978861.png)]
index:索引(下标)元素(item)
id()获取数据(对象)在内存中的地址
序列[index] 从序列获取数据,
列表[index]=新值 对可变类型来说可以用来修改元素。
切片操作 获取或修改原数列中一部分的数据
“ + ” 对于序列来说时是拼接的意思 ,结果是新生成的序列
序列可以和数字相乘,序列中的元素会重复
# 多重赋值:
# 给多个变量 附同一个值
a=b=c=d=“a”
# 给多个变量副不同的值,按照顺序进行赋值
a,b,c=1,2,3
# 序列解包
a,b,c=[1,2,3]
bool:布尔类型 True(真) False(假)
bool() -> True/False
数字0为假,其他都是真的
数字为外空为假,其余为真
None(空)
先乘除后加减,括号优先
and 与运算等价于C中(&&)
or 或云算符等价于C中(||)
not 非运算符等价于C中(!)
if 条件:
语句
# for i in range(10)
range(结束值) 默认从开始
range (开始至,结束值)
range(开始值,结束值,步长)
# 枚举函数enumerate
# i,v = (0,“p”)
for i,v in enumerate(“python“)
print(i,v)
else:
# 当循环正常结束的时候才会执行其中的代码
print(“END”)
continue
定义函数:绝对值函数:abs();最大值函数: max();最小值函数: min ();求和函数: sum();求长度函数: len () ;
round(x[,n]) 返回浮点数x的四舍五入值
# 定义函数
def 函数名(形参):
代码段
函数名(实参)
函数定义的更多形式
参数默认值 形参是可以有默认值,默认参数放在所有无默认值参数的后方。
def func( )
# 可边长参数(任意的参数列表)*参数———》 元祖
# 可变长命名传参 **参数 --> 字典
def func3(*args,**kwargs):
print(type(arge))
print(args)
print(type(kwargs))
print(kwargs)
# print(sum(args))
#定义函数时 普通函数 默认值函数 可边长参数 可变长命名参数
def func5( x, y=5 , *args , **kwargs,):
# 普通实参 命名实参
func5(2,y=5)
# 匿名函数的定义
lisp(一门函数式编程语言)衍生出lambda以及好多别的东西
lambda
print((lambda x, y: x**y)(3,4))
给高阶函数传参时会用到
容器类的数据结构,课表,有序,可嵌套、异构。
1.添加数据的方法
lis.append(x) # 每次从尾部添加一个元素
lis.extend(iterable) # 在原列表尾部合并新的可迭代对象(+号会生成新的列表)
lis.insert(i,x)# 在列表的任意位置添加新的元素 如果选择的位置是最后一位的话 原位置的数据向后移动
2.删除的方法
lis.remove (x) #移除找到的第一个值
lis.pop(index) # 根据下标弹出数据
lis.clear() # 清空整个列表
del 关键字,删除对象
3.其他方法
lis.count(x) # x 在列表中出现的次数
lis.index() 通过值查找下标
lis.sort() # 倒序
lis.reverse() # 倒序输出
lis.copy() # 复制lis[:]
Python中的复制都是引用
lis_b=lib_a
栈和队列
栈:先进后出的结构
队列:先进先出(排队),生产者消费者模型。
不可变的列表。用来做参数的传递比较安全,一旦创建不可修改
除了通用的方法之外,相对列表来说,元组只有查询的功能
# 圆括号(可省略)中定义元组时必须加逗号,否则类型会变为整形,
yield (函数中返回值后函数继续运行)
set_obj = {1,2,3}
集合中所有的元素都是唯一的。可变、无序、可嵌套、可以异构
散列表
因为无序,所有不能使用下标
1,去重
2.交并差集运算:获取集合中相同的数据,使用交集运算;合并两个集合时,使用并集运算;集合A去除和集合B相同的数据 A-B’;对称差,保留AB中不相同的数据
# set_obj1.cppy() 对集合进行浅拷贝
# 去除重复的值,可以进行交集、并集、差集运算。
set_obj1 = {
1,2,3,"a","b","c"}
set_obj2 = {
3,4,5,"c","d","a"}
# 获取集合中相同的数据,使用交集运算
print(set_obj1 & set_obj2)
# 合并两个集合时,使用并集运算
print(set_obj1 | set_obj2)
# 差集运算,集合A去除和集合B相同的数据 A-B
print(set_obj1 - set_obj2)
# ^对称差,保留A、B中不相同的数据局
print(set_obj1 & set_obj2)
dic={“name”:“by”,}
字典:无序、可变、值是可以任意类型、键只能是不可变数据类型(数字、字符串、元祖)、值可以嵌套
使用字典这种数据结构的时候,可以快速的通过键来找值。O(1)
NoSqL: hash() 散列表
key:value
# 向字典中存入数据
dic["email"]="[email protected]"
print(dic)
# 向字典中添加数据或修改方法2
dic.update({
"phone":"12323213213"})
print(dic)
dic.update(" ":" "," ":" ")
print(dic)
定义模块.py 文件
# 作为模块时,不会执行一下功能。
if __name__ == "__mian__" :
# 将模块作为程序执行的功能
pass
引用模块
import 模块名
# 通过模块名.函数() 模块名.变量 模块名.类
from 模块名 import 函数名/类名/变量名as/别名
__name__:模块名
__file__:模块的绝对路径
__doc__:模块的说明文档
一个从.pyc 文件读出的程序并不会比它从.py读出时运行的更快,.pyc文件唯一快的地方在于载入速度
包是用来封装模块的。
1.创建一个文件夹。
2.在文件夹中创建一个初始化模块
__init__.py #初始化模块
3.把需要封装的模块复制到包中。
__init__.py 中可以定义
__all__=["模块1","模块2",.......]
from 包 import * # 引用包中的所有模块
pip install 第三方模块名
pip list 查看模块
pip uninstall 卸载模块
improt sys # 所有python模块所在的路径
字符串是有序的不可变得字符组成的序列。
线性结构。字符串的底层结构是数组array
python3
utf-8 可变长度的Unicode
字母\数字\标点符号(Ascii)一个字节
常用汉字 三个字节
moji
凯撒加密(对称加密)
ord()—>将字符转为对应的 数字编号
chr()—> 数字编号转为对应的字符
string.encode() # 将Unicode编码的str的字符串——》其他编码的bytes字节码
解码
bytes.decode() # 其他编码的bytes字节码—》Unicode编码的str的字符串
使用特定的描述规则来匹配字符串的工具。
元字符
. 匹配一个任意字符
除特殊字符外的字符可以匹配本身
(.*?^$(){
}[])
\. \? \^ \$
[ab]匹配任意一个包含的字符
[^a] 反向匹配,在[]中的数据都不匹配
[0-9]
\D 匹配除了数字以外的所有数据
\d 匹配任意一个数字
[a-z]
[A-Z]
[a-zA-z0-9_]
\W 除了数字下换线都可以匹配
\w 匹配任意的一个数字字母下划线
\s 匹配空格
\S
* 0次到无限次
+ 1次到无限次
? 0次到一次
{
n} 匹配n次
{
n,}匹配n到无限次
{
n,m}匹配n到m次
# 如果在数量词后加“?”表示使用非贪婪模式进行匹配
# 贪婪模式:尽可能多的匹配数据。根据数量9的上限匹配
#非贪婪模式:尽可能少的匹配数据。根据数量的下限匹配。
^ "^x" 匹配以x开头
$ "x$" 匹配以x结尾
\b 确定单词的边界 \bword\b
\B 获取其他字符内部的字符[^\b]
|
(\d{
11}|\w{
11})
\1 通过数字调用分组
(?P<name>) 给分组起别名
(?P=name) 使用别名调用表达式。
(?# 注释)
a(?=\d) a1 只匹配数字前的a
(?<=\d)1a 只匹配数字后的a
(?<=)(\w+)(?=<\/h1)
[外链图片转存失败(img-KHks6JkH-1565141380135)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1564108607683.png)]
re.compile(“正则表达式”) —>正则对象re_obj
re_obj.findall(string) --> list
re_obj.match(string) —>match_obj.group() —> string
---->None
re.obj.split(string) ----->list
re_obj.sub(new,string) ---->str
re_obj.subn(new,string) —>(str,)
编写匹配小数的正则 1.234 3.14 - # \d+(\.\d+)
匹配邮箱地址。 # [\w]+(\.[\w]+)*@[\w]+(\.[\w])+
匹配身份证号。 # [1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]
手机号匹配。
网址的匹配url
Ip地址的匹配
匹配汉字。
re_obj.match(string) —>match_obj.group() —> string
---->None
re.obj.split(string) ----->list
re_obj.sub(new,string) ---->str
re_obj.subn(new,string) —>(str,)
编写匹配小数的正则 1.234 3.14 - # \d+(\.\d+)
匹配邮箱地址。 # [\w]+(\.[\w]+)*@[\w]+(\.[\w])+
匹配身份证号。 # [1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]
手机号匹配。
网址的匹配url
Ip地址的匹配
匹配汉字。