# Python 技巧

# Python 技巧
  
  
  
 ##### Github地址:[https://github.com/vimiix/python_tricks](https://github.com/vimiix/python_tricks)
 ##### Slide链接:[http://vimiix.com/python_tricks](http://vimiix.com/python_tricks)
  
 ```
 Vimiix
 2017.12.20
 ```
  
  
  
 ---
 class: inverse
 ## 多种方法来验证多条件语句
  
 ```
 x, y, z = 0, 1, 0
  
 if x == 1 or y == 1 or z == 1:
 print('passed')
  
 if 1 in (x, y, z):
 print('passed')
  
 # These only test for truthiness:
 if x or y or z:
 print('passed')
  
 if any((x, y, z)):
 print('passed')
  
 ```
 ---
 class: inverse
 ## 函数参数解包
  
 ```
 # Function argument unpacking
  
 def myfunc(x, y, z):
 print(x, y, z)
  
 tuple_vec = (1, 0, 1)
 dict_vec = {'x': 1, 'y': 0, 'z': 1}
  
 myfunc(*tuple_vec)
 # 1, 0, 1
  
 myfunc(**dict_vec)
 # 1, 0, 1
  
 ```
 ---
 class: inverse
 ## 使用timeit模块来测试函数执行效率
  
 ```
 import timeit
  
 rt = timeit.timeit('"-".join(str(n) for n in range(100))',
 number=10000)
 print(rt)
 # 0.252703905106
  
 rt = timeit.timeit('"-".join([str(n) for n in range(100)])',
 number=10000)
 print(rt)
 # 0.234980106354
  
 rt = timeit.timeit('"-".join(map(str, range(100)))',
 number=10000)
 print(rt)
 # 0.152318954468
  
 ```
 ---
 class: inverse
 ## 合并两个字典在不同版本中的写法
  
 ```
 x = {'a': 1, 'b': 2}
 y = {'b': 3, 'c': 4}
  
 # Python 3.5+
 z = {**x, **y}
 print(z)
 # {'c': 4, 'a': 1, 'b': 3}
  
 # Python 2.x
 z = dict(x, **y)
 print(z)
 # {'a': 1, 'c': 4, 'b': 3}
 ```
 ---
 class: inverse
 ## 巧用json模块更舒服的打印字典
  
 ```
 # 标准打印出来,对于阅读不是很友好
 my_mapping = {'a': 23, 'b': 42, 'c': 0xc0ffee}
 print(my_mapping)
 # {'b': 42, 'c': 12648430. 'a': 23} # đŸ˜ž
  
 # 使用json可以更好的展示
 import json
 print(json.dumps(my_mapping, indent=4, sort_keys=True))
 # {
 # "a": 23,
 # "b": 42,
 # "c": 12648430
 # }
  
 ```
 ---
 class: inverse
 ## 通过字典的值(value)排序输出
  
 ```
 # How to sort a Python dict by value
  
 xs = {'a': 4, 'b': 3, 'c': 2, 'd': 1}
  
 print(sorted(xs.items(), key=lambda x: x[1]))
 # [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
  
 # Or:
  
 import operator
 print(sorted(xs.items(), key=operator.itemgetter(1)))
 # [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
 ```
 ---
 class: inverse
 ## 字典的get用法和默认值
  
 ```
 name_for_userid = {
 382: "Alice",
 590: "Bob",
 951: "Dilbert",
 }
  
 def greeting(userid):
 return "Hi %s!" % name_for_userid.get(userid, "there")
  
 print(greeting(382))
 # "Hi Alice!"
  
 print(greeting(2333333))
 # "Hi there!"
 ```
 ---
 class: inverse
 ## 用namedtuple来代替简单的类
  
 ```
 from collections import namedtuple
 Car = namedtuple('Car', 'color mileage')
  
 # 实例化一个Car,并像类一样使用
 my_car = Car('red', 3812.4)
 print(my_car.color)
 # 'red'
 print(my_car.mileage)
 # 3812.4
  
 print(my_car)
 # Car(color='red' , mileage=3812.4)
  
 # 就像元组一样,namedtuple也不可更改:
 my_car.color = 'blue'
 # AttributeError: "can't set attribute"
 ```
 ---
 class: center, middle, inverse
 ## 持续更新中...
 ---
 class: middle, inverse
 ## 联系方式
 ###
  
 - Website: http://vimiix.com
  
 - Twitter: http://twitter.com/_vimiix
  
 - GitHub: http://github.com/vimiix
  
 - Email: [i@vimiix.com](mailto:i@vimiix.com)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值