最近需要用
python做数据分析,决定开始学python,总结一些基础笔记
一、导语
python是解析性语言python能做什么- 大数据分析
- 自动化运维与自动化测试
- web开发:
flask、jdango - 机器学习
TensorFlow - 胶水语言:如混合c++、java编程,能够把其他语法编写的模块连接在一起
Python语言的特点
- 语法简洁
- 可跨平台
- 应用广泛
- 支持中文
- 强制可读:通过强制缩进体现语句间的逻辑关系提高了程序的可读性
- 模式多样:语法层面同时支持面向过程和面向对象两种编程方式
- 粘性扩展:通过接口和函数集成其他语言编写的代码
- 开源理念
- 库类丰富
Python语言开发环境配置
Python解释器IDLE开发环境- 交互式启动
- 文件式启动
Python语言集成开发环境——PyCharm
二、基本知识
注释
- 注释是辅助性文字,不被执行
- 单行注释:以
#开头
#这是注释 |
多行注释:以
'''(3个单引号)开头和结尾
''' |
命名
- 命名是为变量关联标识符的过程,用于确保程序元素的唯一性
- 标识符由字母、数字、下划线(和汉字)等字符及其组合构成
- 标识符的首字符不能是数字 ,且中间不能出现空格
- 标识符对大小写敏感
保留字
- 保留字(
Keyword)也被称为关键字,是被编程语言内部定义并保留使用的标识符 Python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字:
>>> import keyword |
Python 3 有33个保留字
TrueFalseNoneandasassertbreakclasscontinuedefdelelifelseexceptfinallyforfromglobalifimportinislambdanonlocalnotorpassraisereturntrywhilewithyield
input()函数
- 使用
input()函数从控制台获得用户输入 input()函数以字符串类型返回结果
eval()函数
eval(<字符串>)函数的作用是间输入的字符串变成Python语句并执行
x=eval(input("请输入:")) |
print()函数
print()函数可以输出字符信息,也可以用字符的形式输出变量- 输出字符信息时,可以直接将待输出内容传递给
print()函数 - 输出变量值时,
print()函数用槽格式和过format()方法将变量和字符串结合到一起输出
函数
- 函数可以理解为对一组表达特定功能表达式的封装,将特定功能代码编写在一个函数里,使程序模块化更好,便于阅读和复用
- 可通过保留字
def自定义函数
文件操作

# 使用with操作文件 |




三、基本类型

