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

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日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么