Python3,实用技巧之:三类(7种)拼接字符串方式

2023-11-14

1、引言

因为平时善于总结整理,所以,在写博客的时候,就信手拈来…

自夸的人多了去,但是,像我这种,凤毛麟角。

言归正传,
今天我们来搞一搞python3中的拼接字符串小技巧,
虽然是小技巧,但是很实用,可能除了这几种技巧,再找不出来别的技巧了。
Python3中的字符串拼接方式,总的来说三大类,

  • 格式化类:%,format(),template
  • 拼接类:+,(),join()
  • 插值类:f-string

接下来,我们就仔细瞧一瞧,看一看,反正不吃亏!

2、格式化类

2.1 来自C的%方式

%格式化字符串的方式继承自古老的C语言,很多编程语言都有类似的实现。
比如%s是一个占位符,待仅代表一段字符串,并不是拼接的实际内容,而实际内容是在一个单独的%后面,放在一个元组里。
实例

#撸码第一课,hello word

print('%s %s' %('Hello','world'))

输出结果

>>> Hello world

  • %d : 代表一个整数
  • %f :代表一个浮点数
  • %x : 代表一个十六进制数

2.2 format 拼接方式

format用起来确实很简单,也是我比较喜欢的一个方式之一。
下面就直接看例子
实例一、简洁版

#写一句自我介绍
s1 = 'Hello {}! My name is {}.'.format('World','Carl_DJ') 
print(s1)

输入结果

>>> Hello World! My name is Carl_DJ.

实例二、雅典娜版

s2 = 'Hello {0}! My name is {1}.'.format('World','Carl_DJ') 
print (s2)
s3 = 'Hello {name1}! My name is {name2}.'.format(name1 = 'Word',name2 = 'Carl_DJ') 
print(s3)

输入结果

>>> Hello World! My name is Carl_DJ.

我们可以看到,以上两种写法,最后的输入结果都是一样的,
唯一的区别就是赋值的方式,
针对雅典娜版的两个传值方式,建议使用key-value的方式,因为撸码时间长,眼睛容易跟不上,使用key-value更直观。

2.3 面向对象模板拼接

这种拼接方式,有点类似于Django的模板语言渲染字符串,但是,很啰嗦,我们看例子

如果你足够了解Django

from string import Template
#定义
s = Template('${s1} ${s2}!')
#输出
print(s.safe_substitute(s1 = 'Hello',s2 = 'world'))

输出结果

>>> Hello world!

看到这里,是不是真的觉得很啰嗦,明明一个符号的事情,为啥要搞得这么复杂…

3、拼接类

3.1 常用的 + 方式

这种方式是最直观的,最简便的,最易懂的,

因为凡事都可以 +,但是长度不能超过20。

实例

str_1 = 'Hello world!'
str_2 = 'My name is Carl_DJ.'
print(str_1 + str_2)

输出结果

>>> Hello world! My name is Carl_DJ.

3.2 类似元组的方式

实例

s_tuple = ('Hello', ' ', 'world')
print (s_tuple)

s_like_tuple = ('Hello' ' ' 'world')
print (s_like_tuple)

输入结果
s_tuple:

>>>'Hello', ' ', 'world'

s_like_tuple:

>>>Hello world

这里两个值为什么输出的不一样,因为:
s_like_tuple 并不是一个元组,因为元素之间没有逗号分隔,这些元素可以用空格间隔,也可以不要空格。

3.3 join方法

str对象自带的join方法接收一个序列参数,可以实现拼接。
在拼接时元素如果不是字符串,需要先转换一下。
所以这种方法比较适用于连接序列对象中的元素,并设置统一的间隔。
实例

#定义str_list
str_list = ['Hello','world']
#str_join1的拼接
str_join1 = ''.join(str_list)
#输出
print(str_join1)
#str_join2的拼接
str_join2 = '-'.join(str_list)
#输出
print(str_join2)

输出结果
str_join1:

>>>Hello world

str_join2:

>>>Hello-world

4、插值类

4.1 f-string方式

实例

name = 'world'
My_name = 'Carl_DJ'
words = f'Hello {name}! My name is {My_name}.'
print(words)

输出结果

>>> Hello world! My name is Carl_DJ.

这种方式就是,在字符串前面加上f,字符串变量存放于{}内。
在可读性上秒杀format方式,在处理长字符串的拼接时,速度与join方式相当。
尽管如此,这种方式由于有一个标识符f,所以并不是所有的大佬都喜欢这种方式。

我就不一样,我就喜欢f-string这种方式。

但是,各有所爱。只要能完美的,优雅的,简洁的在代码中展示,不出错,就是好代码。

5、总结