类型判断两个方式
type判断基本类型 如type(10) == int不推荐isinstance(值,类型)或者isinstance(值,(int,float,str))三种中任意一种- 例
isinstance(1,int)
- 例
Numberintfloatcomplex复数- 如
36j
- 如
Boolbool('')/bool([])/bool({})/bool(0)/bool(None)- 都是转化为
False
字符串
str(序列)- 单引号
- 双引号
- 三引号(可以换行写多个字符串和ES6的反引号类似)
- 在字符串前面加一个
r,这个字符串就不是一个普通字符串,而是一个原始字符串会原样输出print(r'\n88fafa')此时\n不会转译
list列表 (序列)tuple元组 (序列)集合
set(无序,没有索引,不能切片,元素唯一,不能重复,只有value,没key){}如{1,2,3,4}1 in {1,2,3}1 not in {1,2,3,4}- 两个集合插集
{1,2,3} - {4,5} - 两个集合求交集
{1,2,3,4} & {2,3} - 并集
{1,2,3,4,5,6} | {3,4,7} - 定义一个空的集合
set()
字典
dict(有key无value,不同于集合只有value)- 很多
key-value组成,不能够有相同的键, key键不可变类型,可以是int/str/tuplevalue可以是:int/str/float/list/set/dict- 定义一个空的字典
{}
- 很多
两个整型相除得到整型 type(1//2) ==>int 整除会保留整数
// 二进制 |
转译字符
\n 换行 |
内置的字符串处理函数
| 函数 | 描述 |
|---|---|
len('x') |
返回字符串x的长度,也可返回其他组合数据类型元素个数 |
str('x') |
返回任意类型x所对应的字符串形式 |
chr(x) |
返回Unicode编码x对应的单字符 |
ord('x') |
返回单字符表示的Unicode编码 |
hex(x) |
返回整数x对应十六进制数的小写形式字符串 |
oct(x) |
返回整数x对应八进制数的小写形式字符串 |
内置的字符串处理方法(共43个,常用16个)
- 在
Python解释器内部,所有数据类型都采用面向对象的方式实现,封装为一个类 - 字符串是一个类,具有类似
<a>.<b>()形式的字符串处理函数,称为方法
| 方法 | 描述 |
|---|---|
str.lower() |
返回字符串str的副本,全部字符小写 |
str.upper() |
返回字符串str的副本,全部字符大写 |
str.islower() |
当str所有字符都是小写时,返回Ture,否则返回False |
str.isprintable() |
当str所有字符都是可打印的,返回Ture,否则返回False |
str.isnumeric() |
当str所有字符都是数字时,返回Ture,否则返回False |
str.isspace() |
当str所有字符都是空格,返回Ture,否则返回Flase |
str.endswith(suffix[,start[,end]]) |
str[start:end]以suffix结尾返回Ture,否则返回Flase |
str.srartswith(prefix[,start[,end]]) |
str[start:end]以prefix开始返回Ture,否则返回Flase |
str.split(sep=None,maxsplit=-1) |
返回一个列表,由str根据sep被分割的部分构成 |
str.count(sub[,start[,end]] |
返回str[start:end]中sub子串出现的次数 |
str.replace(old,new[,count]) |
返回字符串str的副本,所有old子串被替换为new,如果count给出,则前count次old出现被替换 |
str.center(width[,fillchar]) |
字符串居中函数 |
str.strip([chars]) |
返回字符串str的副本,在其左侧和右侧去掉chars中列出的字符 |
str.zfill(width) |
返回字符串str副本,长度为width。不足部分在其左侧添加0 |
str.format() |
返回字符串str的一种排版格式 |
str.join(iterable) |
返回一个新字符串,由组合数据类型iterable变量的每个元素组成,元素间用str分隔 |
四、序列-元组、字符串、列表
序列共性
- 切片
- 序号
in判断符2 in [1,2,3]2 not in [1,2,3]len()max(list)min(list)


可变类型
list需要动态改变,就用列表dictset
不可变类型
strtuple定义之后不可变,安全性较高int
字符串基本操作
// +号运算 |
// 赋值操作 |
如果只有一个元素,应该这样表示元组
(1,),一个元素都没有的元组type( () )

五、运算符

列表元组都可以比较
(1,2,3) > (1,1,1) // 两两比较第一个、第二个...数字 |
字典的成员运算符
// 只针对key |
身份运算符
is两个取值相等才会返回True'1' is '1' // Trueis not不等
// 关系运算符比较的是两个值是否相等 如 |
对象的三个特征
id(身份) =>is判断value=>==判断type=>isinstance判断
位运算符
把数字当二进制进行运算。把非二进制转化为二进制才计算
&按位与|按位或^按位异或~按位取反<<左移动>>右移动
六、循环、条件、枚举
if elsewhilefor in
range
// 等同于 |
七、枚举
''' |
八、闭包、模块、函数、变量作用域
模块

// 在文件中写`__init__.py` 只是标注这是一个包 可以什么都不用写 |
导入模块重新命名
import test as t |
函数
函数内部没有
return返回的结果就是None
// 函数可以返回多个值 |
闭包
''' |
匿名函数 lambda
''' |
map函数
''' |
reduce函数
''' |
filter函数
''' |
九、装饰器
''' |
十、面向对象

''' |
''' |
十一、正则表达式
是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列相匹配
库re
//替换非数字的 |
// findall 可以加上第三个参数模式re.I忽略大小写 |
re.match没有找到匹配的,将会返回Nonere.search直到搜索到re.sub替换re.findall推荐 返回一个列表
十二、内建函数
https://docs.python.org/3/library/functions.html

十三、标准库
常用模块
- 文字处理 re
- 日期类型 time、datetime
- 随机数、数学类型 math、random
- 文件和目录访问 pathlib os.path
- 数据压缩 tarfile
- 通用操作系统 os、logging、argparse
- 多线程 threading、queue
- 网络数据处理 base64 json urllib
- 结构化标记处理工具 html xml
- 调试工具 timeit
- 软件包发布 venv
- 运行服务的 main
十四、异常处理

try-except语句
try: |
try-except语句可以支持多个except语句
try: |
十五、JSON操作
json库主要包括两类函数,操作类函数和解析类函数- 操作类函数主要完成外部
JSON格式和程序内部数据类型之间的转换功能
解析类函数主要用于解析键值对内容 json格式包括对象和数组- 对象用大括号(
{})表示,对应键值对的组合关系(被json库解析为字典) - 数组用中括号(
{})表示,对应键值对的对等关系(被json库解析为列表)
json库解析
json库包含编码(encoding)和解码(decoding)两个过程
编码将Python数据类型变换成JSON格式- 解码是从
JSON格式中解析数据对应到Python数据类型的过程json库的操作类函数
| 函数 | 描述 |
|---|---|
json.dumps(obj,sort_keys=Flase,indent=None) |
将Python的数据类型转换为JSON格式,编码过程 |
json.loads(string) |
将JSON格式字符串转换为Python的数据类型,解码过程 |
json.dump(obj,fp,sort_keys=Flase,indent=None) |
与dumps()功能一致,输出到文件fp |
json.load(fp) |
与loads()功能一致,从文件fp读入 |
json.dumps()中的obj可以是Python的列表或字典类型,当输入字典类型时,dumps()函数将其变为JSON格式字符串- 默认生成的字符串是顺序存放的,
sort_keys可以对字典元素按照key进行排序控制输出结果 indent参数用于增加数据缩进,使得生成的JSON格式字符串更具可读性
import json |
json数据类型和python对比
| JSON | python |
|---|---|
object |
dict |
array |
list |
string |
str |
number |
int |
number |
float |
true |
True |
false |
False |
null |
None |
十六、爬虫

''' |
十七、常用库
datetime库
datetime库可以从系统中获得时间,并以用户选择的格式输出
datetime库以格林威治时间为基础,每天由3600*24秒精准定义datetime库以类的方式提供多种日期和时间
datetime.date:日期表示类,坑人表示年、月、日等。datetime.time:时间表示类,可表示小时、分钟、秒、毫秒等。datetime.datetime:日期和时间表示类,功能覆盖date和time类。datetime.timedelta:与时间间隔有关的类。datetime.tzinfo:与时区有关的信息表示类。
datetime库解析
datetime.now():返回一个datetime类型,表示当前日期和时间,精确到毫秒
>>>from datetime import datetime |
datetime.utcnow():返回一个datetime类型,表示当前日期和时间的UTC(世界标准时间)表示,精确到毫秒
>>>from datetime import datetime |
- 直接使用
datetime()构造一个日期和时间对象:
datetime(Y,M,D,hour=0,minute=0,second=0,microsecond=0)
>>>some=datetime(2018,5,13,17,0,0,0) |
datetime类的常用属性
| 属性 | 描述 |
|---|---|
some.min |
固定返回datetime的最小时间对象,datetime(1,1,1,0,0) |
some.max |
固定返回datetime的最大时间对象,datetime(9999,12,31,23,59,59,999999) |
some.year |
返回some包含的年份 |
some.month |
返回some包含的月份 |
some.day |
返回some包含的日期 |
some.hour |
返回some包含的小时 |
some.minute |
返回some包含的分钟 |
some.second |
返回some包含的秒钟 |
some.microsecond |
返回some包含的毫秒 |
datetime类的常用时间格式化方法
|属性| 描述|
|some.isofomat() |采用ISO8601标准显示时间|
|some.isoweekday() |根据日期计算星期|
|some.strftime() |根据格式化字符串format进行格式显示的方法|
strftime()方法用于输出特定格式时间
| 格式化字符串 | 对象 | 取值范围 |
|---|---|---|
%Y |
年 | 0001~9999 |
%m |
月 | 1~12 |
%B |
月名 | January~December |
%b |
月名缩写 | Jan~Dec |
%d |
日期 | 01~31 |
%A |
星期 | Monday~Sunday |
%a |
星期缩写 | Mon~Sum |
%H |
小时(24h制) |
00~23 |
%I |
小时(12h制) |
01~12 |
%p |
上、下午 | AM/PM |
%M |
分钟 | 00~59 |
%S |
秒 | 00~59 |
>>>some=datetime(2018,5,13,17,0,0,0) |
random库
random库采用梅森旋转算法生成伪随机数序列,可用于除随机性要求更高的加解密算法外的大多数工程应用
Python内置的random库主要用于产生各种分布的伪随机数序列random库提供9个常用函数
| 函数 | 描述 |
|---|---|
seed(a=None) |
初始化随机数种子,默认值为当前系统时间 |
random() |
生成一个[0.0,1.0]之间的随机小数 |
randint(a,b) |
生成一个[a,b]之间的整数 |
getrandbits(k) |
生成一个k比特长度的随机整数 |
randrange(start,stop[,step]) |
生成一个[start,stop]之间以step为步数的随机整数 |
uniform(a,b) |
生成一个[a,b]之间的随机小数 |
choice(seq) |
从序列类型,例如列表中随机返回一个元素 |
shuffle(seq) |
将序列类型中的元素随机排列,返回打乱后的序列 |
sample(pok,k) |
从pop类型中随机选取k个元素,以列表类型返回 |
生成随机数之前可通过
seed()函数指定随机数种子,随机数种子一般是一个整数,只要种子相同,每次生成的随机数序列也相同
十八、技巧
查看命令信息
// 例如 |
列表中取出符合条件的元素
// 取出大于5的元素 |
列表推导式
代替for和if嵌套循环。最常用的方式
// for循环列子 |
// 等价于上面写法 |
字典推导式
// 一般写法 |
文件读取
# f = open('test.txt',encoding='utf-8') |
函数作用域
def test(): |
装饰器
本质是返回一个闭包
def log(func): |
交换两个变量
x = 10 |
十九、Python知识体系
