Python中字符串拼接的语法是不是有点反人类啊

一个 url : http://www.xxx.xxx/search/user + ‘/’ +id , id 为 int 型,结果报错,本来打算用 join 的,发现 join 函数也不允许连接一个 int 型
我主要写 PHP 的。换 py 写感觉好不适应
Python中字符串拼接的语法是不是有点反人类啊

76 回复

哈哈,我懂你的感觉。刚接触Python时,看到+joinf-stringformat这么多种方式,确实有点懵,尤其是从其他语言转过来的时候。

不过用久了你会发现,Python的字符串处理其实非常灵活和强大。每种方式都有它最适合的场景:

  1. + 拼接:最简单直观,适合少量固定字符串的拼接。

    name = "World"
    greeting = "Hello, " + name + "!"
    
  2. join() 方法处理列表、元组等可迭代对象中的大量字符串时,性能最好,这是首选方式。

    words = ["Hello", "World", "!"]
    sentence = " ".join(words)  # 用空格连接
    
  3. f-string (Python 3.6+)现代Python中最推荐的方式,可读性极高,直接嵌入变量和表达式。

    name = "World"
    age = 30
    message = f"Hello, {name}! You are {age} years old."
    
  4. format() 方法:在f-string之前是主流,功能强大,适合复杂的格式化。

    "Hello, {}!".format(name)
    "{name} is {age} years old".format(name=name, age=age)
    

说“反人类”可能只是还没习惯它的哲学——Python提供了多种工具,让你根据具体情况选择最合适的那一个。核心建议就是:日常用f-string,拼接列表必用join

url 是 str 型的,拼接要类型相同吧

请用 str.format

强类型的差别,感觉又要吵了。。。。

字符串拼接都是推荐"".format()来做的吧

这个要看人类怎么定义







感谢各位解答。。直接 str()了,写了几个月吐槽点越来越多。
比如用 peewee 库, get 一个不存在的数据会报错,还非要 try 捕捉下, PHP 里就没有这么多蛋疼的地方
希望随着时间的推移让我爱上 py 交易吧

py 这也算蛋疼的话,那 C++之类只能哭晕在厕所了

我曹, 还敢有 python 反人类的
拉出去

这个不是 python 的锅吧
peewee 我没用过,如果你用 django 的 ORM , get 仍然会报错,但是用 first 就不会。
这个取决于你的需求,如果这是一个意料之外的,比如不合法访问,那么报错保护了数据,直接结束整个流程,是完全正确的;反之如果处理不存在的情况也是一种业务上的需求,你可以 try ,也可以用 first 再去处理 first 的返回值。

其实这个字符串拼接不自动转还是有好处的!

——以前用 flv.js 视频时间显示不出来,慢慢找发现我给的数字其实是字符串型,它用+号加起来的时候全部变成了巨长的数字。

各有各的蛋疼之处,主要看你习惯罢了
python 这样的语言你都觉得反人类,那我还有什么话说

如果 PHP 不报错,那空值直接进入下面的业务,产生无法控制的 bug ,这个才是真反人类

如果 get 不报错,那你想获得什么结果呢

#7
#14
#13
#12
#11
#10
#9

我知道错了,主要刚过来写没多久,保留了很多 PHP 的习惯,各位打住,避免引起不必要的战争

没有模板字符串也就算了,字符串拼接居然不会自动转换类型。。。。

用 c 语言的表示很淡定

字符串拼接居然用 + 。
不用 format 也可以 % 来拼接啊。
另外 peewee get 不到的话,还有 get_object_or_404() 的方法。
LZ 还是多看看文档吧

就算报错,也会和你清清楚楚的说是类型错误啊。。

简单拼接比较习惯 ‘http://www.xxx.xxx/search/user/%d’ % id 这样写

用 format()岂不是美滋滋

#19 懒得用%,在 php 中简单的我一直是+来拼接

#7

#20
#21
#18
#17
#15

感谢各位热心解答,想不到一个小小的话题这么多人回复,小弟受宠若惊啊。

后来人打住吧,此贴作废。下班回家

#22 php 也有 format…我嫌麻烦,就这么简单的一个拼接。换的着上意大利炮吗

好了不多说了,各位散了

推荐用 join ,性能比+高很多

所以学编程从复杂的语言开始也有好处, c++用多了觉得其他语言怎么折腾也能接受,用 kotlin 踩了一段时间坑之后觉得太爽了

用 perl 的时候,觉得类型随便用啊, 上下文自己感受,php 也是借鉴过来的

大概是还不适应吧,平心而论 python 是写起来最符合审美的语言,说到反人类,怎么没有 java

还好你用的不是 C.

还好你不是用的静态类型的语言,要不然你可以去自杀了。

怎么说 java 了 类似 java 这种高级语言 更接近生活 怎么反人类了? 反人类的都是底层语言

