Python一轮知识拾遗

目录

字符串格式化

%格式符

 format字符串格式化

三元条件运算符

可迭代对象

break和continue语句

enumerate函数

序列封包

序列解包

部分序列解包

append.列表和extend.列表的区别


字符串格式化

通过字符串的格式化,可以输出特定格式的字符串。
(1)
格式化字符串
%(

1
,值
2)
print('学生人数%d,平均成绩%2.1f'%(15, 81.2))
(2)
字符串
.format(

1,

2,……)
print('学生人数{},平均成绩{}'.format(15, 81.2))
(3) str.format(
格式字符串
1,

1,

2,…)
print(str.format('学生人数{0},平均成绩{1:2.1f}',15, 81.2))
(4) f-strint fd‘{}{}{}’.

%格式符

基本形式:
print(

字符串
%
格式字符
1
字符串
%
格式字符
2
字符串

%(
变量
1,
变量
2))
print('我叫%s今年%d岁!'%('小明',10))
我叫小明今年10岁!
print('圆周率%s保留三位小数为%.3f'%('pi',3.1415926))
圆周率pi保留三位小数为3.142

1)  ‘% 格式标志,标识格式开始;
2)[-] 指定左对齐输出;
3)[+] 对正数加正号;
4)[0] 指定空位填0;
5)[m] 指定最小宽度;
6)[.n] 指定精度;
7)  格式字符 指定类型
8)’% 格式运算符;
9)x 带转换的表达式
常用格式符:

 format字符串格式化

print(‘
字符串
{
标识
*}
字符串
{
标识
*}
字符串‘
.format(
变量
1,
变量
2))

 标识*与顺序无关。

print('圆周率{}为{}'.format('pi',3.1415926))
圆周率pi为3.1415926
print('圆周率{}保留三位小数为{:+.3f}'.format('pi',3.1415926))
圆周率pi保留三位小数为+3.142
print('圆周率{1}保留三位小数为{0:.2e}'.format(31415926,'pi'))
圆周率pi保留三位小数为3.14e+07

错误代码实例 

print('今年我的wish是{1:+.2f}'.format(4.9815926535))

Traceback (most recent call last):
  File "C:UsersAdministratorDesktop1.py", line 5, in <module>
    print('今年我的wish是{1:+.2f}'.format(4.9415926535))
IndexError: Replacement index 1 out of range for positional args tuple

Process finished with exit code 1

这里的代码输出是错误的,因为超出了元组tuple的range,说明format后面括号对应的数据类型为元组,而所写索引为对应的元组索引,因为上述例子对应的索引最大值为0所以使用1会报错。

纠正错误后 

print('今年我的wish是{0:+.2f}'.format(4.9815926535))

冒号前面表示对应的元组索引起始位置,冒号后面对应的是数据输出格式,这里的加号指的是正数要输出加号,后面的"."以及后面的数值表示输出的精度,f表示对应的数据类型float。

