GVKun编程网logo

如何在Python中连接字符串和数字?(如何在python中连接字符串和数字串)

19

对于如何在Python中连接字符串和数字?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解如何在python中连接字符串和数字串,并且为您提供关于python连接字符串和数字、Python-

对于如何在Python中连接字符串和数字?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解如何在python中连接字符串和数字串,并且为您提供关于python 连接字符串和数字、Python-如何在Python中从字符串中提取数字?、Python字符串和数字的转化、为什么 Python 的 f-string 可以连接字符串与数字?的宝贵知识。

本文目录一览:

如何在Python中连接字符串和数字?(如何在python中连接字符串和数字串)

如何在Python中连接字符串和数字?(如何在python中连接字符串和数字串)

我试图在Python中连接字符串和数字。当我尝试这样做时,它给了我一个错误:

"abc" + 9

错误是:

Traceback (most recent call last):  File "<pyshell#5>", line 1, in <module>    "abc" + 9TypeError: cannot concatenate ''str'' and ''int'' objects

为什么我不能做到这一点?

如何 可以 我将字符串和Python中的号码是多少?

答案1

小编典典

Python是强类型的。没有隐式类型转换。

您必须执行以下操作之一:

"asd%d" % 9"asd" + str(9)

python 连接字符串和数字

python 连接字符串和数字

python 连接字符串和数字的问题:

首先要说的是,python是强类型的语言,如果你把一个字符串和数字直接做连接的操作的话,会报错:
TypeError: must be str, not int

下面是我们的一个例子:

a = 33
b = "33"

c = a + b

如果你要数字和字符串连接的话,可以把数字通过str的方法转换成字符串的形式,然后再做连接的操作。
比如c = str(a) + b

最后的结果是:3333

Python-如何在Python中从字符串中提取数字?

Python-如何在Python中从字符串中提取数字?

如何解决Python-如何在Python中从字符串中提取数字??

如果只想提取正整数,请尝试以下操作:

>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]

我认为这比正则表达式示例更好,原因有三点。首先,你不需要其他模块;其次,它更具可读性,因为你无需解析regex迷你语言;第三,它更快(因此可能更pythonic):

python -m timeit -s "str = ''h3110 23 cat 444.4 rabbit 11 2 dog'' * 1000" "[s for s in str.split() if s.isdigit()]"
100 loops, best of 3: 2.84 msec per loop

python -m timeit -s "import re" "str = ''h3110 23 cat 444.4 rabbit 11 2 dog'' * 1000" "re.findall(''\\b\\d+\\b'', str)"
100 loops, best of 3: 5.66 msec per loop

这将无法识别浮点数,负整数或十六进制格式的整数。如果你不能接受这些限制,则可以通过以下亭亭玉立的答案解决问题。

解决方法

segex string

我将提取字符串中包含的所有数字。哪个更适合pur

例:

line = "hello 12 hi 89"

结果:

[12,89]

Python字符串和数字的转化

Python字符串和数字的转化

  • 字符串和数字相互转化: 使用int()和str()相互变化 使用float()和str()相互变化

num = 23 var = str(num)

hello = "123" num = int(hello)

str is not callable:问题一般出于,在程序中,把str写成了变量。

参考Python编程题目:https://github.com/zhiwehu/Python-programming-exercises/blob/master/100+%20Python%20challenging%20programming%20exercises.txt

为什么 Python 的 f-string 可以连接字符串与数字?

为什么 Python 的 f-string 可以连接字符串与数字?

 △点击上方Python猫”关注 ,回复“ 1 ”领取电子书

作者:豌豆花下猫

来源:Python猫

本文出自“Python为什么”系列,归档在 Github 上:https://github.com/chinesehuazhou/python-whydo

毫无疑问,Python 是一门强类型语言。强类型语言。强类型语言!(关于强弱类型话题,推荐阅读这篇 技术科普文)

这就意味着,不同类型的对象通常需要先做显式地类型转化, 然后才能进行某些操作。

下面以字符串和数字为例,看看强行操作会产生什么结果:

>>> "Python猫" + 666
Traceback (most recent call last):
  File "<stdin>", line 1in <module>
TypeError: can only concatenate str (not "int") to str

它报类型错误了(TypeError),说字符串只能连接(concatenate)字符串,不能连接 int 类型。 这正是强类型语言的基本约束。

但是,如果我们先把数字“转化”成字符串类型,再执行“+”操作,就不会报错了:

>>> "Python猫" + str(666)
''Python猫666''

上面的这个例子,对读者们来说,应该并不难理解。

由此,我们要引出一个问题:如何在不作显式类型转化的情况下,进行字符串与数字类型的拼接呢?

在《详解Python拼接字符串的七种方式》这篇文章中,它梳理了七种拼接字符串的写法,我们可以逐个来试验一下。

