Python一轮知识拾遗

news2024/11/30 14:37:20

目录

字符串格式化

%格式符

 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:\Users\Administrator\Desktop\1.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:\Users\Administrator\AppData\Local\Microsoft\WindowsApps\\1.py" 
  File "C:\Users\Administrator\Desktop\code\1.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函数,是直接将列表的每个元素塞到原有列表中(或者说是两个列表直接进行拼接)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么要申报绿色工厂?

一、什么是绿色工厂&#xff1f; 绿色工厂是指实现了用地集约化、生产洁净化、废物资源化、能源低碳化的工厂。 二、为什么要申报绿色工厂&#xff1f; 1、政策导向&#xff0c;发展趋势 发展绿色工厂是顺应全球绿色发展的大趋势&#xff0c;符合国家政策导向。 2、荣誉称号…

[笔记]Windows Cyswin ssh配置及远程控制

文章目录前言一、配置1.1 安装 Cygwin1.2 Cygwin安装时搜索安装ssh1.3 添加cygwin安装目录至Path环境变量1.4 配置 SSHD 服务1.5 添加 sshd连接账号二、使用2.1 使用配置的连接账号进行登录2.2 连接远程主机三、常见问题3.1 ssh on cygwin和openssh 冲突 提示 Host key verific…

新增血缘关系功能,色彩地图支持标记功能,DataEase开源数据可视化分析平台v1.18.0发布

2023年1月9日&#xff0c;DataEase开源数据可视化分析平台正式发布v1.18.0版本。 这一版本的功能升级包括&#xff1a;数据集方面&#xff0c;定时任务采用分页的方式拉取数据&#xff0c;减少资源消耗&#xff1b;仪表板方面&#xff0c;新增仪表板主题&#xff0c;以满足不同…

二叉平衡树之二叉树搜索树【咱们一起手动模拟实现】

目录 1、什么是二叉搜索树&#xff1f; 2、手动模拟二叉搜索树 2.1、整体代码 2.2、查找数据 2.3、插入数据 2.4、删除数据 3、性能分析 1、什么是二叉搜索树&#xff1f; 二叉搜索树也叫作二叉排序树&#xff0c;可以使一颗空树&#xff0c;也可以是具有以下性质的二…

JavaScript 高级 内存管理和闭包

这里写目录标题1. JavaScript内存管理2. 垃圾回收机制算法1. 引用计数算法2. 标记清除算法3. 闭包的概念理解4. 内存泄露5. 面试题1. JavaScript内存管理 不管什么样的编程语言&#xff0c;在代码的执行过程中都是需要给它分配内存的&#xff0c;不同的是某些编程语言需要我们…

基于融合C3SE+YOLOv5s的高精度二维码检测识别分析系统

在前面的系列博文中&#xff0c;我们尝试了在不同款的yolov5模型中加入不同的注意力机制来提升模型的性能&#xff0c;都有不错的表现效果&#xff0c;本文主要的目的是尝试将注意力机制融合集成进入原生的C3模块中来替换原生的C3模块来对比分析模型的检测性能&#xff0c;首先…

【精华】JVM调优学习

JVM 介绍 1. 什么是 JVM JVM 是 Java Virtual Machine&#xff08;Java 虚拟机&#xff09;的缩写。一台执行 Java 程序的机器。 2 .JAVA 语言的执行原理 计算机语言&#xff1a; 计算机能够直接执行的指令。这种指令和系统及硬件有关。 计算机高级语言&#xff1a; 在遵循…

模块化建筑全球市场分析

模块化市场分析 市场摘要 全球模块化建筑市场&#xff0c;预计从2019年的1199亿6千万美元&#xff0c;到2027年的1916亿2千万&#xff0c;以6.4%的年复合成长率成长。人口增加&#xff0c;快速城市化和基础设施发展投资增加是预测期内刺激市场增长的关键因素。模块化施工是最可…

【C进阶】第十三篇——指针详解

指针的基本概念 指针类型的参数和返回值 指针与数组 指针与const限定符 指针与结构体 指向指针的指针与指针数组 指向数组的指针与多维数组 函数类型和函数指针类型 不完全类型和复杂声明 指针的基本概念 堆栈有栈顶指针&#xff0c;队列有头指针和尾指针&#xff0c;…

