m0_66198303 2022-07-02 23:47 采纳率: 100%
浏览 54
已结题

format和f+strings格式化输出的差异点

问题遇到的现象和发生背景

Python初学者,在写格式化输出代码是,用了format 和 f+strings中方法,输出结果却不一样

问题相关代码,请勿粘贴截图

def remove_ele(lista, listb):
for i in listb:
lista.remove(i)
return lista

list1 = [3, 5, 4, 7, 9, 11, 13]
list2 = [7, 11]
print('from {} remove {}, result:{}'.format(list1, list2, remove_ele(list1, list2)))

print(f'from {list1} remove {list2},result:{remove_ele(list1, list2)}')

上面两个print不能同时运行,请先注释掉其他一个print。
先是用format方法输出,后是用f+strings这种方法输出

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

两种方法的输出结果,我想先格式化输出list1,但包含format代码的是先把list1的两个元素remove掉了再输出,
而包含f+strings代码的则输出原始的list1,没有remove掉两个元素。

我想要达到的结果

上面代码的差别在哪里?导致了格式化输出list1出现了什么差异?

  • 写回答

2条回答 默认 最新

  • 天际的海浪 2022-07-03 00:43
    关注

    列表是按地址传递的。当把一个列表从一个变量传递到另一个变量中时,两个变量都指向这同一个列表的地址。
    remove_ele()中lista和list1都指向同一个列表的地址
    remove_ele()函数中lista移除了元素,list1也会一起改变

    print('from {} remove {}, result:{}'.format(list1, list2, remove_ele(list1, list2)))
    

    是先执行remove_ele(list1, list2), 让list1改变之后, 再同时把list1, list2 和 remove_ele(list1, list2)返回的lista
    一起传递给format()函数拼接到字符串中,
    这样list1拼接到字符串中时就是改变后的内容了

    print(f'from {list1} remove {list2},result:{remove_ele(list1, list2)}')
    

    是按照从左到右的顺序先把list1和list2拼接到字符串中再执行remove_ele(list1, list2)
    这样list1拼接到字符串中时remove_ele(list1, list2)还没有执行, 所以拼接到字符串中的就是原本的内容

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 已采纳回答 7月6日
  • 赞助了问题酬金5元 7月2日
  • 创建了问题 7月2日