for size in [1, 2, 3, 4]:
result = 0
print("size=" + str(size))
for element in range(size):
result = result + element
print(" adding " + str(element)+", result so far=" + str(result))
print("Done. size=" + str(size) + " result=" + str(result))
print("All done!")
我想知道为什么我们在第7行使用str()
和size
上的result
函数。我知道我们不能在单个打印函数中使用整数和字符串,但如果规则是这样的,为什么这个代码中没有任何问题(关于整数+字符串规则)?
x=18
print("Hello , I am" , x , "years old.")
我们在一行中使用整数和字符串不是吗?
答案 0 :(得分:1)
关于订单的运行顺序:
"Done. size=" + str(size) + " result=" + str(result)
必须首先执行,之前调用print
函数。 print
函数只获取单个连接字符串 - 它不知道使用+
来构造它。
在这种情况下:
print("Hello , I am" , x , "years old.")
print
函数获取所有4个参数(实际上是一个4元素元组),并且现在可以将每个参数转换为字符串本身(请参阅下面的不必要的详细信息)。
顺便说一下,如果你反对使用str()
,那么还有其他方法可以格式化要打印的字符串。以下行都产生相同的输出:
print("Done. size=" + str(size) + " result=" + str(result))
print("Done. size=%d result=%d" % (size, result))
print("Done. size={} result={}".format(size, result))
print(f"Done. size={size:} result={result:}")
最后一个f" "
需要Python 3.6或更高版本。
不必要的细节:
str()
函数中print()
的转换实际上是由python API调用PyFile_WriteObject()
使用标记Py_PRINT_RAW
完成的(在C实现中)。如果给出Py_PRINT_RAW
,则写入对象的str()。
答案 1 :(得分:1)
仅仅因为两个引用一起出现在一行中并不意味着它们被连接在一起。如果是第一个例子,你是串联字符串(这就是为什么它们都必须是字符串)并将它们发送到print
函数。在第二个示例中,您将向print
函数发送多个参数,这些参数将打印每个参数。 print
函数可以处理任意数量的参数,这些参数不一定必须属于同一类型。
答案 2 :(得分:0)
加号(+
)运算符无法添加字符串和数字。这就是您需要使用str()
。
如果您尝试:
"hello" + 2
你会收到错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
使用print(a, "b", c, d)
时,您传递的是多个参数,并且不需要连接。每个参数在打印前都会转换为字符串。