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表示字符串占位符
f格式化方式
:另一种字符串格式化的方式是使用f"{变量}"来进行。这种方式变量类型没有限制,也没有精度控制。适合对精度没有要求的场景
python中的boolean类型首字母大写(Java全小写)
python是严格缩进的语言。通过严格缩进来控制代码块的域。即通过缩进来替换其他语言中的{}。
python中的逻辑判断符是 and 和 or,而不是&、|、&&、||
python中的条件判断一般会省略()
python的for循环的语法为
for 临时变量 in 待处理的数据集:
...
序列类型
。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()
容器转换:
sorted(容器, reverse = True):排序,得到一个排序好的列表
python中函数可以有多个返回值。在接收的时候可以使用相应个数的变量进行接收即可
python中函数的传参方式有:
默认位置传参
关键字参数:使用键=值
的方式进行传参
缺省参数:可以定义参数的默认值,在传参时如果不手动传参,则以默认值传参。默认值参数必须放在参数列表最后。
不定长传参:
元组
字典
python中,参数的类型可以是方法。这其实和Java中的匿名内部类比较相似。形参是接口,在传值的时候传一个匿名内部类,定义具体的方法逻辑。因此二者都可以使用lambda表达式。
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是相似的。