请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

Python这五个坑,80%你不知道(对的,五个你知道1个就达到一般水平了)

[复制链接]
查看: 23|回复: 0

2万

主题

2万

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
70839
发表于 2020-1-14 16:20 | 显示全部楼层 |阅读模式
1 含单个元素的元组

Python中有些函数的参数典范为元组,其内有1个元素,这样建立是毛病的:
  1. c = (5) # NO!
复制代码
它现实建立一个整型元素5,必必要在元素后加一个逗号:

[img=auto,auto]http://www.waysfocus.com/https://upload-images.jianshu.io/upload_images/20592807-832538b27dae91e1?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240[/img]
  1. c = (5,) # YES!
复制代码
2 默许参数设为空

含有默许参数的函数,假如典范为容器,且设备为空:
  1. def f(a,b=[]):  # NO!
  2.     print(b)
  3.     return b
  4. ret = f(1)
  5. ret.append(1)
  6. ret.append(2)
  7. # 当再挪用f(1)时,估计打印为 []
  8. f(1)
  9. # 可是却为 [1,2]
复制代码
这是可变典范的默许参数之坑,请务必设备此类默许参数为None:
  1. def f(a,b=None): # YES!
  2.     pass
复制代码
3 同享变量未绑定之坑

偶然想要多个函数同享一个全局变量,但却在某个函数内试图点窜它为部分变量:
  1. i = 1
  2. def f():
  3.     i+=1 #NO!
  4.    
  5. def g():
  6.     print(i)
复制代码
应当在f函数内表示声明i为global变量:
  1. i = 1
  2. def f():
  3.     global i # YES!
  4.     i+=1
复制代码
4 列表快速复制之坑

在python中*与列表操纵,实现快速元素复制:
  1. a = [1,3,5] * 3 # [1,3,5,1,3,5,1,3,5]
  2. a[0] = 10 # [10, 2, 3, 1, 2, 3, 1, 2, 3]
复制代码
假如列表元素为列表或字典等复合典范:
  1. a = [[1,3,5],[2,4]] * 3 # [[1, 3, 5], [2, 4], [1, 3, 5], [2, 4], [1, 3, 5], [2, 4]]
  2. a[0][0] = 10 #
复制代码
结果大要出乎你的料想,其他a[1[0]等也被点窜成10
  1. [[10, 3, 5], [2, 4], [10, 3, 5], [2, 4], [10, 3, 5], [2, 4]]
复制代码
这是由于*复制的复合工具都是浅援用,也就是说id(a[0])与id(a[2])门商标是相当的。假如想要实现深复制结果,这么做:
  1. a = [[] for _ in range(3)]
复制代码
5 列表删除之坑

删除一个列表中的元素,此元素大要在列表中反复屡次:
  1. def del_item(lst,e):
  2.     return [lst.remove(i) for i in e if i==e] # NO!
复制代码
考虑删除这个序列[1,3,3,3,5]中的元素3,结果发现只删除其中两个:
  1. del_item([1,3,3,3,5],3) # 结果:[1,3,5]
复制代码
切确做法:
  1. def del_item(lst,e):
  2.     d = dict(zip(range(len(lst)),lst)) # YES! 机关字典
  3.     return [v for k,v in d.items() if v!=e]
复制代码
以上就是5个常见的坑点,盼望看到这里的朋友能避开这些坑。

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 淄博新闻网-淄博日报 淄博晚报 淄博财经新报 掌中淄博 淄博专业新闻资讯发布网站 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表