C++ 图进阶系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径求解算法

1. 前言 因无向、无加权图的任意顶点之间的最短路径由顶点之间的边数决定&#xff0c;可以直接使用原始定义的广度优先搜索算法查找。 但是&#xff0c;无论是有向、还是无向&#xff0c;只要是加权图&#xff0c;最短路径长度的定义是&#xff1a;起点到终点之间所有路径中权…

第五十讲:神州路由器IPv6隧道的配置

目前IPv6隧道技术有ISATAP隧道、6to4隧道、IPv6 over MPL隧道等。 任务一&#xff1a;配置ISATAP隧道 实验拓扑图如下所示 配置要求&#xff1a;两台路由器ROUTERA和ROUTERB通过IPv4网络连接&#xff0c;要求在两台路由器上分别配置ISATAP隧道&#xff0c;实现两端IPv6主机PC…

回收租赁商城系统功能拆解05讲-供货商

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格&#xff0c;后台调整最终回收价&#xff0c;用户同意回收后系统即刻放款&#xff0c;用户微信零…

2022年学习和实习总结——收获颇多(未完待续...)

0 序言 时间已经进入了2023年&#xff0c;今年将是属于我们这一届秋招的一年。回顾2022年的学习和实习历程&#xff0c;我觉得今年的收获还是不少的&#xff0c;甚至可以说是整个高等教育生涯中&#xff0c;收获最多的一年。 1 学习情况总结 1.1 读书和学习总结 原来…

【Linux】项目构建自动化工具——make和makefile

make 和 makefile1.背景2. 利用make和makefile简单编译一个源文件3.使用方法解释4.执行原理5.项目清理1.背景 &#xff08;1&#xff09;一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff…

智能驾驶视觉传感器测试:自动驾驶车辆如何进行传感器标定?

为什么要进行标定&#xff1f;一辆自动驾驶车辆会安装多个传感器&#xff0c;需要通过传感器标定来确定相互之间的坐标关系&#xff0c;从而将多个传感器数据整合为“一个传感器”。因此&#xff0c;准确的传感器标定是实现智能车辆多传感器感知和定位系统的先决条件。传感器标…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《6》

我们在看Faster R-CNN源码(MXNet版本)的时候&#xff0c;除了下面这些我们遇到的常见的参数解析 import argparse import ast parser argparse.ArgumentParser(descriptionDemonstrate a Faster R-CNN network,formatter_classargparse.ArgumentDefaultsHelpFormatter) parse…

【操作系统系统/Golang】实验5:磁盘调度(FCFS,SSTF,SCAN与循环SCAN)

1 实验问题描述设计程序模拟先来先服务FCFS&#xff0c;最短寻道时间优先SSTF&#xff0c;SCAN和循环SCAN算法&#xff08;对应其他参考书的LOOK和C-LOOK&#xff09;的工作过程。假设有trackNum个磁道号所组成的磁道访问序列&#xff0c;给定开始磁道号initTrackNum和磁头移动…

Java项目管理工具:Maven介绍

Maven 简介下载与环境配置Maven仓库仓库类型本地仓库配置简介 Maven ,一款跨平台的项目管理工具。它主要服务于基于 Java 平台的项目构建与依赖管理。即可以将项目的开发和管理过程抽象成一个项目对象模型(POM),开发人员只需要做一些简单的配置,Maven 便可自动完成项目构建…

HRNet源码阅读笔记(4),庞大的PoseHighResolutionNet模块-stage1

一、图和代码上一讲的图中&#xff0c;有stage1图例如下;关键是看pose_hrnet.py中PoseHighResolutionNet模块的forward函数相关部分如下&#xff1a;def forward(self, x):x self.conv1(x)x self.bn1(x)x self.relu(x)x self.conv2(x)x self.bn2(x)x self.relu(x)x self…

一辈子干好一件事,你就了不起

人生的道路和轨迹&#xff0c;就像是射出去的箭。假如左拐右拐&#xff0c;不但不能射中靶心&#xff0c;达不到目标&#xff0c;还有可能拐弯回到原点&#xff0c;原地踏步。日复一日&#xff0c;年复一年&#xff0c;没有成长和收获&#xff0c;这很可怕。 短暂的2022年&…