所以,最后一句话总结:

  • 当处理字符串列表等序列结构时采用join方式 ;
  • 当拼接长度不超过20时选择 + ;
  • 当字符串长度超过20时,推荐f-string方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3,实用技巧之:三类(7种)拼接字符串方式 的相关文章

  • 使用单个文件的 Python 日志记录(函数名、文件名、行号)

    我正在尝试了解应用程序的工作原理 为此 我将调试命令插入作为每个函数主体的第一行 目的是记录函数的名称以及向日志输出发送消息的行号 代码内 最后 由于这个应用程序由许多文件组成 我想创建一个日志文件 以便我可以更好地理解应用程序的控制流 这
  • 为神经网络打乱两个 numpy 数组

    我有两个 numpy 数组用于输入数据 X 和输出数据 y X np array 2 3 sample 1 x 16 4 dtype float sample 2 x y np array 1 0 sample 1 y 0 1 dtype
  • Python Numpy Reshape错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试重塑 3D numpy 数组时遇到一个奇怪的错误 数组 x 的形状为 6 10 300 我想将其重塑为 6 3000 我正
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 如何将 numpy rearray 的子集转换为连续数组?

    我有一个recarray来自读取 csv 文件 我有兴趣将列的子集转换为连续浮点数组 我想避免将它们转换为列表或将它们一一堆叠 我尝试了中的建议https stackoverflow com a 11792956 https stackov
  • 如何调试 numpy 掩码

    这个问题与this one https stackoverflow com q 73672739 11004423 我有一个正在尝试矢量化的函数 这是原来的函数 def aspect good angle float planet1 goo
  • 将多索引转换为行式多维 NumPy 数组。

    假设我有一个类似于以下示例的 MultiIndex DataFrame多索引文档 http pandas pydata org pandas docs stable advanced html gt gt gt df 0 1 2 3 fir
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • Pandas如何按时间段过滤DataFrame

    我有一个包含下表的文件 Name AvailableDate totalRemaining 0 X3321 2018 03 14 13 00 00 200 1 X3321 2018 03 14 14 00 00 200 2 X3321 20
  • 如何让 Streamlit 每 5 秒重新加载一次?

    我必须每 5 秒重新加载 Streamlit 图表 以便在 XLSX 报告中可视化新数据 如何实现这一目标 import streamlit as st import pandas as pd import os mainDir os pa
  • 如何在 Python 中跟踪日志文件?

    我想在 Python 中提供 tail F 或类似内容的输出 而无需阻塞或锁定 我找到了一些非常旧的代码来做到这一点here http code activestate com recipes 436477 filetailpy 但我认为现
  • 无法将matplotlib安装到pycharm

    我最近开始使用Python速成课程学习Python编程 我陷入困境 因为我无法让 matplotlib 在 pycharm 中工作 我已经安装了pip 我已经通过命令提示符使用 pip 安装了 matplotlib 现在 当我打开 pych
  • 更改用作函数全局作用域的字典

    我想做一个 purePython 的装饰器 其中一部分是能够有选择地禁止访问函数的全局范围 有没有一种方法可以以编程方式更改哪个字典事物充当函数的全局 外部作用域 因此 例如在下面我希望能够拦截对f in h并抛出错误 但我想允许访问g因为
  • 异步异常处理程序:在事件循环线程停止之前不会被调用

    我正在我的异步事件循环上设置异常处理程序 但是 在事件循环线程停止之前 它似乎不会被调用 例如 考虑以下代码 def exception handler loop context print Exception handler called
  • 在不同的 GPU 上同时训练多个 keras/tensorflow 模型

    我想在 Jupyter Notebook 中同时在多个 GPU 上训练多个模型 我正在使用 4GPU 的节点上工作 我想将一个 GPU 分配给一个模型并同时训练 4 个不同的模型 现在 我通过 例如 为一台笔记本选择 GPU import
  • python 日志记录替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 蟒蛇记录模块 http docs python org library logging html使用起来
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • PYTHON:从 txt 文件中删除 POS 标签

    我有以下 txt 文件 其中包含 POS 词性 http en wikipedia org wiki Part of speech tagging 每个单词的标签 不用 jj到 说 vb 我 ppss是 bedz愤怒 jj在 在 dt无与伦
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包
  • 用 Beautiful Soup 进行抓取:为什么 get_text 方法不返回该元素的文本?

    最近我一直在用 python 开发一个项目 其中涉及抓取一些网站的一些代理 我遇到的问题是 当我尝试抓取某个知名代理站点时 当我要求 Beautiful Soup 查找 IP 在代理表中的位置时 它并没有按照我的预期执行操作 我将尝试查找每

随机推荐