{[name][:][fill][align][sign][#][0][width][,][.precision][type]}'.format(表达式):
• Name:可为空,传递参数名;
• Fill=<any character>,可以填写任何字符;
• Align=“<”“>”“=”“^”,对其方式,表示左对齐、右对齐、居中对齐、两端对齐等。
• sign=“+”“-”,符号,表示正负号。
• Width=inter,是数字宽度,共输出多少位数字。
• Precision=integer,是小数保留位数。
• Type=“b”“e”“x”,表示输出数字的表示方式,如b是二进制表示,e是指数表示,x是十六进
制表示。

位置设定:
将格式化内容的位置用大括号
{}
占位,所有的定义都是在
format() 函数中执行。
(1)
默认位置:
S =
'
I {
0
} {
1
}, and I'am learning
'.format
('like', 'Python’)
I like Python, and I'am learning
(2)
设置位置:
S = 'I {1} {0} {1}, and I'am learning'.format('like', 'Python’)
I Python like Python, and I'am learning
(3)
设置关键字:
S = 'I {l} {p}, and I'am learning'.format(p='Python', l='like’)
I like Python, and I'am learning
类格式化方法
str.format(
格式化字符串,值
1
,值
2
,值
3)
str.format('圆周率{}保留两位小数为{:.3}','pi',3.1415926)
'圆周率pi保留两位小数为3.14'
print(str.format('圆周率{}保留两位小数为{:.3}','pi',3.1415926))
'圆周率pi保留两位小数为3.14'

程序流程控制

三元条件运算符

条件为真时的值 if (条件表达式) else 条件为假时的值

 实例1

y = (math.sin(x) + 2 * math.sqrt(x + math.exp(4)) - math.pow(x + 1, 3)) if ((x>=0))
else 
(math.log(-5 * x) - math.fabs(x * x - 8 * x) / (7 * x) + math.e)

实例2 

a=3
b=4
max=a if a>b else b
print(max)

注意:此处的else后面直接写赋给max的数值,而不是写max=b否则会报错。

错误代码

a=3
b=4
max=a if a>b else max=b
print(max)


C:UsersAdministratorAppDataLocalMicrosoftWindowsApps\1.py" 
  File "C:UsersAdministratorDesktopcode1.py", line 3
    max=a if a>b else max=b
    ^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

Process finished with exit code 1

此外,三目运算符中还可以放置多条语句有以下两种方式:

1、 使用英文逗号隔开,每条放置的语句都会执行,程序返回多条语句的返回值组成的元组:

b = 3 + 1, "3 > 2",print('AAA') if 1 > 2 else print("BBB"),2 + 2
print (b)


BBB
(4, '3 > 2', None, 4)

上面的例子中,因为 1 > 2 是False,所以执行并返回3 + 1,"3 > 2",2 + 2,print("BBB")这四条语句,由于print()函数没有返回值,故返回None

2. 使用英文分号隔开,每条语句都会执行,但程序只会返回第一条语句的返回值:

b = 1 + 1; "3 > 2";print('AAA') if 1 > 2 else print("BBB");2 + 2
print (b)

BBB
2

这里的if…else…执行print(“BBB”),返回的是第一条语句1 + 1的返回值2

可迭代对象

1、循环结构用来重复执行一条或多条语句,基于可迭代对象限制循环的次数和要求。
2、包含:序列(字符串、列表、元组)、字典、文件对象、迭代器对象、生成器函数。
3、迭代器是一个对象,表示可迭代的数据集合,包括方法的
__iter__

__next__
方法,
实现迭代功能。
对于可迭代对象,之前自己的理解一直不到位,经常使用的for i in 列表名/元组名/字符串,一直没有想过能够这样写的原理是什么,实际上就是可迭代对象。
包括我们经常使用的range,实际上也是一种可迭代对象。

break和continue语句

 continue语句的作用是终止当前循环,并忽略continue之后的语句,然后回到循环的顶端,提前进入下一次循环。
 break语句在while循环和for循环中都可以使用,一般放在if选择结构中,一旦break语句被执行,将使得当前整个循环提前结束。除非break语句让代码更简单或更清晰,否则不要轻易使用。

 对于break语句和continue语句,在C++语言中也在就见过,但是近期发现自己使用时还是没有做到灵活应用,归根结底还是概念的理解不到位。

break语句可以在满足一定条件时(本次的循环可以未结束),直接跳出循环(只能跳出一层循环,进入上一层)

而continue语句是在满足一定条件时(本次的循环可以未结束),直接进入下一次循环(i数值改变)

enumerate函数

 Python语言的for循环直接迭代对象集合中的元素,如果需要在循环中
使用索引下标访问集合元素,则可以使用内置的enumerate()函数。
 enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,并返回一个可迭代对象,故在for循环当中可直接迭代下标和元素。
enumerate(sequence,[start=1])
seasons = ['Spring', 'Summer', 'Autumn', 'Winter']
for i, s in enumerate(seasons, start=1): #start默认从0开始
    print("第{0}季节:{1}".format(i, s))

组合数据类型

数值数据类型:
• 整数类型(int)
• 布尔类型(bool)
• 浮点类型(float)
• 复数类型(complex)。
序列数据类型:
• 字符串(str)
• 列表(list)
• 元组(tuple)
• 字节序列(bytes)
集合数据类型:
• 集(set)
• 不可变集(frozenset)
字典数据类型:
• dict
可循环迭代的对象称为
可迭代对象
 在collections.abc模块中定义了抽样基类Iterable,使用内置函数isinstance()可以判定一个对象是否是可迭代的对象。
>>> import collections.abc
>>> isinstance((1,2,3),collections.abc.Iterable)
True
>>> isinstance("123",collections.abc.Iterable)
True
>>> isinstance(123,collections.abc.Iterable)
False
#for语句可实现自动迭代可迭代
对象的功能
>>> for i in ‘123’
>>> print(i)
>>> for i in (1,2,3)
>>> print(i)
>>> for i in range(8)
>>> print(i)

序列封包

把多个值赋给一个变量时,Python会自动的把多个值封装成元组,称为序列封包。
变量=元素1,元素2,…,元素n

>>> a = 1, 2, 3
>>> print(a, type(a))
(1, 2, 3) <class 'typle'>
>>> a =[1, 2], [3,4], 'def'
>>> print(a, type(a))
([1, 2], [3,4], 'def') <class 'typle'>

序列解包

当一个序列(列表、元组、字符串等)直接赋给多个变量时,会把序列中的各个元素依次赋值给每个变量,要求元素的个数与变量个数相同。
变量1,变量2,…,变量n=序列或可迭代对象
>>> a, b = (1, 2)
>>> a, b
(1, 2)
>>> a, b, c = (1, 2)
# ValueError: not enough values to unpack
>>> sid, name, sores = (1001,'张三', (80, 79, 90))
>>> sores
(80, 79, 90))

上述这个用法原来也没有仔细分析过,只觉得原来python能多个变量同时赋值,不知道这个叫做序列解包。 

部分序列解包

变量个数与序列长度不相等。

可以使用
*
元组变量,将多个值作为元组赋值给元组变量。

在一个赋值语句中,
*
元组只允许出现一次,否则出错。
>>> first, *middles, last = range(10)
>>> middles
[1, 2, 3, 4, 5, 6, 7, 8]
>>> first, second, third, *lasts = range(10)
>>> lasts #输出:
[3, 4, 5, 6, 7, 8, 9]
>>> *firsts, last3, last2, last1 = range(10)
>>> firsts #输出:
[0, 1, 2, 3, 4, 5, 6]
>>> first, *middles, last = sorted([70, 85, 89, 88, 86, 95, 89])
#去掉最高分和最低分
>>> sum(middles)/len(middles) #计算去掉最高分和最低分
后的平均值。
87.4

append.列表和extend.列表的区别

我们都知道append是尾加元素函数,假如append一个列表的话,就是直接把列表塞到原列表中。但是使用extend函数,是直接将列表的每个元素塞到原有列表中(或者说是两个列表直接进行拼接)。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>