Skip to content

资源推荐

官方资源

Python官网

Python 3.14.4 中文文档

Python 教程 — Python 3.14.4 文档

第三方资源

简介 - Python教程 - 廖雪峰的官方网站

https://blog.csdn.net/weixin_42399800/article/details/143822422?

GitHub Top 10 + Python 开源项目(2021版 - 知乎

Python 教程

Python 基础教程 | 菜鸟教程

GitHub项目

https://github.com/bregman-arie/devops-exercises

https://github.com/practical-tutorials/project-based-learning?tab=readme-ov-file#python

python · GitHub Topics

书籍

https://zhuanlan.zhihu.com/p/34378860

快速入门

  1. 简明Python教程 (在线书籍)《A Byte of Python》

https://www.pytorchchina.com/wp-content/uploads/2020/02/byte-of-python-chinese-edition.pdf

  1. python编程:从入门到实践
  2. 《看漫画学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

应用场景

  1. WEB开发
  2. 网络编程
  3. 爬虫开发
  4. 云计算开发
  5. 人工智能
  6. 自动化运维
  7. 金融分析
  8. 科学运算
  9. 游戏开发
  10. 桌面软件

项目推荐

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库

  1. openpyxl
  2. xlrd和xlwt
  3. pandas
  4. pyexcel
  5. xlwings
  6. pyxlsb
  7. pyexcelerate

Python 操作 Excel库总结

Python哪个Excel库最好用

[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教程

[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哪个Excel库最好用

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读取excel三大常用模块到底谁最快?

闭包

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

游戏开发

  1. Pygame
  2. Pyglet
  3. Panda3D
  4. Blender Game Engine
  5. Godot Engine
  6. RenPy
  7. PyOgre
  8. Irrlicht
  9. Unity3D

游戏开发

  • Unreal Engine
  • Unity
  • Cocos
  • Laya
  • Godot

安装

一般的Linux发行版都会自带Python, 不建议手动安装, Python属于基础组件, 手动安装容易出现问题

CentOS7 安装python3.8

bash
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

bash
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

参数

位置参数

即普通的参数。也称必选参数。

python
def power(x):
    return x * x
def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

默认参数

也称可选参数。

  1. 必选参数在前,默认参数在后。
  2. 变化大的参数放前面,变化小的参数放后面当默认的参数。
  3. 当不按顺序提供部分默认参数时,需要把参数名写上。
  4. 默认参数强烈建议指向不变对象!可以用None这个不变对象来实现。
python
def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)

可变参数

可变参数在调用时自动组装为一个tuple。

list参数和tuple参数前加“*”可作为可变参数使用。

python
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
 
>>> calc(1, 2)
5
>>> calc()
0

关键字参数

关键字参数扩展函数的功能。 允许传入0个或任意个含参数名的参数,在函数内部自动组装为一个dict

python
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作为关键字参数。

python
def person(name, age, *, city, job):
    print(name, age, city, job)

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

python
def person(name, age, *args, city, job):
    print(name, age, args, city, job)

命名关键字参数必须传入参数名,否则报错

命名关键字参数可以有默认值

python
def person(name, age, *, city='Beijing', job):
    print(name, age, city, job)
>>> person('Jack', 24, job='Engineer')
Jack 24 Beijing Engineer

参数组合顺序

必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

参数解包

python
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)的概念

数据封装、继承、多态

定义类:

python
class Student(object):
    pass

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

创建实例:

python
stu=Student("zhangsan",95)

__init__方法的第一个参数永远是self,表示创建的实例本身

在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。

方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;

Python允许对实例变量绑定任何数据

访问限制

在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

python
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:派生类、子类、

子类获得了父类的全部功能。

python
class 子类(父类):
    pass

子类覆盖父类的同名方法

python
isinstance(instance, clazz)

在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。

由运行时该对象的确切类型决定.(动态绑定???)

符合开闭原则。对扩展开放,对修改封闭

python
def run_twice(animal):
    animal.run()
    animal.run()

只需要传递给run_twice方法的实例有run()方法即可,无须严格继承

"file-like object"

继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。

动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。

获取对象信息

type()函数

types.FunctionType

isinstance()函数

isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上

dir()函数

获得一个对象的所有属性和方法

基于 MIT 许可发布