文章目录
- 一 基础语法
- 二 集合
- 三 函数
- 四 IO
- 五 项目结构
- 六 面向对象
一 基础语法
-
Python如果是部署在Linux上,是需要通过源码去编译安装的,在编译的过程中,会以来一些第三方的软件。所以这些软件需要提前安装一下。
yum install wget zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel th-devel gce make zlib zlib-devel libffi-devel -y
-
python的输出函数print()使用逗号就可以进行拼接
-
python的输出函数print()有一个参数end,默认为换行符\n。可以设置这个end参数,让print()不换行
-
在python中,变量是没有类型的,只是变量存储的数据是有类型的。
-
python中类型转换直接使用str() int() float()方法就可以
-
python中整型和浮点型无法与字符串类型进行拼接,即数字类型无法自动类型转换成字符串类型。
-
python中字符串格式化有两种方式:
-
%占位符的方式
:与其它类型的拼接一般使用占位符的形式。%d表示整数占位符,%f表示浮点数占位符,%s表示字符串占位符- 可以使用%m.n来控制占位符显示的宽度和精度。m表示宽度,即在命令行打印出的数字宽度,宽度大于数字本身会使用空格填充,空格小于数字本身则不生效;.n表示小数部分的精度。
-
f格式化方式
:另一种字符串格式化的方式是使用f"{变量}"来进行。这种方式变量类型没有限制,也没有精度控制。适合对精度没有要求的场景
-
-
python中的boolean类型首字母大写(Java全小写)
-
python是严格缩进的语言。通过严格缩进来控制代码块的域。即通过缩进来替换其他语言中的{}。
-
python中的逻辑判断符是 and 和 or,而不是&、|、&&、||
-
python中的条件判断一般会省略()
-
python的for循环的语法为
for 临时变量 in 待处理的数据集: ...
- 其中,待处理的数据集是一种
序列类型
。 - 在python中,序列类型有:字符串、range()函数生成的类型
- 其中,待处理的数据集是一种
-
range()函数的语法
-
range(num):[0, num)
-
range(num1, num2):[num1, num2)
-
range(num1, num2, step):[num, num2),步长为step
-
-
python中,在for循坏外部,竟然可以访问for语句中的临时变量!尽管这是不符合规范的,但确实可以访问。
-
在python中,返回值None可用作if的判断条件,None相当于False
-
在python中,变量中存放的数据类型可以随意变换,因此在初始化时,若没有初始化要求,则可以进行None值初始化
-
函数注释在函数中使用三引号进行定义,形式如下
def fun(x): """ :param x: 输入数据 :return: 返回为空 """ print(x) return None
-
python中无法在外部访问局部变量,但为什么for循环的局部变量是可以访问的?
-
global关键字可以将函数中定义的变量申明为全局变量
二 集合
-
python中,集合被称为数据容器,而且数据容易中的数据类型是不受限制的,那是不是就没有泛型?
-
python中的列表就像是Java中数组和list的合体。下标索引从左向右是从0开始递增,从右向左是从-1开始递减。下标索引超出范围也会报错。
-
python中list的方法有:
-
index(element):返回element元素在数组中的下标,如果不存在会报错
-
insert(index, element):在index位置插入element
-
append(element):将element插入到列表的尾部
-
extend(list):将其他的list插入到列表的尾部,即批量插入
-
del(index):删除index位置的元素
-
pop(index):取出index位置的元素,并删除。即弹出index位置的元素
-
remove(element):删除element元素。从左到右搜索,删除第一个符合条件的元素。
-
clear():清空列表
-
count(element):统计element元素在列表中的数量
-
len():返回列表的长度
-
-
python中函数和方法是两个明确的概念。函数是在类之外的代码单元,方法是在类内部的代码单元。它们的功能是相似的,只是方法中多了一个参数self
-
python中的元组可以认为是
不可以被修改
的列表。使用()来进行定义,或者使用tuple()来定义一个空元组。若元组只有一个元素,则需要在此元素之后增加一个逗号,
,如果不加逗号则将被认为是string。 -
元组不可修改,因此tuple的方法比较少,有如下三个:
-
index(element)
-
len()
-
count(element)
-
-
元组的不可修改,意思是元组不可增加,删除,修改元素的类型。但如果元组的元素为其他可修改的数据容器,则可以修改该该数据容器的内容。
-
数据容器str也无法修改的。对str的任何的修改都不是在原str的,而是生成一个新的str。str本质上是一个
字符的容器
。 -
str的方法:
-
index(substr):查找substr在str中的骑士为止
-
replace(substr, new_substr):将substr替换为new_substr
-
split(substr):按照substr将str进行分割
-
strip(substr):str头尾的字符只要在substr中出现就会被删除,直到第一个没有出现在substr中为止。不传参数默认取出空格和换行符
-
count(substr):统计str中substr出现的次数
-
len():统计str的长度
-
-
序列的切片:就是和substring类似。序列是连续、有序、支持下标索引的数据容器的统称(列表,元组,字符串)。语法为:
序列[开始位置:结束位置:步长]
- 表示取出[开始位置, 结束位置)的子序列。左开右闭。
- 当步长为负数时,表示从右到左进行反向切片。
切片操作可以连续执行
-
集合就是Set,可以存储不重复的、无序的数据。使用{}或者set()进行定义。
-
集合的方法:
-
add(element):向set重添加一个元素element
-
remove(element):移除element元素
-
pop():随机取出一个元素,并从set中删除。即随机弹出一个元素。
-
clear():清空set
-
set1.difference(set2):返回set1和set2的差集。即找存在set1中而不存在set2中的元素
-
set1.difference_update(set2):在set1中消除set1和set2的差集
-
set1.union(set2):返回set1和set2的并集
-
len():返回set的长度
-
-
set不支持下标索引,因此只能使用for循环来遍历
-
字典dict,就是Map。使用{}或者dict()进行定义,语法如下:
{key:value, key:value, key:value...} my_dict = {} # 定义一个空字典、{}表示空字典而不是空集合,空集合只能使用set()来申明
-
字典的key不允许重复。dict的方法:
-
获取key对应的value的方式为:
my_dict[key]
-
新增/更新字典元素的方式
my_dict[key] = value
-
pop(key):删除元素
-
clear():清空元素
-
my_dict.keys:获取所有的key,类型为dict_keys
-
len():统计字典的长度
-
-
对字典进行for循环时,临时变量就是字典的key
-
数据容器的通用方法:
-
len()
-
max()
-
min()
-
容器转换:
- list(容器):将容器转换为列表。如果容器是字典,则之保留key,舍弃value
- str(容器):将容器转换为字符串
- tuple(容器):将容器转换为元组
- set(容器):将容器转换为set。如果容器是字典,则之保留key,舍弃value
-
sorted(容器, reverse = True):排序,得到一个排序好的
列表
-
三 函数
-
python中函数可以有多个返回值。在接收的时候可以使用相应个数的变量进行接收即可
-
python中函数的传参方式有:
-
默认位置传参
-
关键字参数:使用
键=值
的方式进行传参 -
缺省参数:可以定义参数的默认值,在传参时如果不手动传参,则以默认值传参。默认值参数必须放在参数列表最后。
-
不定长传参:
- 使用*args来表示参数,在函数中,args为一个参数的
元组
- 使用**kwargs来表示参数,在传参的时候必须使用key = value的形式,在函数中mkwargs为一个参数的
字典
- 使用**kwargs来表示参数,在传参的时候必须使用key = value的形式,在函数中mkwargs为一个参数的
- 使用*args来表示参数,在函数中,args为一个参数的
-
-
python中,参数的类型可以是方法。这其实和Java中的匿名内部类比较相似。形参是接口,在传值的时候传一个匿名内部类,定义具体的方法逻辑。因此二者都可以使用lambda表达式。
四 IO
-
python中读取文件直接使用open()方法就可以
-
文件对象的方法:
-
read(count):读取count长度的数据,如果不传入count,则默认读取整个文件
-
readline():读取一行
-
readlines():读取所有行,封装成一个列表
-
for line in 文件对象:循环遍历文件,每次得到一行数据
-
close():关闭文件对象
-
-
使用with open() as f对文件进行操作,会在操作结束后自动关闭文件对象
-
python中的异常捕获语法
try: ... except Error1 as e: ... except Error2 as e: ... else: ... finally: ... 或者 try: ... except (Error1, Error2, ...) as e: ... else: ... finally: ...
五 项目结构
-
python模块就是一个.py文件。一个.py文件中可以有函数,类,变量等组成成分
-
python模块导入的常用语法如下:
[from 模块名] import [模块| 类 | 变量 | 函数 | *] [as 别名]
-
常用的组合形式如下:
-
import 模块名
-
from 模块名 import 类、变量、方法
-
from 模块名 import *
-
import 模块名 as 别名
-
from 模块名 import 功能名 as 别名
-
-
如果从不同模块导入了同名的功能,则后导入的会覆盖先导入的
-
在导入模块时,如果被导入模块中有可以执行的语句,则会直接执行这些语句。因此python中有一个
__name__
变量,哪个模块被执行了,当前模块的__name__变量就会被赋值为__main__,在被导入的模块中,将可执行的代码放入if __name__ == __main__
中,在调用该模块时,这些可执行语句就不会执行了。 -
在python中,还有一个变量
__all__
,他是用来控制*
的作用范围的。如果模块中定义了__all__,那么从别的模块中使用import *导入的时候,会导入__all__中申明的左右功能。没有在__all__中申明的则不会被导入。
-
python包本质上是一个文件夹,用来管理某个部分的python模块。如果一个文件夹中有
__init__.py
文件,则这个文件夹就被认为是一个python包。 -
import既可以导入模块,也可以导入类、方法、变量,因此导入包中的功能的时候,可以有多重写法:
-
from 包名.模块名 import 功能名,然后直接使用功能名进行调用
-
from 包名 import import 模块名,然后使用 模块名.功能名 进行调用
-
import 包名.模块名,然后使用 包名.模块名.功能名 进行调用
-
import 包名.模块名 as 别名,然后使用 别名.功能名 进行调用
-
-
常用的第三方包有;
-
科学技术中常用的包:numpy
-
数据分析中常用的包:pandas
-
大数据计算中常用的包:pyspark、apache-flink
-
图形可视化中常用的包:matplotlib、pyecharts
-
人工智能中常用的包:tensorflow、pytorch
-
六 面向对象
-
python中创建对象不需要new关键字,直接
类名()
就可以 -
self关键字:表示调用该方法的类对象自身。在定义类的方法的时候必须带上这个参数,但在调用时传参可以忽略这个参数。
-
在类的内部访问类的成员变量或者成员方法的时候,必须要带上self。
-
python中没有方法的重载,定义多个同名方法,只有最后一个会生效
-
python中的成员变量可以不显式的定义,在构造函数中对成员变量进行赋值的时候,如果没有显式的定义成员变量,则赋值语句会隐式定义成员变量并赋值
-
python的魔术方法:
-
__init__
:初始化方法 -
__str__
:相当于Java中的toString() -
__lt__
:小于或者大于比较,直接使用运算符 -
__le__
:大于等于或者大于等于比较,直接使用运算符 -
__eq__
:等于比较,直接使用运算符
-
-
python中私有属性以两个下划线
__
定义。给类中的私有属性赋值不会报错,但会无效;获取类的私有属性会直接报错 -
python中继承的语法是,直接在子类后面加个括号,括号里面是要继承的父类。
-
python中是可以多继承的。在多继承中,如果发生同名冲突,按照谁先来谁优先级高原则进行覆盖。
-
python中一个py文件可以有多个class
-
pass关键字,表示什么都没有,起到一个占位符的作用。通常是为了满足语法的要求。也可以表示方法为抽象方法。
-
python是一种弱类型的语言,传参的时候或者在方法里面使用参数的时候,可能无法知道有哪些方法可以使用。pycharm也无法做出提示。因此python提供了类型注解这一功能。在开发阶段为编译器和开发者提供类型的注释。
-
变量的类型注解的语法为:
方式一: 变量:类型 = 值 方式二: 变量 = 值 # type: 类型
-
函数形参的类型注解和函数返回值的类型注解的语法为:
def 函数方法名(形参: 类型, ..., 形参: 类型) -> 返回值类型: pass
-
union类型注解:用来定义混合类型的注解
-
python中也有抽象类、接口、多态的概念。但是抽象类、接口并没有关键字来定义。是一种非强制性的约束。一般认为,方法体是pass的方法是抽象方法,含有抽象方法的类称为抽象类。所有方法都是抽象方法的类就是接口。这点和Java是相似的。