python 字符串拼接

Python 的 str(字符串)是 不可变的 (immutable)。每次用 + 或其它方式"拼接**"都会创建新的字符串对象**,如果拼很多次,会造成很多临时对象,性能差。因此,少量拼接 (比如几段)用 + 或 f-string 很方便;大量或循环里拼接 应用 ''.join(...) 或字符串缓冲(io.StringIO)或构建 list 再 join。

1.常用的字符串拼接方式

1 f-string(python3.6以上)-语法直观、速度快、能插入表达式与格式化。

python 复制代码
name = "Alice"
age = 30
s = f"Name: {name}, Age: {age}"
# 支持表达式、格式化
#f-string 允许你在 {} 里面写任何能计算结果的东西
#支持控制 显示出来的文字形式。如 小数保留几位?是否补零?是否右对齐 / 左对齐?
pi = 3.14159
f"pi≈{pi:.2f}"  # 'pi≈3.14'

补充一下:pi:.2----------format Specification(Python 格式化迷你语言)

部分 含义
pi 要格式化的变量
:.2f 说明"我想把这个变量格式化成保留 2 位小数的浮点数"

其中:

python 复制代码
:   2   f
|   |   |
|   |   └── 输出格式是 float(浮点数)
|   └────── 保留 2 位小数
└────────── 表明后面是格式化指令

记录一下python 的讲解

在 Python 中,format_spec 是格式化规范的一种表示,它提供了强大而灵活的字符串格式化功能。通过 format_spec,我们可以精确控制数值、字符串等对象的输出格式,例如设置精度、对齐方式、填充字符等 。本文将详细介绍 format_spec 的基础概念、使用方法、常见实践以及最佳实践,帮助读者深入理解并高效使用这一特性。其格式的一般结构如下:

