Python基础
Python基础
介绍¶
Python是一门解释型、面向对象的高级编程语言。编程语言按程序执行方式大致分为以下两种:
- 解释型:使用特定的解释器对源码逐行解释成特定平台的机器码,然后机器会立即对机器码进行执行(解释一行,执行一行,无中间文件产生,运行速度较慢)。
- 编译型:使用特定的编译器对源码一次性编译成特定平台的机器码文件,然后由机器统一对机器码文件进行解释执行(编译一次,可多次执行,有中间文件产生,运行速度较快)。
编程语言按软件开发思想大致分为以下两种:
- 面向过程:将解决问题的步骤分析出来,用函数把步骤一步一步实现,然后再依次调用(注重功能的实现流程)。
- 面向对象:将解决的问题分解为若干对象,建立对象的行为属性,通过对象在问题中的行为描述来分别处理问题(注重描述行为的对象)。
发展史¶
Python于1989年圣诞节晚上,由“龟叔”Guido van Rossum在荷兰的数学和计算机科学研究所设计而来。
- 1991年2月第一个Python编译器诞生,由C语言实现。
- 1994年1月发布Python1.0版本。
- 2000年10月发布Python2.0版本。
- 2008年12月发布Python3.0版本。
- 2020年1月发布停止Python2.x版本的更新。
目前最新稳定版本是Python3.11.0,但是我们并不推荐直接使用最新版本,因为可能会存在兼容性和一些小问题。这里推荐小伙伴们使用Python3.8版本。
优缺点¶
每门语言都会有优点和缺点,Python也不例外。
优点¶
- 易入门:较大多数高级语言,Python简洁的语法和结构,可以让初学者快速入门并掌握,同时也是许多高校作为入门编程语言的首选。
- 免费开源:免费开源意味着所有人都可以学习和使用,这使得Python拥有一个强大的社区来维护,标准库和第三方库十分丰富。
- 移植性好:Python基于开源的特性,已被众多平台收录,使用对应平台的解释器就可以在不同平台进行移植。
- 扩展性好:Python也被称为“胶水语言”,原因之一是它有许多第三方库,可以让Python与许多其他编程语言的程序混合使用。
缺点¶
- 运行速度慢:解释型语言的通病。
- 源码不能加密:发布的Python程序,实则也是发布源码,不同于编译型语言,只需要发布编译好的机器码文件即可,别人是很难反编译为源码的,但是现在也是有相关对策的,有兴趣的小伙伴可以自行了解。
- 国内门槛高:随着近几年的发展,Python在越来越多的领域中被使用,这使得Python在国内编程语言热度排行榜已经多年位居第一,但在大多数领域对学历和能力要求高,大部分公司只招收研究生Python工程师,只有小部分公司招收后端Python工程师。
- 多并发限制:Python存在一个GIL(Global Interpreter Lock)全局解解释器锁,当解释器执行字节码时,需要申请GIL,这将导致只能有一个被线程执行,因此,Python的多线程并不是真正意义上的多线程,而是一个单线程。
使用领域¶
Python的使用领域很广,主要包含但不限于以下领域:
- 云计算。
- Web开发。
- 人工智能和深度学习。
- 系统运维。
- 数据分析。
- 网络爬虫。
- 游戏图形GUI。
解释器¶
Python解释器作用:运行文件
Python解释器种类 :
- CPython,C语言开发的解释器[官方],应用广泛的解释器。
- IPython,基于CPython的⼀种交互式解释器。
- PyPy,基于Python语言开发的解释器。
- Jython,运行在Java平台的解释器,直接把Python代码编译成Java字节码执行。
- IronPython,运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
Windows平台¶
Python官网Windows安装包下载地址。
下载¶
说明:左侧 Stable Releases 一列为稳定版本,右侧 Pre-releases 一列为尝鲜版本。
在浏览器中按下 [Ctrl] + [F] 搜索Python3.8.6(注意区分版本后是否带有rcl
,我们选择不带rcl
的版本)。
找到对应的版本后,会看到有7条下载地址(后续的版本中仅有5条)供我们选择。
-
help file
:该版本的帮助文档,一般安装程序中会自带帮助文档,无需我们下载。 -
x86-64 XXX
和x86 XXX
:64位和32位的安装程序,根据个人电脑操作系统的配置信息进行对应选择即可(查看方法:左下角Win标 -> 设置 -> 系统 -> 关于 -> 系统类型) -
embeddable zip file
:绿色便携版zip压缩包,解压即安装,包含Python解释器,但不包含pip(包管理工具),后续的版本中统一命名为embeddable package (xx-bit)
,不推荐。 -
executable installer
:离线安装包可执行文件,包含了帮助文档和pip,一键式操作,适合所有人群安装,后续的版本中统一命名为installer (xx-bit)
。 -
web-based installer
:在线安装程序可执行文件,运行程序后自动开始下载安装文件,需要两次下载,后续的版本中已经不再使用该方法安装,不推荐。
对于ARM架构的操作系统,请选择支持ARM的版本。
这里我们选择Windows x86-64 executable installer进行下载。
安装¶
- 双击可执行文件,运行安装包。
- 勾选环境变量,我们推荐选择默认安装。
- 等待安装。
- 安装完成,关闭程序。
- 环境测试。
快捷键 [Win] + [R] 打开运行,输入cmd
回车,在命令提示符窗口输入python --version
,出现安装版本即安装成功。
问题¶
- 环境测试时,没有出现版本号或者提示不是命令、程序、文件。
原因:在安装时没有勾选Add Python 3.8 to PATH
,添加到环境变量。
关于:环境变量类似于一个软连接、快捷方式,可以在其他路径下使用。有用户变量和系统变量两类,用户变量只能在该用户下才能使用,系统变量可以在所有用户下使用。
解决:Win开始 -> 设置 -> 系统 -> 关于 -> 高级系统设置 -> 环境变量 -> 用户变量里找到Path
双击 -> 新建以下两个路径 -> 添加好后将这两个路径通过上移置顶 -> 最后一路点击确定
C:\Users\xxx\AppData\Local\Programs\Python\Python38\Scripts\ |
C:\Users\xxx\AppData\Local\Programs\Python\Python38\ |
卸载¶
Win开始 -> Windows系统 -> 控制面板 -> 程序 -> 程序和功能 -> 找到Python -> 双击卸载/右键卸载
MacOS平台¶
Python官网MacOS安装包下载地址。
下载¶
说明:左侧 Stable Releases 一列为稳定版本,右侧 Pre-releases 一列为尝鲜版本。
在浏览器中按下 [Command] + [F] 搜索Python3.8.6(注意区分版本后是否带有rcl
,我们选择不带rcl
的版本)。
这里我们选择macOS 64-bit installer进行下载。
另外,安装了Homebrew的小伙伴可以直接通过终端命令进行下载安装。
# 查询python版本 |
安装¶
根据提示一直点击继续即可。
卸载¶
# 卸载Python |
Linux平台¶
Python官网Linux安装包下载地址。
下载¶
说明:左侧 Stable Releases 一列为稳定版本,右侧 Pre-releases 一列为尝鲜版本。
在浏览器中按下 [Ctrl] + [F] 搜索Python3.8.6(注意区分版本后是否带有rcl
,我们选择不带rcl
的版本)。
-
Gzipped source tarball
:tgz压缩包程序。 -
XZ compressed source tarball
:tar.xz压缩包程序。
任选择一种下载即可,这里我们选择Gzipped source tarball进行下载。
也可以使用wget
工具进行下载,可自行更改版本号
wget https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tgz |
安装¶
- 安装相关依赖
yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel |
- 进入安装包所在目录,我的放在
/opt/
目录下了。
cd /opt/ |
- 解压安装包,解压后会多一个Python-3.8.6文件夹。
tar -xvf Python-3.8.6.tgz |
- 进入Python-3.8.6文件夹。
cd Python-3.8.6 |
- 配置及编译安装。
# prefix参数用于指定安装路径,默认路径是/usr/local/ |
- 配置环境变量
# 编辑文件 |
如果嫌以上方式麻烦,可以直接使用以下命令一键安装
# Ubuntu |
- 环境测试
# 查看Python版本 |
问题¶
- 编译安装过程中,报错
can't decompress data; zlib not available
。
原因:缺少zlib
依赖包。
关于:zlib
是一类解压缩库。
解决:通过软件包工具进行下载安装,再次编译安装即可。
Ubuntu安装如下:
sudo apt install zlib* |
CentOS安装如下:
yum -y install zlib* |
卸载¶
该方法会将Python环境彻底移除,可能会导致其他功能无法使用,请谨慎使用。
# Ubuntu |
pip换源¶
pip是Python的包管理工具,用于安装和管理Python包。
临时换源¶
pip3 install 安装包==版本 -i 换源地址 |
永久换源¶
# 升级到最新pip |
常用的国内PyPi源有:
- 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
- 阿里云:https://mirrors.aliyun.com/pypi/simple
- 豆瓣:https://pypi.douban.com/simple
- 中国科大 https://pypi.mirrors.ustc.edu.cn/simple/
永久换源后,就可以直接安装依赖,不需要使用
-i
参数指定安装源啦。
创建虚拟环境¶
通过pycharm创建需要注意的是,可能会因为依赖源下载慢导致报错,提前换源即可。
- 创建并激活虚拟环境
python3 -m venv ./venv && source ./venv/bin/activate |
- 退出虚拟环境
deactivate |
或使用mkvirtualenv
创建
# 安装virtualenv |
成功激活虚拟环境后,会在终端行首展示
(venv)
。后续操作将在虚拟环境中进行。
依赖管理¶
requirements.txt 可以帮助我们将项目的所有依赖进行导出,在移植到其他环境时可以快速安装依赖。
导出依赖¶
会将当前环境的所有依赖打包到 requirements.txt 文件。
pip3 freeze > requirements.txt |
安装依赖¶
会将requirements.txt文件的所有依赖都安装到此工作环境。
pip3 install -r requirements.txt |
基础语法¶
注释¶
作用:对所写的代码进行标注说明(解释代码),提高代码的可读性。
- 编码及解释器
# -*- coding: utf-8 -*- |
- 单行注释
# 注释内容 |
- 多行注释
""" |
标识符¶
标识符是编程中用于标识变量、函数、类、模块或其他实体的名称。Python中自定义的名字都需要满足标识符命名规则。
标识符命名规则:
- 由数字、字母、下划线组成。
- 不能由数字开头。
- 不能使用内置关键字。
- 区分大小写。
命名习惯:
- 见名知义。
- 大驼峰:每个单词首字母都大写。
- 小驼峰:除第一个单词,后面的单词首字母都大写。
- 下划线:使用下划线连接单词。
关键字¶
Python中已经使用的单词,具备自己的作用。
import keyword |
进制¶
- 二进制:由0和1组成,代码中以
0b
开头。 - 十进制:由0-9组成,代码默认进制。
- 八进制:由0-7组成,代码中以
0o
开头。 - 十六进制:由0-9和a-f组成,代码中以
0x
开头。
代码块¶
Python最具特色的就是使用 缩进 来表示代码块,不需要使用大括号 {}
。同一个代码块的代码,应有相同的缩进单位。缩进混乱会导致程序出错,这是小白最容易出现问题的地方。
多行语句¶
通常情况下一行就包含一条语句,但有的时候语句会很长,需要使用\
来换行。
result = number1 + \ |
命名空间¶
Python中,变量、函数、类等实体,都存储在命名空间中。
一般有三种命名空间:
- 内置名称(built-in names),Python语言内置的名称,比如函数名abs、char和异常名称 BaseException、Exception 等等。
- 全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
- 局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)
命名空间搜索规则:
- 局部名称 -> 全局名称 -> 内置名称
命名空间的生命周期:
- 创建:模块第一次导入时,创建全局名称;调用函数时,创建局部名称。
- 销毁:模块卸载时,销毁全局名称;函数调用结束,销毁局部名称。
作用域¶
作用域指的是变量生效的范围。
四种作用域:
- L(Local):最内层,包含局部变量,比如一个函数/方法内部。
- E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
- G(Global):当前脚本的最外层,比如当前模块的全局变量。
- B(Built-in): 包含了内建的变量/关键字等,最后被搜索。
全局变量和局部变量¶
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
global 和 nonlocal关键字¶
global关键字:
- 声明全局变量,让变量变成全局变量。
- 局部变量可以覆盖全局变量。
nonlocal关键字:
- 声明嵌套作用域的变量,让变量变成嵌套作用域的变量。
- 局部变量可以覆盖嵌套作用域的变量。
作用域链¶
嵌套作用域中,内部作用域可以访问外部作用域,反之则不行。
Python是一种动态类型的编程语言,支持多种内置数据类型,这些数据类型用于存储和操作不同种类的数据。
数值类型(number)¶
Python的数据类型根据其特性可分为序列类型和散列类型。
int、float、bool、complex都是数值类型。
- 不可变
- 不可迭代
简单用法¶
# int 整型 |
数学方法¶
math
标准库:
方法 | 说明 |
---|---|
ceil(x) | 向上取整 |
floor(x) | 向下取整 |
fabs(x) | 返回绝对值 |
factorial(x) | 返回 x 的阶乘 |
fmod(x, y) | 返回 x % y 的浮点数 |
sqrt(x) | 返回 x 的平方根的浮点数 |
pow(x, y) | 返回 x 的 y 次方的浮点数 |
exp(x) | 返回 e^x 的浮点数 |
log(x, base) | 返回 base^x 的浮点数 |
log10(x) | 返回 10^x 的浮点数 |
log2(x) | 返回 2^x 的浮点数 |
sin(x) | 返回 x 的正弦值 |
cos(x) | 返回 x 的余弦值 |
tan(x) | 返回 x 的正切值 |
asin(x)、acos(x)、atan(x) | 返回反正弦、反余弦、反余切 |
degrees(x) | 返回弧度转为角度 |
radians(x) | 返回角度转为弧度 |
pi | 返回圆周率 Π |
e | 返回自然对数 |
字符串类型(str)¶
- 不可变
- 可迭代
简单用法¶
# 字符串引号的内容可以是任意字符 |
常用方法¶
# 子串查找,返回索引,否则返回-1 |
格式化¶
name = "Python小白" |
- 格式化符号
符 号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %F和%E的简写 |
%p | 用十六进制数格式化变量的地址 |
- 格式化操作符辅助指令
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’) |
0 | 显示的数字前面填充’0’而不是默认的空格 |
% | ‘%%‘输出一个单一的’%’ |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
转义字符¶
转义字符 | 描述 |
---|---|
(在行尾时) | 续行符 |
|反斜杠符号 | |
’ | 单引号 |
" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。 |
\xyy | 十六进制数,以 \x 开头,yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
使用案例:
# \n换行转义字符 |
列表(list)¶
- 可变
- 可迭代
简单用法¶
# 列表里面的每一项可以是任意的数据类型 |
常用方法¶
# 获取列表长度 |
元组(tuple)¶
元组是不可变的列表,因此列表的一部分特性也适用。
- 不可变
- 可迭代
简单用法¶
tuple_example = (0, 1, 2, "零", "壹", "贰") |
常用方法¶
# 查找元素,返回索引,否则报错 |
由于元组的不可变,因此没有修改和删除的方法。
列表/元组推导式¶
作用:使用一句表达式,创建有规律的某种集合。
# 无条件生成,0-9 |
序列语法糖¶
序列类型具有相同的性质,如有序,有索引。其他类型统称散列类型。
索引¶
# 通过索引下标获取第一个字符 |
索引是从0开始,倒数使用负号获取。
切片¶
# 通过切片获取某部分字符,[索引起始值:索引结束值:步长] |
拆包¶
# 将一个序列的元素拆分为多个数据,*代表不定长,接收剩下的所有元素 |
公共方法¶
函数 | 描述 |
---|---|
len() | 计算容器中元素个数 |
del 或 del() | 删除 |
max() | 返回容器中元素最大值 |
min() | 返回容器中元素最小值 |
range(start, end, step) | ⽣成从start到end的数字,步⻓为 step,供for循环使用 |
enumerate() | 函数用于将⼀个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和索引,⼀般用在 for 循环当中。 |
字典(dict)¶
- 可变
- 可迭代
简单用法¶
# 与新华字典一样,具备一对关键字和值(键值对,key:value) |
常用方法¶
# 获取属性 |
字典推导式¶
# 生成10以内的平方 |
集合(set)¶
- 不可变
- 可迭代
简单用法¶
# 与数学中的集合一样,自带去重效果,空集合使用 set()创建 |
常用方法¶
# 添加单个元素 |
集合推导式¶
# 生成10以内的集合 |
类型转换¶
作用:将一种数据类型转换为另外一种数据类型。
函数 | 描述 |
---|---|
int(x [,base]) | 将x转换为一个整数 |
long(x [,base]) | 将x转换为一个长整数 |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象x转换为字符串 |
repr(x) | 将对象x转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列s转换为一个元组 |
list(s) | 将序列s转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d必须是一个序列 (key,value)元组。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
unichr(x) | 将一个整数转换为Unicode字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x)、0x |
将一个整数转换为一个十六进制字符串 |
oct(x)、0o |
将一个整数转换为一个八进制字符串 |
bin(x)、0b |
将一个整数转换为一个二进制字符串 |
常用运算符¶
算术运算符¶
运算符 | 描述 |
---|---|
+ | 加 - 两个对象相加或拼接两个序列对象 |
- | 减 - 得到负数或是一个数减去另一个数 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的序列元素 |
/ | 除 - x 除以 y |
% | 取模 - 返回除法的余数 |
** | 幂 - 返回x的y次幂 |
// | 取整除 - 往小的方向取整数 |
比较运算符¶
运算符 | 描述 |
---|---|
== | 等于 - 比较对象是否相等 |
!= | 不等于 - 比较两个对象是否不相等 |
> | 大于 - 返回x是否大于y |
< | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 |
>= | 大于等于 - 返回x是否大于等于y。 |
<= | 小于等于 - 返回x是否小于等于y。 |
复合运算符¶
运算符 | 描述 |
---|---|
= | 简单的赋值运算符 |
+= | 加法赋值运算符 |
-= | 减法赋值运算符 |
*= | 乘法赋值运算符 |
/= | 除法赋值运算符 |
%= | 取模赋值运算符 |
**= | 幂赋值运算符 |
//= | 取整除赋值运算符 |
:= | 海象运算符,可在表达式内部为变量赋值。Python3.8 版本新增运算符。 |
位运算符¶
运算符 | 描述 |
---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 |
>> | 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 |
逻辑运算符¶
运算符 | 逻辑表达式 | 描述 |
---|---|---|
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。 |
or | x or y | 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 |
and运算符,只要有一个值为0,则结果为0,否则结果为最后⼀一个⾮非0数字。
or运算符,只有所有值为0结果才为0,否则结果为第⼀个⾮非0数字。
not运算符,即取反运算符。
成员运算符¶
运算符 | 描述 |
---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 |
条件语句¶
if语句¶
作用:如果if语句的条件成立则执行缩进内的代码。
if 条件: |
使用案例:
# 修改True => False使条件不成立 |
else语句¶
作用:与if语句配合使用,如果条件不成立时执行缩进内的代码。
if 条件: |
使用案例:
age = 20 |
elif语句¶
作用:用于多重条件判断,else if的缩写,即if语句的条件不成立,并且本语句条件成立时执行缩进内的代码。
if 条件1: |
else需要在语句的最后使用。
使用案例:
level = int(input("请输入您的等级:")) |
三目运算符¶
作用:简化if-else语句。
条件成立执行的代码 if 条件 else 条件不成立执行的代码 |
该运算结果可以用于赋值。
循环语句¶
while循环¶
作用:在条件成立时,循环执行缩进内的代码。
while 条件: |
使用案例:
# 输出100遍 |
for循环¶
作用:循环遍历序列。
for 临时变量 in 序列: |
使用案例:
# 输出10以内的奇数 |
continue:结束本次循环,开始下次循环。
break:强行跳出循环,else语句不会执行。
函数¶
作用:将一段有独立功能的代码块整合到一起并命名(封装),在需要的位置进行调用这个名称即可实现该部分的功能,从而实现代码的复用。
简单使用¶
该区域的变量为全局变量 |
形参与实参统称为参数,用于函数接收数据,在实际开发过程中根据需要给出,其中形参可以是
*args
(元组不定长)、**kwargs
(字典不定长),用于接收不确定长度的实参。返回值用于将一个结果返回给调用者,以获取某个数据,在实际开发过程中根据需要给出。
使用案例:
# 求平方和 |
闭包¶
作用:将一个函数作为返回值的函数,可以用于创建回调函数及二次封装。
def 外层函数(形参): |
lambda表达式¶
作用:简化版函数。
lambda 参数: 表达式 |
lambda表达式只能返回一个表达式的值,且参数可有可无。
使用案例
func = lambda a: a**2 |
递归¶
一种函数的使用技巧,通过调用自身并在达到某一临界值后进行累积返回值。
def my_sum(num): |
内置函数¶
是Python中自带的一些函数,可以全局直接调用。
更多内置函数参考Python3 内置函数。
map、reduce、filter函数¶
-
map(function, iterable, ...)
:将序列的每一个元素应用一个函数,并返回一个迭代器对象。
nums = [1, 2, 3, 4] |
-
reduce(function, iterable)
:将序列的每一个元素通过function(x, y)逐一操作归纳为一个值。
from functools import reduce |
-
filter(function, iterable)
:将序列的每一个元素通过函数返回值的True和False,过滤为一个过滤器对象。
nums = [1, 2, 3, 4] |
enumerate函数¶
enumerate(sequence, [start=0])
可以将可迭代对象组合为一个索引字典,即索引:值。
fruits = ['apple', 'banana', 'cherry'] |
sorted排序¶
sorted(iterable, key=None, reverse=False)
可以将序列按照一定的规则进行排序,并返回一个新的序列。
nums = [2, 3, 5, 1, 8, 6] |
zip打包¶
zip([iterable, ...])
可以将多个可迭代对象中相同索引的元素打包为一个个的元组/字典,并返回一个zip对象,可使用*
对zip对象进行解压为多个可迭代对象。
a = [1, 2, 3] |
注意:zip对象是特殊的生成器,因此只能使用一次数据。
ord、chr函数¶
ord(char)
函数将一个字符返回其对应的 ASCII 数值,或者 Unicode 数值。
chr(int)
函数将一个整数返回其对应的字符。
# 97 |
Counter计数器¶
用于追踪值的出现次数,Counter类继承dict类,可以使用其方法。
- 对iterable进行计数
import collections |
- 追加内容
counter.update(['c', 'b', 'c', 'd']) |
- 返回最高频率前n的数据
counter.most_common(n) |
defaultdict默认字典¶
Python的字典中,访问不存在的key会报错,一般需要初始化。defaultdict可以传入value的类型完成初始化。
- 自动初始化
import collections |
- 继承类型方法
dict_list = collections.defaultdict(list) |
groupby函数¶
groupby(iterable, key=None)
可以将相邻相同元素进行聚合,配合sorted可以完成根据key的相同值进行分组。
from itertools import groupby |