几种字符串拼接方式:

1、格式化类:%、format()、template

2、拼接类:+、()、join()

3、插值类:f-string

为了节省篇幅,此处直接把可以顺利拼接的 4 种写法罗列如下:

>>> "%s %d" % ("Python猫"666)
''Python猫 666''

>>> from string import Template
>>> s = Template(''${s1}${s2}'')
>>> s.safe_substitute(s1=''Python猫'',s2=666)
''Python猫666''

>>> "Python猫{}".format(666)
''Python猫666''

>>> num = 666
>>> f"Python猫{num}"
''Python猫666''

第一种写法(即 % 格式化)来自古老的 C 语言,其中的“%d”是一个占位符,表示它将要接收一个整数,并格式化成字符串。

第二和第三种写法,它们是第一种写法的升级版,不同的是,它们的占位符是通用型的,不必指定“%s”、“%d”等等明确的类型。这两种写法中,数字类型的参数被传给特定的格式化方法(即 safe_substitute 与 format),在这些方法的内部,它们会作类型转化处理。

可以说,上述三种写法都不难理解,它们的意图都有迹可循。

但是,现在再看看最后一种写法,也就是 f-string 写法,似乎就不是那么明显了。

首先,在字符串内部,它并没有像“%格式化”那样指定占位符的类型;其次,所要拼接的数字并没有作为任何函数的参数来传递。

也就是说,在明面上根本看不出任何要作类型转化的意图。但是,由于我们已知 Python 是强类型语言,已知数字类型绝对不可能直接拼接到字符串里,因此,只能说明 f-string 语法在底层作了某种类型转化的操作!

那么,我们就可以再提出一个新的问题:f-string 语法在处理字符串与数字时,是如何实现数字的类型转化的呢?

也许有的读者会猜想它是调用了内置的 str() 或 repr()(或它们对应的魔术方法__str__() 与 __repr__()),从而实现类型转化,但是,答案并没有如此简单!

f-string 语法是在 Python 3.6 版本引入的。为了省事,我们直接找到 PEP-498 文档,在里面查阅看是否有关于实现原理的线索。

文档地址:https://www.python.org/dev/peps/pep-0498

PEP 里提到f-string 的语法格式是这样的:

f''<text> { <expression> <optional !s, !r, or !a> <optional : format specifier> } <text> ...''

其中,花括号里的内容就是要作格式化的内容,除去可选的“optional”部分后,“expression”部分就是真正要处理的内容。对应前文的例子,数字 666 就是一个 expression。

expression 会按 __format__ 协议进行格式化,但是并不会直接调用 __format__() 这个方法。

文档上指出,实际的执行过程等效于type(value).__format__(value, format_spec)或者 format(value, format_spec)

事实上,字符串对象的 foramt() 方法跟 Python 内置的 foramt() 函数,它们都会调用__format__() 魔术方法,所以,f-string 其实是前文中 format() 格式化写法的升级版。

在默认情况下,format_spec 是一个空字符串,而format(value, "") 的效果等同于str(value) ,因此,在不指定其它 format_spec 的情况下,可以简单地认为 f-string 就是调用了 str() 来作的类型转化……

至此,我们看到了 f-string 的实现原理,明白了它在拼接字符串与数字时,效果等效于前文的 format() 格式化方法,也等效于使用 str() 进行类型转化。

写在最后:本文属于“Python为什么”系列(Python猫出品),该系列主要关注 Python 的语法、设计和发展等话题,以一个个“为什么”式的问题为切入点,试着展现 Python 的迷人魅力。更多精彩文章,请移步 Github 查看,项目地址:https://github.com/chinesehuazhou/python-whydo

Python猫技术交流群开放啦!群里既有国内一二线大厂在职员工,也有国内外高校在读学生,既有十多年码龄的编程老鸟,也有中小学刚刚入门的新人,学习氛围良好!想入群的同学,请在公号内回复『 交流群』,获取猫哥的微信 (谢绝广告党,非诚勿扰!)~

近期热门文章推荐:

解开 Python 中 self 的四个秘密!
Python 工匠:写好面向对象代码的原则(上)
Python 工匠:写好面向对象代码的原则(中)
Python初学者的自我修养,找到自己的方向

本文分享自微信公众号 - Python猫(python_cat)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

今天关于如何在Python中连接字符串和数字?如何在python中连接字符串和数字串的介绍到此结束,谢谢您的阅读,有关python 连接字符串和数字、Python-如何在Python中从字符串中提取数字?、Python字符串和数字的转化、为什么 Python 的 f-string 可以连接字符串与数字?等更多相关知识的信息可以在本站进行查询。

本文标签:

上一篇在Python中从1循环到无穷大(python通过循环1到n的乘积)

下一篇在Python中,如何在特定时间之前使线程休眠?(python 线程休眠)