Python入门笔记

Python入门笔记

Now is better than never.
Although never is often better than right now.

—————The Zen of Python, by Tim Peters

1 前言

python与C++的对比

  1. 编译

    C++ 是一种编译语言。C++ 编译器从 C++ 源代码生成目标代码,然后执行以生成输出。

Python 是一种解释型语言。扩展名为 py 的 Python 代码不需要编译。我们可以直接将其传递给 Python 解释器并生成输出。

  1. 语言本质

    C++ 是一种静态类型语言,即在编译时验证变量的声明、变量的数据类型等。这使源代码在运行时不会出错。

    另一方面,Python 不是静态类型的。在编译时没有进行类型检查。因此,代码更容易出错。

  2. 执行速度

    就执行速度而言,C++ 程序运行得更快。事实上,C++ 广为人知并广泛用于需要运行更快的应用程序,如游戏平台。C++特别适合写渲染器之类的计算密集型程序。

    另一方面,Python 运行缓慢。Python 程序运行速度比 Java 程序慢。

2 安装python

学习python的第一步是安装python的解释器,直接去官网下载就好

注意:python2.x版本与3.x版本有诸多不兼容的地方。直接学习3.x版本的特性就好。

之后需要选择一个ide/编辑器作为开发工具,我使用的是pycharm

2 Python起步

2.1 Python语法

2.1.1 缩进

在C++语言中,代码不同层次的分隔通常由大括号等来控制。例如

for (int i=1;i<=100;i++)
{
	sum+=i;
	sum2+=i*i;
}

上述代码等价于

 for (int i=1;i<=100;i++){    sum+=i;    sum2+=i*i;}

然而,在python中,函数定义、类的定义、控制语句的分层都是由缩进来进行分块的。一般行尾的":"表示下一行缩进的开始。例如

if a>b:
	if a==1:
		print(a)
	else:
		if a==0:
			print(a)
		else:
			pass
elif a==b:
	print(a,b)
else:
	print(b)

以上代码中的tab不能随意删改

注意:同一级的代码的缩进量和缩进所使用的符号(tab/space)都需要保持一致。

2.1.2 注释

# 单行注释用#号
'''
多行注释用单引号或者双引号包起来
'''

2.1.3 断行

python一般不需要分号来分割语句,但是假如需要将两条语句写在同一行,那便需要分号隔开

print('+'); print('-')

假如缩进块中只有一条语句,那么可以直接写在':'之后,类似于C++省略{}的做法

if a>0:print('+')
else:print('-')

假如语句一行写不下,可以用\将剩余部分写在下一行

print('i love',\
'you')

事实上,圆括号包围的部分本身就可以写在不同行

注意:\后面不能放任何注释或者其他内容

2.2 输入/输出

2.2.1 键盘输入/输出

python的输入一般用到input()函数,基本格式如

input([prompt])

其中参数可选,可用可不用,例如

name=input('Please input your name')

注意:用户输入的数据全部会以字符串形式返回,如果需要数值则应进行类型转换

Python的输出一般用到print()函数,基本格式如

print(value1,value2,...,sep=' ',end='\n')
  • value1,value2...表示print函数可以输出多个参数
  • sep是多个参数之间的分隔符,默认为一个空格
  • end是输出完所有信息之后添加的符号,默认为换行符

2.3 计算

2.3.1 算式与代数式计算

python在交互式命令环境下可以直接计算表达式的值,还可以预定义变量并计算代数式的值

>>>x=3
>>>2*x**2-x+4
19

另外,python标准库中提供的math模块提供许多的内置常量与函数

