# 一般做法
i = 0
for item in iterable:
print i, item
i += 1
# 较好做法
for i, item in enumerate(iterable): # 默认i从0开始
print i, item
# 或者
for i, item in enumerate(iterable, 1): # 指定从1开始
print i, item
- 三元运算
三元运算是if-else语句的快捷操作,即条件运算。可以让代码更紧凑
x, y = 25, 55
small = x if x < y else y
-
- python中判断对象是否相等的方法区别
python中对象包含3个要素:id、type、value
id 用来标识唯一对象;type标识对象类型;value设置对象值
- is 通过id来判断,是否为同一对象
- == 通过值来判断,即a对象的值是否和b对象值一样。默认调用 eq方法
- 隐藏特性 --函数unpack
便于多参调用时,无需关心参数顺序
def foo(x, y):
print x, y
alist = [1, 2]
adict = {'x': 1, 'y': 2}
foo(*alist) # 1, 2
foo(**adict) # 1, 2
x = 3
1 < x < 5 # True
4 > x >= 3 # True
adict = {}
adict.get('a', 'default') # 建值'a'不存在时返回默认值'default'
# 常用格式化方式
print("Hello %(name)s." % {'name': 'Taitan"})
# 更新的格式化方式
print("Hello {name}.".format(name="Taitan"))
- 隐藏特性 --切片操作的步长参数
可用-1 来反转链表,生成一个新的列表
# 正常切片
a = [1, 2, 3, 4, 5]
a[::2] # [1, 3, 5]
a[::-1] # [5, 4, 3, 2, 1],反转
# a[start_index: end_index, step]
# 例子:
set_1 = {1, 2, 3}
# 或者
set_2 = set([1, 2, 3])
isinstance(1, (float, int)) #判断是否为float或int类型
- 装饰器
一个为已有函数或类添加功能的方法,而不改变原函数或类的行为
-
- 上下文管理器(ContextLib)
上下文管理器涉及到两个方法。
-
enter方法: 当执行流进入with代码块时,enter方法将执行。并且它将返回一个可供上下文使用的对象。
-
exit方法:当执行流离开with代码块时,exit方法被调用,它将清理被使用的资源。
# 例子1:
import time
class demo:
def __init__(self, label):
self.label = label
def __enter__(self):
self.start = time.time()
def __exit__(self, exc_ty, exc_val,
exc_tb):
end = time.time()
print('{}: {}'.format(self.label, end - self.start))
with demo('counting'):
n = 10000000
while n > 0:
n -= 1
# 例子2,利用contextlib.contextmanager装饰器:
from contextlib import contextmanager
import time
@contextmanager
def demo(label):
start = time.time()
try:
yield
finally:
end = time.time()
print('{}: {}'.format(label, end - start))
with demo('counting'):
n = 10000000
while n > 0:
n -= 1
参考:59个Python使用技巧,从此你的Python与众不同