python语言学习笔记

📋 知识地图

说明:✅ = 已有覆盖(可继续深化) ⬜ = 待扩充

一、Python 语言概述

  • ✅ Python 特点(极简、开源、解释型、胶水语言)
  • ✅ 编译型 vs 解释型语言对比
  • ✅ Python 主要应用领域(Web / 爬虫 / AI / 自动化运维)
  • ⬜ Python 2 vs 3 的历史与现状
  • ⬜ CPython / PyPy / Jython / MicroPython 的区别

二、开发环境

  • ⬜ Python 安装与版本管理(pyenv / conda)
  • ⬜ 虚拟环境(venv / virtualenv / conda env)
  • ⬜ pip 包管理(install / freeze / requirements.txt)
  • ⬜ IDE 选择(VS Code / PyCharm / Jupyter)

三、数据类型体系

  • ✅ 动态类型(赋什么值自动匹配)
  • ✅ 数字类型(int / float / 运算)
  • ⬜ 字符串操作(切片 / 格式化 / f-string / 常用方法)
  • ✅ 列表(list)创建、访问、增删
  • ✅ 元组(tuple)不可变特性
  • ✅ 字典(dict)键值映射
  • ✅ 集合(set)唯一性
  • ✅ range 区间对象
  • ⬜ 推导式(列表推导 / 字典推导 / 集合推导 / 生成器表达式)
  • ⬜ 可变 vs 不可变对象(mutable vs immutable)
  • ⬜ 深拷贝 vs 浅拷贝(copy / deepcopy)

四、运算与表达式

  • ✅ 算术 / 比较 / 逻辑(and or not)
  • ✅ 三目运算(a if cond else b)
  • ✅ 幂次方(**)
  • ⬜ 成员运算(in / not in)
  • ⬜ 身份运算(is / is not)
  • ⬜ 位运算

五、流程控制

  • ✅ if / elif / else
  • ✅ for 循环(for i in range / for item in 容器)
  • ✅ while 循环
  • ⬜ break / continue / else 子句在循环中的应用
  • ⬜ pass 占位语句