常量 描述
math.e 返回欧拉数 (2.7182...)
math.inf 返回正无穷大浮点数
math.nan 返回一个浮点值 NaN (not a number)
math.pi π 一般指圆周率。 圆周率 PI (3.1415...)
math.tau 数学常数 τ = 6.283185...,精确到可用精度。Tau 是一个圆周常数,等于 2π,圆的周长与半径之比。
函数 描述
math.acos(x) 返回 x 的反余弦,结果范围在 0 到 pi 之间。
math.acosh(x) 返回 x 的反双曲余弦值。
math.asin(x) 返回 x 的反正弦值,结果范围在 -pi/2 到 pi/2 之间。
math.asinh(x) 返回 x 的反双曲正弦值。
math.atan(x) 返回 x 的反正切值,结果范围在 -pi/2 到 pi/2 之间。
math.atan2(y, x) 返回给定的 X 及 Y 坐标值的反正切值,结果是在 -pi 和 pi 之间。
math.atanh(x) 返回 x 的反双曲正切值。
math.ceil(x) 将 x 向上舍入到最接近的整数
math.comb(n, k) 返回不重复且无顺序地从 n 项中选择 k 项的方式总数。
math.copysign(x, y) 返回一个基于 x 的绝对值和 y 的符号的浮点数。
math.cos() 返回 x 弧度的余弦值。
math.cosh(x) 返回 x 的双曲余弦值。
math.degrees(x) 将角度 x 从弧度转换为度数。
math.dist(p, q) 返回 p 与 q 两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。 两个点必须具有相同的维度。
math.erf(x) 返回一个数的误差函数
math.erfc(x) 返回 x 处的互补误差函数
math.exp(x) 返回 e 的 x 次幂,Ex, 其中 e = 2.718281... 是自然对数的基数。
math.expm1() 返回 Ex - 1, e 的 x 次幂,Ex,其中 e = 2.718281... 是自然对数的基数。这通常比 math.e ** x 或 pow(math.e, x) 更精确。
math.fabs(x) 返回 x 的绝对值。
math.factorial(x) 返回 x 的阶乘。 如果 x 不是整数或为负数时则将引发 ValueError。
math.floor() 将数字向下舍入到最接近的整数
math.fmod(x, y) 返回 x/y 的余数
math.frexp(x) 以 (m, e) 对的形式返回 x 的尾数和指数。 m 是一个浮点数, e 是一个整数,正好是 x == m * 2**e 。 如果 x 为零,则返回 (0.0, 0) ,否则返回 0.5 <= abs(m) < 1 。
math.fsum(iterable) 返回可迭代对象 (元组, 数组, 列表, 等)中的元素总和,是浮点值。
math.gamma(x) 返回 x 处的伽马函数值。
math.gcd() 返回给定的整数参数的最大公约数。
math.hypot() 返回欧几里得范数,sqrt(sum(x**2 for x in coordinates))。 这是从原点到坐标给定点的向量长度。
math.isclose(a,b) 检查两个值是否彼此接近,若 a 和 b 的值比较接近则返回 True,否则返回 False。。
math.isfinite(x) 判断 x 是否有限,如果 x 既不是无穷大也不是 NaN,则返回 True ,否则返回 False 。
math.isinf(x) 判断 x 是否是无穷大,如果 x 是正或负无穷大,则返回 True ,否则返回 False 。
math.isnan() 判断数字是否为 NaN,如果 x 是 NaN(不是数字),则返回 True ,否则返回 False 。
math.isqrt() 将平方根数向下舍入到最接近的整数
math.ldexp(x, i) 返回 x * (2**i) 。 这基本上是函数 math.frexp() 的反函数。
math.lgamma() 返回伽玛函数在 x 绝对值的自然对数。
math.log(x, base) 使用一个参数,返回 x 的自然对数(默认底为 e )。
math.log10(x) 返回 x 底为 10 的对数。
math.log1p(x) 返回 1+x 的自然对数(以 e 为底)。
math.log2(x) 返回 x 以 2 为底的对数
math.perm(n, k=None) 返回不重复且有顺序地从 n 项中选择 k 项的方式总数。
math.pow(x, y) 将返回 x 的 y 次幂。
math.prod(iterable) 计算可迭代对象中所有元素的积。
math.radians(x) 将角度 x 从度数转换为弧度。
math.remainder(x, y) 返回 IEEE 754 风格的 x 除于 y 的余数。
math.sin(x) 返回 x 弧度的正弦值。
math.sinh(x) 返回 x 的双曲正弦值。
math.sqrt(x) 返回 x 的平方根。
math.tan(x) 返回 x 弧度的正切值。
math.tanh(x) 返回 x 的双曲正切值。
math.trunc(x) 返回 x 截断整数的部分,即返回整数部分,删除小数部分

2.3.2 大整数

python内置了对大整数的支持,无需手写高精度加减乘除

3 python数据类型

3.1 简单数据类型

3.1.1 字符串(str)

python的字符串有一对单引号或者一对双引号括起来

切片:

可以通过序号取出其中某一个字符或某一段字符,截取[a:b]段字符时遵循左闭右开原则,如‘abcde’[1]取得的值为'b','abcde'[1:3]取得的值为'bc'

注意:

单引号字符串和双引号字符串本质相同,但是单引号字符串内的单引号需要转义(双引号类似),双引号字符串中的单引号则不需要(单引号字符串类似)。

