- Python 禅道
- 代码风格: 提高可读性
- PEP 8: Python 代码风格指南
- 空格(行)使用 (1)
- 空格(行)使用 (2)
- 命名
- 较长代码行
- 较长字符串
- 复合语句
- 字符串文档 & 注释
- 交换变量
- 更多关于 Tuples
- 关于 "_"
- 创建String: 从列表中创建
- 尽可能的使用
- 字典中的 get 函数
- 字典中的 setdefault 函数 (1)
- 字典中的 setdefault 函数 (2)
- defaultdict
- 创建 & 分割字典
- 判断 True 值
- True 值
- 索引 & 项 (1)
- 索引 & 项 (2): enumerate
- 默认参数值
- 列表理解
- 生成器表达式 (1)
- 生成器表达式 (2)
- 排序
- 使用 DSU *排序
- 使用 Key 排序
- 生成器
- 生成器示例
- 从文件中读取数据行
- try/except 示例
- 导入(Importing)
- 模块 & 脚本
- 模块结构
- 命令行处理
- 简单比复杂好
- 不要重新发明轮子
- 使用 4 个空格缩进。
- 不要使用制表符。
- 不要将制表符和空格混合使用。
- IDEL和Emacs的Python的都支持 spaces模式。
- 每个函数之间应该有一个空行。
- 每一个 Class 之间应该有两个空行。
- 在使用 字典(dict), 列表(list), 元组(tuple), 参数(argument)列表时, 应在 "," 前添加一个空格, 并且使用字典(dict)时,在 ":" 号后添加空格,而不是在前面添加。
- 在括号之前或参数之前不添加空格。
- 在文档注释中前后应该没有空格。
Python代码
- def make_squares(key, value=0):
- """Return a dictionary and a list..."""
- d = {key: value}
- l = [key, value]
- return d, l
- joined_lower 可以是 函数名, 方法名, 属性名
- joined_lower or ALL_CAPS 是常量
- StudlyCaps 类名
- camelCase 只有在预先制定好的命名规范使用
- 属性: interface, _internal, __private
- 但尽量避免__private形式。下面两个链接解释了 为什么python中没有 private声明?
Python代码
- def __init__(self, first, second, third,
- fourth, fifth, sixth):
- output = (first + second + third
- + fourth + fifth + sixth)
Python代码
- VeryLong.left_hand_side \
- = even_longer.right_hand_side()
Python代码
- >>> print 'o' 'n' "e"
- one
Python代码
- >>> print 't' r'\/\/' """o"""
- t\/\/o
Python代码
- >>> a = 'three'
- >>> b = 'four'
- >>> a b
- File "<stdin>", line 1
- a b
- ^
- SyntaxError: invalid syntax
Python代码
- if foo == 'blah':
- do_something()
- do_one()
- do_two()
- do_three()
Python代码
- if foo == 'blah': do_something()
- do_one(); do_two(); do_three()
Python代码
- # !!! BUG: ...
- # !!! FIX: This is a hack
- # ??? Why is this here?
Java代码
- temp = a
- a = b
- b = temp
Python代码
- b, a = a, b
- 首先,逗号是元组构造语法。
- 等号的右边是定义一个元组 (tuple packing).
- 其左边为一个目标元组 (tuple unpacking)).
Python代码
- >>> info =['David', 'Pythonista', '+1250']
- >>> name, title, phone = info
- >>> name
- 'Davids'
- >>> title
- 'Pythonista'
- >>> phone
- '+1250'
Python代码
- >>> people = [info, ['Guido', 'BDFL', 'unlisted']]
- >>> for (name, title, phone) in people:
- ... print name, phone
- ...
- David +1250
- Guido unlisted
Python代码
- >>> david, (gname, gtitle, gphone) = people
- >>> gname
- 'Guido'
- >>> gtitle
- 'BDFL'
- >>> gphone
- 'unlisted'
- >>> david
- ['David', 'Pythonista', '+1250']
Python代码
- >>> 1,
- (1,)
Python代码
- >>> (1,)
- (1,)
Python代码
- >>> (1)
- 1
Python代码
- >>> ()
- ()
- >>> tuple()
- ()
Python代码
- >>> value = 1,
- >>> value # is a tuple, not a int
- (1,)
Python代码
- >>> 1 + 1
- 2
- >>> _
- 2
Python代码
- >>> import math
- >>> math.pi / 3
- 1.0471975511965976
- >>> angle = _
- >>> math.cos(angle)
- 0.50000000000000011
- >>> _
- 0.50000000000000011
Python代码
- colors = ['red', 'blue', 'green', 'yellow']
Python代码
- result = ''
- for s in colors:
- result += s
Python代码
- result = ''.join(colors)
Python代码
- result = ''.join(fn(i) for i in items)
Python代码
- for key in d:
- print key
- 使用 in 一般情况下是非常快的。
- 这种方式也适用于其它的容器对象(如 list,tuple 和 set)。
- in 是操作符(正如上面所看到的)。
Python代码
- for key in d.keys():
- print key
Python代码
- # do this:
- if key in d:
- ...do something with d[key]
- # not this:
- if d.has_key(key):
- ...do something with d[key]
Python代码
- navs = {}
- for (portfolio, equity, position) in data:
- if portfolio not in navs:
- navs[portfolio] = 0
- navs[portfolio] += position * prices[equity]
Python代码
- navs = {}
- for (portfolio, equity, position) in data:
- navs[portfolio] = (navs.get(portfolio, 0)
- + position * prices[equity])
Python代码
- equities = {}
- for (portfolio, equity) in data:
- if portfolio in equities:
- equities[portfolio].append(equity)
- else:
- equities[portfolio] = [equity]
Python代码
- equities = {}
- for (portfolio, equity) in data:
- equities.setdefault(portfolio, []).append(
- equity)
Python代码
- avs = {}
- for (portfolio, equity, position) in data:
- navs.setdefault(portfolio, 0)
- navs[portfolio] += position * prices[equity]
Python代码
- given = ['John', 'Eric', 'Terry', 'Michael']
- family = ['Cleese', 'Idle', 'Gilliam', 'Palin']
- pythons = dict(zip(given, family))
- >>> pprint.pprint(pythons)
- { 'John': 'Cleese',
- 'Michael': 'Palin',
- 'Eric': 'Idle',
- 'Terry': 'Gilliam'}
Python代码
- >>> pythons.keys()
- ['John', 'Michael', 'Eric', 'Terry']
- >>> pythons.values()
- ['Cleese', 'Palin', 'Idle', 'Gilliam']
Python代码
- >>> items = 'zero one two three'.split()
- >>> print items
- ['zero', 'one', 'two', 'three']
Python代码
- - or -
- i = 0
- for item in items: for i in range(len(items)):
- print i, item print i, items[i]
- i += 1
Python代码
- >>> print list(enumerate(items))
- [(0, 'zero'), (1, 'one'), (2, 'two'), (3, 'three')]
Python代码
- for (index, item) in enumerate(items):
- print index, item
Python代码
- # compare: # compare:
- index = 0 for i in range(len(items)):
- for item in items: print i, items[i]
- print index, item
- index += 1
Python代码
- >>> enumerate(items)
- <enumerate object at 0x011EA1C0>
- >>> e = enumerate(items)
- >>> e.next()
- (0, 'zero')
- >>> e.next()
- (1, 'one')
- >>> e.next()
- (2, 'two')
- >>> e.next()
- (3, 'three')
- >>> e.next()
- Traceback (most recent call last):
- File "<stdin>", line 1, in ?
- StopIteration
Python代码
- def bad_append(new_item, a_list=[]):
- a_list.append(new_item)
- return a_list
Python代码
- >>> print bad_append('one')
- ['one']
- >>> print bad_append('two')
- ['one', 'two']
Python代码
- def good_append(new_item, a_list=None):
- if a_list is None:
- a_list = []
- a_list.append(new_item)
- return a_list
Python代码
- # do this: # not this:
- if x: if x == True:
- pass pass
Python代码
- # do this: # not this:
- if items: if len(items) != 0:
- pass pass
- # and definitely not this:
- if items != []:
- pass
False | True |
False (== 0) | True (== 1) |
"" (empty string) | any string but "" (" ", "anything") |
0, 0.0 | any number but 0 (1, 0.1, -1, 3.14) |
[], (), {}, set() | any non-empty container ([0], (None,), ['']) |
None | almost any object that's not explicitly False |
- .
- 检查Python的包索引 (the "Cheese Shop"):
原文:[urlhttp://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html][url]
(学好英文去看PEP8)