Re: [问题] 想请问如何不print出空格?

楼主: Hsins (翔)   2022-09-17 12:59:22
: 推 tzouandy2818: print("Name:" + str(name)) 09/16 22:25
: → tzouandy2818: 不知道用逗号跟转字串连接差在哪 不过应该还是f-str 09/16 22:25
: → tzouandy2818: ing比较好 09/16 22:25
稍微展开来说说,关于使用逗号、加号
以及 f-string 一些容易混淆的地方。
首先来试试以下的程式:
>>> str1 = "Hello"
>>> str2 = "World!"
>>> print(str1, str2)
Hello World!
>>> print(str1 + str2)
HelloWorld!
>>> print((str1, str2)*3)
('Hello', 'World!', 'Hello', 'World!', 'Hello', 'World!')
>>> print((str1 + str2)*3)
HelloWorld!HelloWorld!HelloWorld!
在这个例子可以“猜”出来:
1. 使用逗号时,具体的操作其实是传递
  两个引数 str1 与 str2 给 print()
  被放置在 tuple 中保持顺序
2. 使用加号时,是将字串经过连结之后
  的结果(一个新的字串)传递下去
CPython 直译器在执行程式时,会先将其
翻译成一系列的字节码(byte code),
我们可以透过 dis 来分析一下究竟他们
做了些什么:
>>> import dis
>>> def fun1(str1, str2): return str1, str2
>>> def fun2(str1, str2): return str1 + str2
>>> dis.dis(fun1)
2 0 LOAD_FAST 0 (str1)
2 LOAD_FAST 1 (str2)
4 BUILD_TUPLE 2
6 RETURN_VALUE
>>> dis.dis(fun2)
2 0 LOAD_FAST 0 (str1)
2 LOAD_FAST 1 (str2)
4 BINARY_ADD
6 RETURN_VALUE
这样是不是更清楚了一些?
作者: tzouandy2818 (Naked Bear)   2022-09-17 13:26:00
感谢补充虽然本来想说用Python就不要在计较效率了 可是看到效率差那么多 又忍不住想计较
作者: lycantrope (阿宽)   2022-09-17 14:03:00
fstring 跟concat功能差很多,本来就不能单纯比效能。
楼主: Hsins (翔)   2022-09-17 14:06:00
实际上效能差异并没有特别显著啦....
作者: vic147569az (亿载金城武)   2022-09-17 14:12:00
感谢H大开示
作者: lycantrope (阿宽)   2022-09-17 14:34:00
没错,而且大部分时候concat都比较慢
楼主: Hsins (翔)   2022-09-17 14:41:00
通常 f'{var}' 也比 str(var) 要来的快,后者多了一个呼叫函数的操作,一样可以透过 dis 来做确认
作者: Schottky (顺风相送)   2022-09-17 17:16:00
作者: cloki (夜云天)   2022-09-19 01:36:00

Links booklink

Contact Us: admin [ a t ] ucptt.com