另外,多行的字符串可以用三引号字符串表示

  1. 转义

​ 字符串中,在符号前加'\'表示转义

  1. 字符串运算

​ python的字符串可以进行加法和乘法运算

  1. 字符串处理函数

​ Python 的字符串常用内建函数如下:

序号 方法及描述
1 capitalize() 将字符串的第一个字符转换为大写
2 center(width, fillchar)返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
3 count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
4 bytes.decode(encoding="utf-8", errors="strict") Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
5 encode(encoding='UTF-8',errors='strict') 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
6 endswith(suffix, beg=0, end=len(string)) 检查字符串是否以 suffix 结束,如果 beg 或者 end 指定则检查指定的范围内是否以 suffix 结束,如果是,返回 True,否则返回 False。
7 expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。
8 find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
9 index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在字符串中会报一个异常。
10 isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
11 isalpha() 如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False
12 isdigit() 如果字符串只包含数字则返回 True 否则返回 False..
13 islower() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
14 isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False
15 isspace() 如果字符串中只包含空白,则返回 True,否则返回 False.
16 istitle() 如果字符串是标题化的(见 title())则返回 True,否则返回 False
17 isupper() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
18 join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
19 len(string) 返回字符串长度
20 [ljust(width, fillchar]) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
21 lower() 转换字符串中所有大写字符为小写.
22 lstrip() 截掉字符串左边的空格或指定字符。
23 maketrans() 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
24 max(str) 返回字符串 str 中最大的字母。
25 min(str) 返回字符串 str 中最小的字母。
26 [replace(old, new [, max])](https://www.runoob.com/python3/python3-string-replace.html) 把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。
27 rfind(str, beg=0,end=len(string)) 类似于 find()函数,不过是从右边开始查找.
28 rindex( str, beg=0, end=len(string)) 类似于 index(),不过是从右边开始.
29 [rjust(width,[, fillchar])](https://www.runoob.com/python3/python3-string-rjust.html) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
30 rstrip() 删除字符串末尾的空格或指定字符。
31 split(str="", num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
32 [splitlines([keepends])](https://www.runoob.com/python3/python3-string-splitlines.html) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
33 startswith(substr, beg=0,end=len(string)) 检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
34 [strip([chars])](https://www.runoob.com/python3/python3-string-strip.html) 在字符串上执行 lstrip()和 rstrip()
35 swapcase() 将字符串中大写转换为小写,小写转换为大写
36 title() 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
37 translate(table, deletechars="") 根据 table 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
38 upper() 转换字符串中的小写字母为大写
39 zfill (width) 返回长度为 width 的字符串,原字符串右对齐,前面填充0
40 isdecimal() 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。

特别地,如果在字符串中希望避免出现转义字符,可以使用原始字符串,即在字符串前以r或R作为标志

注意:原始字符串不得以'\'结尾

>>>r'abc\akdd'
'abc\\akdd'
#注意到原始字符串中的\变为\\

与C++相类似,在输出时可以使用格式化字符串功能,例如

>>>print('%d+%d=%d' %(2,3,2+3))

3.1.2 python数据类型转换

隐式类型转换

在隐式类型转换中,python会自动将一种数据类型转换为另一种数据类型。例如将整数类型变量与浮点类型变量相加,整数会自动转换为浮点数以避免数据丢失

显式类型转换

在显式类型转换中,我们需要使用int()、float()、str()等预定函数来执行类型转换

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

函数 描述
int(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) 将一个整数转换为一个字符
ord(x) 将一个字符转换为它的整数值
hex(x) 将一个整数转换为一个十六进制字符串
oct(x) 将一个整数转换为一个八进制字符串

3.2 python数据结构类型

3.2.1 列表(list)

列表是以方括号包围的数据集合,其成员可以包含任意数据类型,也可以包含另一个列表,不同成员间用逗号分隔开。

与C++的数组不同,python的列表可以包含不同类型的数据。

访问列表中的值

与字符串的索引相同,列表索引从0开始,以此类推

索引也可以从尾部开始,最后一个元素的索引为-1,往前一位为-2,以此类推

Python列表函数&方法

Python包含以下函数:

序号 函数
1 len(list) 列表元素个数
2 max(list) 返回列表元素最大值
3 min(list) 返回列表元素最小值
4 list(seq) 将元组转换为列表

Python包含以下方法:

序号 方法
1 list.append(obj) 在列表末尾添加新的对象
2 list.count(obj) 统计某个元素在列表中出现的次数
3 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4 list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
5 list.insert(index, obj) 将对象插入列表
6 list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7 list.remove(obj) 移除列表中某个值的第一个匹配项
8 list.reverse() 反向列表中元素
9 list.sort( key=None, reverse=False) 对原列表进行排序
10 list.clear() 清空列表
11 list.copy() 复制列表

3.2.2 元组(tuple)

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号 ( ),列表使用方括号 [ ]

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用:

3.2.3 字典(dict)

字典类似于C++stl库中的map,建立(key)到(value)的映射。字典中的键必须是唯一的,但是值则不必。

字典中的每个键值对用冒号分隔,每个对之间用逗号分割,整个字典包括在花括号中,格式如下

d={key1:value1,key2:value2,key3;value3}
访问字典中的值

将相应的键放入方括号中,如下

tinydict = {'Name': 'Leason', 'Age': 18, 'Class': 'Ten'}
 
print ("tinydict['Name']: ", tinydict['Name'])
print ("tinydict['Age']: ", tinydict['Age'])

以上代码输出结果为

tinydict['Name']:  Leason
tinydict['Age']:  18
修改字典

向字典中添加新内容的方法是增加新的键值对,如

tinydict['school']="Peking University"

修改内容的方法类似

删除单个元素的方法是使用del命令

del tinydict['school']

清空字典使用clear方法

删除字典使用del命令

Python字典包含了以下内置方法:

序号 函数及描述
1 dict.clear() 删除字典内所有元素
2 dict.copy() 返回一个字典的浅复制
3 dict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4 dict.get(key, default=None) 返回指定键的值,如果键不在字典中返回 default 设置的默认值
5 key in dict 如果键在字典dict里返回true,否则返回false
6 dict.items() 以列表返回一个视图对象
7 dict.keys() 返回一个视图对象
8 dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9 dict.update(dict2) 把字典dict2的键/值对更新到dict里
10 dict.values() 返回一个视图对象
11 [pop(key[,default])](https://www.runoob.com/python3/python3-att-dictionary-pop.html) 删除字典 key(键)所对应的值,返回被删除的值。
12 popitem() 返回并删除字典中的最后一对键和值。

注意

字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行,键必须不可变,所以可以用数字,字符串或元组充当。

3.2.4 集合(set)

集合(set)是一个无序的不重复元素序列。其中元素类型可以不同

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

集合的操作
  1. 添加元素
s.add(x) #将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
s.update( x ) #添加元素,且参数可以是列表,元组,字典等,x 可以有多个,用逗号分开。
  1. 移除元素
s.remove(x) #将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
s.discard(x) #移除集合中的元素,且如果元素不存在,不会发生错误
s.pop() #随机删除集合中的一个元素
  1. 计算集合的元素个数
len(s) #计算集合 s 元素个数
  1. 清空集合
s.clear() #清空集合s
  1. 判断元素是否在集合中存在
x in s #判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False

集合内置方法完整列表

方法 描述
add() 为集合添加元素
clear() 移除集合中的所有元素
copy() 拷贝一个集合
difference() 返回多个集合的差集
difference_update() 移除集合中的元素,该元素在指定的集合也存在。
discard() 删除集合中指定的元素
intersection() 返回集合的交集
intersection_update() 返回集合的交集。
isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset() 判断指定集合是否为该方法参数集合的子集。
issuperset() 判断该方法的参数集合是否为指定集合的子集
pop() 随机移除元素
remove() 移除指定元素
symmetric_difference() 返回两个集合中不重复的元素集合。
symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union() 返回两个集合的并集
update() 给集合添加元素

4 Python程序结构

4.1 分支语句

if 表达式:
	语句块A
else:  #可省略
	语句块B 
if 表达式1:
	语句块A
elif 表达式2:
	语句块B
elif 表达式3:
	语句块C
else:
	语句块D

与C++极其相似,并且可以使用elif来简写else和if

4.2 循环语句

4.2.1 while语句

while 表达式:
	语句块A
else: #通常不使用
	语句块B

当表达式为真:

​ 执行语句块A,并再次判断表达式

当表达式为假:

​ 执行语句块B,不再判断表达式

4.2.2 for 语句

for语句每次循环后可自动获取新的循环变量,并检查是否超出范围

for 循环变量 in 取值范围:
	语句块A
else: #通常不使用
	语句块B
range()函数

range()函数用于生成整数序列,其形式如下:

range(num)

返回0~num-1的整数序列,等价于range(0,num)

range(start,end)

返回start~end-1的整数序列

range(start,end,step)

step代表序列的步长,默认为1,允许为负值

注意range()函数左闭右开

5 python函数及应用

5.1 函数的定义

def <函数名>([形式参数表]):
	<执行语句>
	[return <返回值>]

注意:

  • 与C++不同,声明函数时不需要声明参数传入类型和函数返回类型

  • 对于简单的自定义函数,可以写在一行,甚至直接返回表达式

  • 可以用一个return语句返回多个值,默认为返回值为元组形式,也可以用解包形式分别接收

  • 若函数没有return语句或return后无具体数值/表达式,则返回值默认为None

5.2 函数的参数传递

5.2.1 常规参数传递

  1. 顺序方式参数传递

​ 调用函数时,按照声明时的原有位置顺序进行参数传递,这是最常用的

def func(x,y):
	return x+y

a = 1
b = 2
print(func(a,b))
  1. 赋值方式参数传递

​ 在圆括号中用“形参变量名=参数值”的赋值方式传入参数,这种方式不必按照定义函数时原有的顺序传递

def func(x,y):
	return x+y

a = 1
b = 2
print(func(y = b, x = a))
  1. 默认方式参数传递

​ 定义函数时同时定义默认参数,调用时,若没有传递同名或同位置参数,则会使用默认参数值

注意:

​ 默认参数必须放在形参表的最后,其他非默认参数可以用顺序方式或者赋值方式进行传递

def func(x, y=2):
	return x+y
a = 1
print(func(x = a))

5.2.2 变长参数传递

元组类型变长参数传递

在函数声明时,在某个参数名称前面加上一个星号,则表示该参数是一个元组类型的可变长形式参数

函数调用时需要以逗号分割多个数据的形式进行参数传递,函数接收多个实际参数并放入函数的一个元组内

def func(d, *dtup):
	print(d)
	print(dtup)
	
func(1,2,3,4)

也可以将外部的一个列表或元组的地址(*<变量名>的形式)作为函数的实际参数进行调用

字典类型变长参数传递

在声明函数时,在某个参数前面加两个星号,则表示该参数是一个字典类型可变长形式参数

def func(d, **ddic):
	print(d)
	print(ddic)


func(1,x=2,y=3)

5.2.3 函数作为参数传递

def add(x,y):
	return x+y
	
	
def func(a,b,f):
	return f(a,b)
	
a,b=1,2
print(func(a,b,add))

5.3 变量的作用域

默认情况下,全局变量在函数中是只读的

如果在函数中直接为全局变量进行赋值操作,则认为是重新定义了一个同名的局部变量

为了在函数中修改全局变量,则需要使用global关键字对变量进行声明

def func():
	global x
	x=2

    
x=1
func()
print(x)

5.4 函数的高级特性

5.4.1 推导解析式

推导解析式是一种隐含函数

例:

squares = [x**2 for x in range(10)] #0^2~9^2

<输出表达式 for 变量 in 可迭代对象 [if 条件表达式]>

可迭代对象:组合数据类型/range()函数/字典.keys()/.values()/.items()/文件

循环可以嵌套

5.4.2 匿名函数

使用lambda来创建

格式为:

lambda <形式参数列表>:<表达式>

匿名函数主体是一个表达式,不需要使用代码块

mymax = lambda x,y:x if x>=y else y

匿名函数可以直接调用,也可以赋值给函数对象名后重复调用

5.5 函数的应用

5.5.1 多条件排序

sorted(a, key=lambda x : (x[0],x[1])) #先按第0个排,相同再按第1个排
sorted(a, key=lambda x : (x[1],x[0])) #先按第1个排,相同再按第0个排
sorted(a, key=lambda x : (-x[0],x[1])) #降序、升序

5.5.2 映射

map()函数

格式:

map(变换函数名,<可迭代对象>,[<可迭代对象>,...])

map返回元素映射变换后的可迭代类型对象

list(map(float,['1','2.0','3.5'])

5.5.3 筛选

filter()函数:选择一个可迭代对象中满足条件的元素

格式:

filter(判断函数名,<可迭代对象>)

def is_even(x):return x%2==0
list(filter(is_even,[1,2,3,4,5,6]))

5.5.4 求值

eval函数:以Python表达式的方式解析并执行字符串

不支持赋值操作

posted @ 2023-01-27 19:00  leason_lyx  阅读(60)  评论(0编辑  收藏  举报