六、函数

  • ✅ 函数定义与调用(def)
  • ✅ 返回值机制
  • ✅ 内部函数(嵌套函数)
  • ✅ 闭包(closure)基础
  • ⬜ 参数类型:位置参数 / 默认参数 / 关键字参数 / 可变参数(args /*kwargs)
  • ⬜ lambda 匿名函数
  • ⬜ 装饰器(decorator)原理与应用
  • ⬜ 生成器(generator)与 yield
  • ⬜ 文档字符串(docstring)规范

七、类与面向对象

  • ✅ 类定义与实例化
  • ✅ 封装(property / getter-setter / 私有属性和方法)
  • ✅ 继承(单继承 / 多继承 / MRO 顺序)
  • ⬜ 构造方法(init)与 new
  • ⬜ 魔术方法(str / repr / len / eq 等)
  • ⬜ 类方法(@classmethod)与静态方法(@staticmethod)
  • ⬜ 抽象基类(ABC)
  • ⬜ dataclass(Python 3.7+)

八、模块与包

  • ⬜ import 机制与模块搜索路径
  • ⬜ 包的结构(init.py / all
  • ⬜ if name == “main“ 的用途
  • ⬜ pip 深入(install / uninstall / list / 源的配置)

九、异常处理

  • ⬜ try / except / else / finally
  • ⬜ 常见内置异常(ValueError / KeyError / TypeError / IOError)
  • ⬜ raise 抛出异常
  • ⬜ 自定义异常类
  • ⬜ 上下文管理器(with 语句 / enter / exit

十、文件 I/O

  • ⬜ 文件打开模式(r / w / a / b / + / encoding)
  • ⬜ 读取(read / readline / readlines)
  • ⬜ 写入(write / writelines)
  • ⬜ with open 自动关闭
  • ⬜ 路径操作(os.path / pathlib)

十一、并发编程

  • ⬜ 多线程(threading)与 GIL 限制
  • ⬜ 多进程(multiprocessing)
  • ⬜ 异步编程(asyncio / async / await)
  • ⬜ 线程池与进程池(concurrent.futures)

十二、标准库精选

  • ⬜ os / sys:系统交互
  • ⬜ datetime / time:时间处理
  • ⬜ json / csv:数据序列化
  • ⬜ re:正则表达式
  • ⬜ collections:高级容器(Counter / defaultdict / OrderedDict)
  • ⬜ itertools / functools:函数式编程工具
  • ⬜ requests(第三方):HTTP 请求

十三、Python 项目管理

  • ⬜ 项目结构规范(src-layout vs flat-layout)
  • ⬜ setup.py / pyproject.toml
  • ⬜ 发布到 PyPI
  • ⬜ 代码格式化(black / ruff / isort)
  • ⬜ 类型提示(type hints + mypy)

十四、测试

  • ⬜ unittest / pytest 框架对比
  • ⬜ 单元测试编写
  • ⬜ mock / patch 模拟对象
  • ⬜ 覆盖率工具(coverage)

十五、实战方向概览

  • ⬜ Web 开发(Flask / Django 入门路径)
  • ⬜ 网络爬虫(requests + BeautifulSoup / Scrapy)
  • ⬜ 数据分析(NumPy / Pandas)
  • ⬜ 自动化脚本与系统管理

python语言基础知识

python语言基础知识

python是一种极简、开源,面向对象,有着丰富类库(模块)的语言。

使用编译器将自身等效转换成机器语言的高级语言,通常称为编译型语言;而使用解释器将自身转换成机器语言的高级语言,称为解释型语言,Python 就是解释型编程语言的一种。c语言、c++、汇编等需要一次性把所以源代码转换为机器码交给计算机使用,这就是编译型语言,需要编译器;而python、js、php、shell等可以一边执行一边转换,不生成可执行程序,为解释型语言,由解释器不断解释。

编译型产生的程序具有“一次编译,无限次使用”特点,但其源码和执行程序却无法跨平台,需要按不同平台另行修改源码。
解释型则需要每次执行的时候转换源码,所以效率低,常应用于应用层面(网站开发、批处理、小工具)。因为解释型语言需要依靠源代码和解释器,所以就特别需要开发环境,也正是因为解释型语言需要依靠源码执行,所以都是开源的,而且具备跨平台的能力。

python由ABC语言发展而来,其可通过库,调用其他语言制作的模块(大部分为c和c++的),由此被称为“胶水”语言。其主要用于web开发、自动化运维、人工智能、网络爬虫、科学计算等方向,另外由于python可调用c++编写的图形模块,也可用于开发游戏。

hello world

print("hello world") //显然,作为解释型语言,其解释器包含了大量的各种方法的库文件,也就不用调入头文件等内容。之用用print函数输出

数据类型及运算符号

?。赋什么值,自动匹配该类型。支持如c语言那样,在print中使用格式化输出(%d、%i之类)以及转义字符。运算上还多了个**代表幂次方计算。如2**4,表示2的四次方。

需要注意逻辑运算符不同,而是and、or、not……

max = a if a>b else b 三目运算。与c语言对比表达式1 ? 表达式2 : 表达式3;,显然含义更加明确。

对于数据集合,python中由列表(list)、元组(tuple)、字典(dict)和集合(set)等方式。其会在内存中占用一块连续的内存。

1
2
3
4
5
6
7
8
9
10
11
a=["http://c.biancheng.net/python/", 1, [2,3,4] , 3.0]  //列表可存储任一形式数据

tuple1 = ('Python', 'Java', 'C++', 'JavaScript') //元组,创建后不可修改内容(常量集合?)
dict1 = {'a':100, 'b':42, 'c':9} //字典,无序,映射
range1 = range(1, 6) //区间
list1 = list(tuple1) //列表list函数,将一切即可转化为列表
print(list1) //输出列表
print(list1[1]) //访问第二个元素
del list1 //删除列表,python自动回收内存,可删除某个元素或某段元素
list1.append('a') //添加元素()可任意元素。extend()逐个添加、insert(位置,内容)插入、
list1.index() //查询列表指定元素,可指定查询范围。

python流程控制(略)

循环

1
2
3
4
5
print("计算 1+2+...+100 的结果为:") 
result = 0
for i in range(101): //逐个获取从 1 到 100 这些值,并做累加操作
result += i //range生成一系列连续整数
print(result)

函数

自定义函数

1
2
3
4
5
6
7
8
9
10
11
def my_len(str):  //自定义 len() 函数
'''
这里是说明文档
'''
length = 0
for c in str: //一个一个字符传递给c
length = length + 1
return length
length = my_len("http://c.biancheng.net/python/")
print(length)
\#print(my_len.__doc__) //调用函数说明文档,显示给使用者

值得注意

1
2
3
4
5
6
def add(a,b):
c = a + b
return c
c = add(3,4)
print(c) //这样调用函数返回值也可以调用到函数流程。注意
print(add(3,4))

另外,函数内部还可以定义局部函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def outdef ():  //全局函数
def indef(): //定义局部函数
print("调用局部函数")
return indef
new_indef = outdef() //将内部局部函数通过调用全局的方式放出来
new_indef() //现在可以在外部调用了。需要注意局部和外部函数之间的同名变量可能会因为遮蔽而报错

def nth_power(exponent): //#闭包函数,其中 exponent 称为自由变量。这类内部函数闭包让递归镶套函数书写可读性更佳。(并不觉得)
def exponent_of(base):
return base ** exponent
return exponent_of //返回值是 exponent_of 函数
square = nth_power(2) //计算一个数的平方,外部函数,值放入exponent
cube = nth_power(3) //计算一个数的立方
print(square(2)) //通过调用返回值,调用内部的函数,值以base放入。计算 2 的平方
print(cube(2)) //计算 2 的立方

类与对象

定义

1
2
3
4
5
6
7
8
9
10
11
class CLanguage :
name = "C语言中文网" //# 下面定义了2个类变量
add = "http://c.biancheng.net"
def say(self, content): //下面定义了一个say实例方法
print(content)
print(CLanguage.name) //使用类名直接调用
print(CLanguage.add)
CLanguage.name = "Python教程" //修改类变量的值
CLanguage.add = "http://c.biancheng.net/python"
print(CLanguage.name)
print(CLanguage.add)

越看越像某结构体

1
2
3
4
class CLanguage:
def info(self):
print(self,"正在学 Python")
CLanguage.info("zhangsan") //通过类名直接调用实例方法。这里传入值给了self。

封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class CLanguage :  //创建类
def setname(self, name): //写名方法
if len(name) < 3:
raise ValueError('名称长度必须大于3!')
self.__name = name
def getname(self): //读名方法
return self.__name //name私有化
name = property(getname, setname)
def setadd(self, add): //写网址方法
if add.startswith("http://"): //限制方法
self.__add = add
else:
raise ValueError('地址必须以 http:// 开头')
def getadd(self):
return self.__add
add = property(getadd, setadd)
def __display(self): //定义个私有方法。包括了两个封装量
print(self.__name,self.__add)
clang = CLanguage() //为类创建实例
clang.name = "C语言中文网"
clang.add = "http://c.biancheng.net"
print(clang.name)
print(clang.add)

通过对setname()和setadd()方法进行适当设计,可避免用户对类中属性的不合理操作。而该类中没有提供操作私有方法display()的,即可保护display()在外部不可调用。

继承

1
2
3
4
5
6
7
class Shape:
def draw(self,content):
print("画",content)
class Form(Shape): //继承
def area(self):
#....
print("此图形的面积为...")

多继承即多个父类,java、c#等因为多继承可能因父类同名方法等存在冲突。而python中按顺序,前面的覆盖后面父类的同名属性

1
2
class Person(People, Animal):  //多继承
pass
-------------本文结束感谢您的阅读-------------