资源推荐
官方资源
第三方资源
https://blog.csdn.net/weixin_42399800/article/details/143822422?
GitHub Top 10 + Python 开源项目(2021版 - 知乎
GitHub项目
https://github.com/bregman-arie/devops-exercises
https://github.com/practical-tutorials/project-based-learning?tab=readme-ov-file#python
书籍
https://zhuanlan.zhihu.com/p/34378860
快速入门
- 简明Python教程 (在线书籍)《A Byte of Python》
https://www.pytorchchina.com/wp-content/uploads/2020/02/byte-of-python-chinese-edition.pdf
- python编程:从入门到实践
- 《看漫画学python》
进阶
1、Python官方文档
2、熟悉PEPs: https://peps.python.org/
3、Python进阶 英文名称《Intermediate Python》https://py.eastlakeside.cn/
4、Python Cookbook: https://python3-cookbook.readthedocs.io/zh_CN/latest/
5、Effective Python
6、Fluent Python
Web开发
Django
Fastapi
Flask
Tornado
知识体系
- 基础语法
- 容器
- 函数
- 文件操作
- 面向对象
- 网络编程
- 多任务编程
- 正则表达式
数据结构和算法
链接:https://www.zhihu.com/question/472482760/answer/2002072351
应用场景
- WEB开发
- 网络编程
- 爬虫开发
- 云计算开发
- 人工智能
- 自动化运维
- 金融分析
- 科学运算
- 游戏开发
- 桌面软件
项目推荐
Github 上很火的 7 个学习 Python 实战项目 - 知乎 (zhihu.com)
新手项目
GitHub 上适合新手的开源项目(Python 篇) - 知乎 (zhihu.com)
企业级项目
- ansible
- saltstack
- supervisor
- Paramiko
- Fabric
- jumpserver
- sqlmap
- scapy
- scrapy
- selenium
- pyspider
链接:https://www.zhihu.com/question/426166143/answer/1536074713
数据分析
三剑客:
- pandas: 提炼数据
- numpy: 科学计算
- matplotlib: 数据可视化
excel库
- openpyxl
- xlrd和xlwt
- pandas
- pyexcel
- xlwings
- pyxlsb
- pyexcelerate
[Python操作Excel教程](https://blog.csdn.net/lm_love_hxl/article/details/130733070?ops_request_misc=&request_id=&biz_id=102&utm_term=python excel库&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-130733070.nonecase&spm=1018.2226.3001.4187)
[python自动化办公](https://blog.csdn.net/weixin_41261833/article/details/106028038?ops_request_misc={"request_id"%3A"169536549316800192249153"%2C"scm"%3A"20140713.130102334.pc_all."}&request_id=169536549316800192249153&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~hot_rank-2-106028038-null-null.142^v94^insert_down1&utm_term=python excel库&spm=1018.2226.3001.4187)
[Python操作Excel用到的库](https://zhuanlan.zhihu.com/p/566726405#:~:text=Python操作Excel用到的库 1 1.xlwings 地址: xlwings.org%2F 特点:xlwings 是开源且免费的,预装了 Anaconda,地址: pypandas.cn%2Fdocs%2F ... 8 8.Marmir 地址: github.com%2Fbrianray%2Fmm)
Python Resources for working with Excel - Working with Excel Files in Python (python-excel.org)
使用 “Pandas + openpyxl” 组合
https://blog.csdn.net/weixin_42321517/article/details/112390194
https://zhuanlan.zhihu.com/p/351998173
https://zhuanlan.zhihu.com/p/651839770
闭包
python中嵌套函数,闭包函数讲解 - 知乎 (zhihu.com)
python中函数嵌套、函数作为变量、以及闭包的原理 - 知乎 (zhihu.com)
lamda表达式
Python 之 lambda 函数完整详解 & 巧妙运用_lambda函数python_Nick Peng的博客-CSDN博客
C++lamda表达式 C++ Lambda表达式的完整介绍 - 知乎 (zhihu.com)
GUI编程
- pyqt
- pyslide6
- pyqt5
- tkinter
- kivy
- wxPython
- PySimpleGui
- Libavg
- PyForms
- PySide2
- Wax
- PyGUI
游戏开发
- Pygame
- Pyglet
- Panda3D
- Blender Game Engine
- Godot Engine
- RenPy
- PyOgre
- Irrlicht
- Unity3D
游戏开发
- Unreal Engine
- Unity
- Cocos
- Laya
- Godot
安装
一般的Linux发行版都会自带Python, 不建议手动安装, Python属于基础组件, 手动安装容易出现问题
CentOS7 安装python3.8
yum -y install wget
yum install perl-Test-Simple
yum install perl-CPAN -y
perl -MCPAN -e shell
install Text::Template
install Text::More
wget https://www.python.org/ftp/python/3.8.5/Python-3.8.0.tgz
tar -zxpf Python-3.8.5.tgz
cd Python-3.8.5/
yum groupinstall -y 'Development Tools'
yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib zlib-devel perl-Test-Simple
# 加上--enable-optimizations参数需要升级gcc版本
./configure prefix=/usr/local/python3 --enable-optimizations # --with-openssl=/usr/local/openssl/lib 解决openssl版本为1.0.2的问题,升级openssl后重新编译安装python加入此参数
make && make install
#修改链接 python pip
which python
ls -la /usr/bin/python*
ln -sf /usr/local/python3/bin/python3.8 /usr/bin/python3
ln -sf /usr/bin/python3 /usr/bin/python
which pip
ln -sf /usr/local/python3/bin/pip3.8 /usr/bin/pip3
ln -sf /usr/bin/pip3 /usr/bin/pip
#修改yum相关脚本 "#!/usr/bin/python"-->"#!/usr/bin/python2"
ls -la /usr/bin/yum*
-rwxr-xr-x. 1 root root 801 Oct 2 2020 /usr/bin/yum
-rwxr-xr-x. 1 root root 10189 May 13 2020 /usr/bin/yum-builddep
-rwxr-xr-x. 1 root root 9579 May 13 2020 /usr/bin/yum-config-manager
-rwxr-xr-x. 1 root root 8538 May 13 2020 /usr/bin/yum-debug-dump
-rwxr-xr-x. 1 root root 7903 May 13 2020 /usr/bin/yum-debug-restore
-rwxr-xr-x. 1 root root 11115 May 13 2020 /usr/bin/yumdownloader
-rwxr-xr-x. 1 root root 11031 May 13 2020 /usr/bin/yum-groups-manager
vim /usr/libexec/urlgrabber-ext-down ### "#!/usr/bin/python"-->"#!/usr/bin/python2"
sed 's/python/python2/' /usr/bin/yum* # 仅替换一次
sed 's/python/python2/g' /usr/bin/yum* # 全局替换centos8安装python3.10.9
yum -y install wget
wget https://www.python.org/ftp/python/3.8.5/Python-3.8.0.tgz
tar -zxpf Python-3.8.5.tgz
cd Python-3.8.5/
yum groupinstall -y 'Development Tools'
yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib zlib-devel perl-Test-Simple
# 加上--enable-optimizations参数需要升级gcc版本
./configure prefix=/usr/local/python3 --enable-optimizations # --with-openssl=/usr/local/openssl/lib 解决openssl版本为1.0.2的问题,升级openssl后重新编译安装python加入此参数
make && make install
#修改链接 python pip
wget https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tgz --no-check-certificate
tar -zxvf Python-3.10.9.tgz
cd Python-3.10.9/
ls
./configure --prefix=/usr/local/python3 --enable-optimizations
make && make install
which python
ls -la /usr/bin/python*
ln -sf /usr/local/python3/bin/python3.10 /usr/bin/python3
ln -sf /usr/bin/python3 /usr/bin/python
ln -sf /usr/local/python3/bin/pip3.10 /usr/bin/pip3
ln -sf /usr/bin/pip3 /usr/bin/pip
ls -la /usr/bin/yum*
ls -la /usr/bin/dnf*
ls -la /usr/bin/dnf-3
file /usr/bin/dnf-3
vim /usr/bin/dnf-3
ll /usr/libexec/platform-python
ll /usr/libexec/platform-python3.6
ll /usr/libexec/
ll /usr/libexec/platform-python*
ll /usr/local/python3/bin/python3*
md5sum /usr/libexec/platform-python3.6
md5sum /usr/libexec/platform-python3.6m
cp /usr/local/python3/bin/python3.10 /usr/libexec/platform-python3.6m -f
cp /usr/local/python3/bin/python3.10 /usr/libexec/platform-python3.6 -f
/usr/libexec/platform-python -v参数
位置参数
即普通的参数。也称必选参数。
def power(x):
return x * x
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s默认参数
也称可选参数。
- 必选参数在前,默认参数在后。
- 变化大的参数放前面,变化小的参数放后面当默认的参数。
- 当不按顺序提供部分默认参数时,需要把参数名写上。
- 默认参数强烈建议指向不变对象!可以用None这个不变对象来实现。
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)可变参数
可变参数在调用时自动组装为一个tuple。
list参数和tuple参数前加“*”可作为可变参数使用。
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 2)
5
>>> calc()
0关键字参数
关键字参数扩展函数的功能。 允许传入0个或任意个含参数名的参数,在函数内部自动组装为一个dict。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Michael', 30)
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}dict类型可以用作关键字参数
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra) # 副本, 在函数内修改extra,不会影响上面的extra
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}命名关键字参数
限制关键字参数的名字。例如:只接收city和job作为关键字参数。
def person(name, age, *, city, job):
print(name, age, city, job)如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)命名关键字参数必须传入参数名,否则报错
命名关键字参数可以有默认值
def person(name, age, *, city='Beijing', job):
print(name, age, city, job)
>>> person('Jack', 24, job='Engineer')
Jack 24 Beijing Engineer参数组合顺序
必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
参数解包
def fn1(a,b,c):
print(a, b, c)
x = (1,2,3) # 元组数据
y = [4,5,6] # 列表数据
z = {'a':7, 'b':8, 'c':9} # 字典数据
fn1(*x) # 元组解包 *
fn1(*y) # 列表解包 *
fn1(**z) # 字典解包 通过 **对字典进行解包
# 输出为
1 2 3
4 5 6
7 8 9模块
在Python中,一个**.py文件就称之为一个模块**(Module)
提高了代码的可维护性
避免函数名和变量名冲突
Python引入了按目录来组织模块的方法,称为包(Package)
每个包目录下必须有**init.py**文件,否则该目录就只是普通目录
init.py文件可以是空文件,也可以包含python代码
init.py文件本身是一个模块,模块名就是它所在的包(即目录)
自定义模块不能和系统内置模块冲突,否则无法导入系统内置的模块
在模块内部,通过全局变量 __name__ 可以获取模块名(即字符串)
面向对象
类和实例
Object Oriented Programming, OOP
类(Class)的概念。
实例(Instance)的概念
数据封装、继承、多态
定义类:
class Student(object):
pass
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score创建实例:
stu=Student("zhangsan",95)__init__方法的第一个参数永远是self,表示创建的实例本身
在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。
方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;
Python允许对实例变量绑定任何数据
访问限制
在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
class Student(object):
def __init__(self, name, score):
self.__name = name # private变量
self.__score = score # private变量
def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_score(self, score):
self.__score = score
def set_name(self, name):
self.__name = name在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量。
以一个下划线开头的实例变量名,比如_name,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
类似__xxx__的变量可以通过实例._类名__name来访问,但强烈不建议。
继承和多态
Base Class:基类、父类、超类
Sub Class:派生类、子类、
子类获得了父类的全部功能。
class 子类(父类):
pass子类覆盖父类的同名方法
isinstance(instance, clazz)在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。
由运行时该对象的确切类型决定.(动态绑定???)
符合开闭原则。对扩展开放,对修改封闭
def run_twice(animal):
animal.run()
animal.run()只需要传递给run_twice方法的实例有run()方法即可,无须严格继承
"file-like object"
继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。
动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。
获取对象信息
type()函数
types.FunctionType
isinstance()函数
isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上
dir()函数
获得一个对象的所有属性和方法