《 python 的 orm 是不是有点反人类啊》

居然不能 “select * from table where a=” + 1


1. 模板字符串 3.6 有了, f-string ,现在生产环境是 3.5 , 3.6 并不遥远

2. 字符串拼接自动转换类型?到时候又会来喷 1 + ‘1’ = ‘11’ 了

这个 xxx.xxx 域名点开后很。。。。嗯。。。。。


Python 本来就很反直觉啊

Python 是强类型语言啊

换语言不适应就是依然是以前语言的思维习惯问题而已,多用用就自然而然了。

还记得用 c 换 py 的时候也有一两个月不适应。

python 下的字符串拼接很好用啊
url = ‘http://www.xxx.xxx/search/user/%d’ %id

用+是 js 党的习惯啊,哈哈哈

看来是需要探讨一下“第一个语言是 c/c++的重要性”。

<a target="_blank" href="http://www.xxx.xxx/search/user$" rel="nofollow noopener">http://www.xxx.xxx/search/user$</a>{id} 觉得 js 的最好用, ‘http://www.xxx.xxx/search/user/%d’ %id 也还行

确实,还不如 cpp ,隐式转换都没法做(逃

不过格式化字符串用从一串模板字符串出发其实也算是标准做法

果然 PHPer 的代码习惯够糟糕的哎…

与 py 交易不如和 ruby
"http://www.xxx.xxx/search/user/#{id}"

哦?+ 是 JS 习惯?今天才知道…

我当初直接 py 上手,开始用 + 好多年,最近两年才慢慢换成 %类型 嵌入字符串里,末尾再加个 变量列表。

lz 只会 php 吗

这是强类型语言 不自动转型的 花式 format 很好用的 ‘http://www.xxx.xxx/search/user/{}’,format(id)

你在 v2 吐槽 py 不是找不自在吗?😂😂😂

你随便找本新手教程看一遍再用。。省时间

动态类型一时爽……
写 PHP 我感觉是没有 py 爽

% 是淘汰的方法了,社区前阵子推荐 str.format()

3.6 以后可以用这个

python<br>&gt;&gt;&gt; f'The value is {value}.'<br>'The value is 80.'<br>

习惯就好

以 CPython 2.7.11 为例,在 Objects/stringobject.c 文件的 string_concat 函数开头加上:

<br>if(!PyString_Check(bb) &amp;&amp; bb-&gt;ob_type-&gt;tp_str != NULL)<br>{<br> PyObject *nbb = bb-&gt;ob_type-&gt;tp_str(bb);<br> return string_concat(a, nbb);<br>}<br>
然后就:

是 python2.x 还是 3.x ?
我觉得 python 的已很人性化了。

楼主一定是个假 php dev , php 里 string concatenation 明明是 ‘.’

可以试试写 node

坐等 3.6

静态类型语言反而不觉得
正因为 python 和 js 和 php 一样是弱类型的语言,所以想当然会觉得
str + int 应该自动转换成 str + str ,还特地 str + str(int) 确实很蛋疼

P.S. 用 python 三个礼拜有感

楼主开了喷语言的贴,是说打住就能打住的吗?不翻页已经算好了。

我觉得真正要吐槽的是运行到那一句才报错吧,要是 Python 静态类型多好

Python 是强类型+动态类型

重要的是在 python 下拼接字符串就不应该用 +
不同语言要分开对待

另外我记得 php 的拼接更奇葩吧,好像是用.

如果真打算用一种新语言,应当找本书仔细看看,可以少很多坑,花不了几天时间。
你的问题都是最基础的东西,看过书都知道。另外你是在有 PHP 的思维写 python ,自然不爽。
第一个问题是因为类型不匹配。实际上 PHP 和 js 的自动类型转换很可能带来潜在的问题。
第二个问题,你给个默认值就不会抛错。

#60 Python 应该是强类型, js 是弱类型。

弱类型语言是指变量的类型可以被隐式转换。而强类型语言趋向于不自动转换变量类型,转换类型需要手动进行。

https://www.v2ex.com/t/61513

https://www.zhihu.com/question/19918532

其实少量拼接的时候+跟 join 的性能相差不大。

#23 你一定是用了假的 PHP 。
我写 PHP 的时候都是要用 . 来拼接的,你怎么会用 + 的?

其实 lz 是来黑 php 用.连接字符的 (doge

写了这么多年 PHP 我到现在才知道 php 能用+连接字符串,但怎么感觉连完的结果不大对呢→_→

那你用 Swift 岂不是要砸电脑,嘿嘿

Python 和 php 是不同的编程语言啦,相信楼主很快就能适应。

Python 反人类的又不只这一个,何必大惊小怪的。

3.6 f-string:

f'<a target="_blank" href="http://www.xxx.xxx/search/user/" rel="nofollow noopener">http://www.xxx.xxx/search/user/</a>{id}'

回到顶部