值得收藏,Python 开发中的高级技巧
Python开发中有哪些高级技巧?这是知乎上一个问题,我总结了一些常见的技巧在这里,可能谈不上多高级,但掌握这些至少可以让你的代码看起来Pythonic一点。如果你还在按照类C语言的那套风格来写的话,在codereview恐怕会要被吐槽了。
列表推导式
>>>chars=[cforcin'python'] >>>chars ['p','y','t','h','o','n']
字典推导式
>>>dict1={'a':1,'b':2,'c':3,'d':4,'e':5} >>>double_dict1={k:v*2for(k,v)indict1.items()} >>>double_dict1 {'a':2,'b':4,'c':6,'d':8,'e':10}
集合推导式
>>>set1={1,2,3,4} >>>double_set={i*2foriinset1} >>>double_set {8,2,4,6}
合并字典
>>>x={'a':1,'b':2} >>>y={'c':3,'d':4} >>>z={**x,**y} >>>z {'a':1,'b':2,'c':3,'d':4}
复制列表
>>>nums=[1,2,3] >>>nums[::] [1,2,3] >>>copy_nums=nums[::] >>>copy_nums [1,2,3]
反转列表
>>>reverse_nums=nums[::-1] >>>reverse_nums [3,2,1] PACKING/UNPACKING
变量交换
>>>a,b=1,2 >>>a,b=b,a >>>a 2 >>>b 1
高级拆包
>>>a,*b=1,2,3 >>>a 1 >>>b [2,3]
或者
>>>a,*b,c=1,2,3,4,5 >>>a 1 >>>b [2,3,4] >>>c 5
函数返回多个值(其实是自动packing成元组)然后unpacking赋值给4个变量
>>>deff(): ...return1,2,3,4 ... >>>a,b,c,d=f() >>>a 1 >>>d 4
列表合并成字符串
>>>"".join(["I","Love","Python"]) 'ILovePython'
链式比较
>>>ifa>2anda<5: ...pass ... >>>if2>> 0 0 1 1 2 2
in代替or
>>>ifx==1orx==2orx==3: ...pass ... >>>ifxin(1,2,3): ...pass
字典代替多个ifelse
deffun(x): ifx=='a': return1 elifx=='b': return2 else: returnNone deffun(x): return{"a":1,"b":2}.get(x)
有下标索引的枚举
>>>fori,einenumerate(["a","b","c"]): ...print(i,e) ... 0a 1b 2c
生成器
注意区分列表推导式,生成器效率更高
>>>g=(i**2foriinrange(5)) >>>gat0x10881e518> >>>foriing: ...print(i) ... 0 1 4 9 16
默认字典defaultdict
>>>d=dict() >>>d['nums'] KeyError:'nums' >>> >>>fromcollectionsimportdefaultdict >>>d=defaultdict(list) >>>d["nums"] []
字符串格式化
>>>lang='python' >>>f'{lang}ismostpopularlanguageintheworld' 'pythonismostpopularlanguageintheworld'
列表中出现次数最多的元素
>>>nums=[1,2,3,3] >>>max(set(nums),key=nums.count) 3
或者
fromcollectionsimportCounter >>>Counter(nums).most_common()[0][0] 3
读写文件
>>>withopen("test.txt","w")asf: ...f.writelines("hello")
判断对象类型,可指定多个类型
>>>isinstance(a,(int,str)) True
类似的还有字符串的startswith,endswith
>>>"http://foofish.net".startswith(('http','https')) True >>>"https://foofish.net".startswith(('http','https')) True __str__与__repr__区别 >>>str(datetime.now()) '2018-11-2000:31:54.839605' >>>repr(datetime.now()) 'datetime.datetime(2018,11,20,0,32,0,579521)'
前者对人友好,可读性更强,后者对计算机友好,支持obj==eval(repr(obj))
使用装饰器
defmakebold(f): returnlambda:""+f()+"" defmakeitalic(f): returnlambda:""+f()+"" @makebold @makeitalic defsay(): return"Hello" >>>say() Hello
不使用装饰器,可读性非常差
defsay(): return"Hello" >>>makebold(makeitalic(say))() Hello
总结
以上所述是小编给大家介绍的Python开发中的高级技巧,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!