python 复制代码
数字格式的定义以 ':' 号开始。碰到了': '字符就知道要定义一个数字的显示格式了。格式的定义顺序为 
[[fill]align][sign][#][0][width][,][.precision][type]
'''
在 Python 的 f-string(以及 str.format()、format())里,冒号 : 的作用只有一个:告诉 Python:冒号后面是"格式化说明(format specification)"。即:
{变量名 : 格式说明}
		没有 : = 原样输出
		有 : = 使用特定格式输出
'''
format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill            ::=  <any character>
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
  • fill:填充字符(任意字符,常用空格或 0
  • align:对齐方式:<(左对齐)、>(右对齐)、^(居中)、=(数字的符号在最左,数字在中间)
  • sign:符号处理:+(始终显示正负号)、-(只显示负号,默认)、 (空格,正数前留空格)
  • #:对"#"参数来说,对于二进制/八进制/十六进制,会保留前缀 0b/0o/0x;对于浮点会强制显示小数点等
  • 0:如果放在 width 前,用 0 作为填充且与 = 相关(常见写法如 08.2f
  • width:最小字段宽度(整数),不足时用填充字符填充
  • ,:千位分隔符(每三位加逗号)
  • .precision:精度,含义随 type 而异(浮点表示小数位数;通用表示有效位数等)
  • type:格式类型(d, b, o, x, X, f, F, e, E, g, G, %, s 等)
  • fill 【可选】空白处填充的字符
  • align 【可选】对齐方式(需配合width使用)
  • <,内容左对齐
  • >,内容右对齐(默认)
  • =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
  • ^,内容居中
  • sign 【可选】有无符号数字
  • +,正号加正,负号加负;
  • -,正号不变,负号加负;
  • 空格 ,正号空格,负号加负;
  • 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示

  • , 【可选】为数字添加分隔符,如:1,000,000
  • width 【可选】格式化位所占宽度
  • .precision 【可选】小数位保留精度
  • type 【可选】格式化类型
  • 传入" 字符串类型 "的参数
    • s,格式化字符串类型数据
    • 空白,未指定类型,则默认是None,同s
  • 传入" 整数类型 "的参数
    • b,将10进制整数自动转换成2进制表示然后格式化
    • c,将10进制整数自动转换为其对应的unicode字符
    • d,十进制整数
    • o,将10进制整数自动转换成8进制表示然后格式化;
    • x,将10进制整数自动转换成16进制表示然后格式化(小写x)
    • X,将10进制整数自动转换成16进制表示然后格式化(大写X)
  • 传入" 浮点型或小数类型 "的参数
    • e, 转换为科学计数法(小写e)表示,然后格式化;
    • E, 转换为科学计数法(大写E)表示,然后格式化;
    • f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
    • F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
    • g, 自动在e和f中切换
    • G, 自动在E和F中切换
    • %,显示百分比(默认显示小数点后6位)
      fill 【可选】空白处填充的字符
      align 【可选】对齐方式(需配合width使用)
  • <,内容左对齐
  • >,内容右对齐(默认)
  • =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
  • ^,内容居中
    width 【可选】格式化位所占宽度

2.+ 拼接

python 复制代码
a = "hello"
b = "world"
c = a + " " + b
print(c)


#hello world

+ 拼接时,两边必须都是字符串

3.,-----print 专用,不是真拼接

python 复制代码
print("age is", age)


#output
age is 18


#本质上,
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
# *objects:可以传入任意多个要打印的对象(0 个、1 个、多个都行)。
# sep:分隔符,默认为一个空格 ' '。它决定了多个对象之间用什么字符串分隔。
# end:结尾字符串,默认为换行 \n。

#对于
print("age is", age)
#实际上是把两个对象传给了 print():
字符串 "age is"
变量 age(假设 age 是整数 18)
Python 会:
	自动把每个对象转换成字符串(对非字符串对象调用 str())。
	用 sep 参数指定的分隔符(默认是空格 " ")把它们连起来。
	最后加上 end(默认换行)输出。
    
    

4.% 格式化

python 复制代码
name = "Tom"
age = 18
s = "My name is %s, age is %d" % (name, age)
print(s)


# %相当于一个占位符,告诉这里要插入东西了。
符号 含义
%s 字符串(万能)
%d 整数
%f 浮点数

5.str.format()

PYTHON 复制代码
name = "Tom"
age = 18
s = "My name is {}, age is {}".format(name, age)
print(s)

#output
My name is Tom, age is 18

#还可以指定位置
print("{1} is {0}".format("happy", "Tom"))

#output
Tom is happy

#控制格式

pi = 3.14159
print("pi = {:.2f}".format(pi))

#以 :开头,作为开头标志符--{变量:格式规则}---冒号 : 的作用:告诉 Python 后面是格式规则

6.上边写的太复杂了,在写一下f-string

python 复制代码
name = "Tom"
age = 18
print(f"My name is {name}, age is {age}")


#output
My name is Tom, age is 18


#还可以直接写表达式,但是必须是一个要能够算出来值的东西、不能做那些只做动作但是没有产出结果的东西
a = 3
b = 5
print(f"a + b = {a + b}")



#格式化
pi = 3.14159
print(f"pi = {pi:.2f}")

#同样是以 : 作为格式化的开的头标志。

7.join(),一般都是大量字符串拼接专用的

python 复制代码
lst = ["I", "love", "Python"]
s = " ".join(lst)
print(s)


#output 
I love Python

#但是要注意,join的要求很严格,必须全部是字符串才可以
" ".join(["age", 18])  #---这是错误的,拼接对象必须都是字符串。
相关推荐
我是苏苏2 小时前
Web开发:Windows系统中使用GUI界面或cmd命令设置防火墙规则
windows
superman超哥2 小时前
仓颉锁竞争优化深度解析
c语言·开发语言·c++·python·仓颉
一晌小贪欢2 小时前
【Python办公自动化】Python办公自动化常用库新手指南
开发语言·python·python自动化办公·python3·python办公自动化·python办公
其美杰布-富贵-李2 小时前
Python 反射完整学习笔记
笔记·python·学习·反射
热心市民小刘05052 小时前
12.23二叉树的层序遍历
python
yaoh.wang3 小时前
力扣(LeetCode) 111: 二叉树的最小深度 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·深度优先
HealthScience3 小时前
怎么搜索某个已知的药物的smiles
python
jimmyleeee3 小时前
人工智能基础知识笔记二十八:几款有用的LLM管理工具
人工智能·笔记·python
schinber3 小时前
Python包管理工具全景指南:从pip到现代化工具实战
python·conda·pip·uv