Python是什么?

Python是什么?

Python高级动态强类型的解释型语言

人生苦短,我用python

让代码自动符合规范

Ctrl + Alt + l (自动规范空格)

  • 函数与其他代码之间要有一个空行

  • 类与其他代码之间要有两个空行

  • 果一行语句太长,可以在 行尾加上\来换行分成多行,但是更建议使用括号来包 。

  • 必要的空格和空行

常用函数

print()

input(“提示显示:”) 默认是字符串,只能是字符串

每个 import 只导入一个模块

所有把编写的代码写入.py文件中在被Python解释器质性大的方式是脚本 模式。直接在python命令行书写代码被执行的方式是交互模式(命令行模式)。

Python中序列的基本操作

字符串:数组实现的 ,不可变,有序

列表:有序、可变、可嵌套、可异构

元祖:有序的、不可变、可嵌套、可异构

[外链图片转存失败(img-xKxN1uQD-1565141380133)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1563435978861.png)]

index:索引(下标)元素(item)

id()获取数据(对象)在内存中的地址

  • 序列[index] 从序列获取数据,

  • 列表[index]=新值 对可变类型来说可以用来修改元素。

  • 切片操作 获取或修改原数列中一部分的数据

    • [ : ] -->复制所有内容
    • [ : 3 ] (前闭后开,左闭右开,含头不含尾)
  • “ + ” 对于序列来说时是拼接的意思 ,结果是新生成的序列

  • 序列可以和数字相乘,序列中的元素会重复

流程控制

多重赋值和序列解包

# 多重赋值:
# 给多个变量 附同一个值
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

Lambda 表达式

# 匿名函数的定义
lisp(一门函数式编程语言)衍生出lambda以及好多别的东西
lambda
print((lambda  x, y: x**y)(3,4))
给高阶函数传参时会用到

python内的数据结构

列表

容器类的数据结构,课表,有序,可嵌套、异构。

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的字符串

正则表达式

1.正则表达式是什么?

使用特定的描述规则来匹配字符串的工具。

2.正则的语法

元字符

. 匹配一个任意字符
除特殊字符外的字符可以匹配本身
(.*?^$(){
     }[])
\. \? \^ \$
[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 模块

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,)

练习6

编写匹配小数的正则 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,)

练习6

编写匹配小数的正则 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地址的匹配
匹配汉字。

你可能感兴趣的:(理论笔记)