Python中使用'\n'.join无法生成预期前置空行?技术咨询
问题描述
以下代码运行后,期望输出中test前有一个空行,但实际未达到预期:
def add_empty_line(input_str): lines = input_str.split('\n') if lines[0] != '': lines.insert(0, '') print('before', lines) join_lines = '\n'.join(lines) print('after', join_lines) return join_lines add_empty_line('test')
运行结果:
before ['', 'test'] after test
但换成下面的写法,却能得到test前置空行的结果:
a = ['', 'test'] b = '\n'.join(a) print(b)
原因分析
核心差异在于**print函数的参数传递方式**:
第一个代码中使用
print('after', join_lines),属于多参数打印。print会将多个参数用默认分隔符(空格)拼接,再加上默认结尾换行输出。此时join_lines的值是'\ntest',最终打印内容为'after ' + '\ntest',输出后表现为:after test这里
'after '后紧跟换行符,导致after单独占一行,换行后直接输出test,看起来test前没有空行。第二个代码中使用
print(b),属于单参数打印。b的值就是'\ntest',print直接输出该字符串,因此会先打印一个空行,再输出test,符合预期。
如果要让第一个代码的输出符合预期,可修改print语句去掉参数间的分隔符,比如:
print('after', join_lines, sep='') # 或者直接拼接字符串 print('after' + join_lines)
内容的提问来源于stack exchange,提问作者wonderrank123
相关产品推荐
相关产品推荐

