好IDE战斗力陡增,不过在刚开始学习Python的时候建议用Linux,在命令行手打,缩进会让你变成一种习惯的。 个人推荐IDE有Sublime和Pycharm不想买可以下载破解版的,Pycharm2017年激活码,
Ctrl + Alt + L 代码格式化
Ctrl + Alt + I 自动缩进
Tab / Shift + Tab 缩进、不缩进当前行(可多行)
Ctrl + D 复制选定的区域或行
Ctrl + Y 删除选定的行
Ctrl + Shift + R 全局替换
Ctrl + R 替换
Ctrl + Shift + F 或者连续2次敲击shift 全局查找
Ctrl + F 查找
Ctrl + / 行注释/取消行注释
推荐看下
Google 开源项目风格指南(中文版)
简版 风格规范
每行不超过80个字符
以下情况除外:
长的导入模块语句
注释里的URL
多利用(),[],{}来进行换行,将代码控制在一个屏幕内(能用键盘完成的事情经量少使用鼠标)
x = ("这是一个非常长非常长非常长非常长 " "非常长非常长非常长非常长非常长非常长的字符串") obj = {'name': 'lll', 'age': '12', 'gender': u'男'}
推荐使用4个空格来缩进代码
绝对不要用tab, 也不要tab和空格混用.切记将IDE的tab调为4个空格
函数间用1行间隔
类间用2行间隔
明显功能模块间使用空行隔开
不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾).
在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not).
1.逗号分隔 逗号后加空格 a = [1, 2, 3, 4] 2.赋值语句两边加空格 a = u'空格' 3.字典冒号后加空格 d = {'key': 'value'} 4.当'='用于指示关键字参数或默认参数值时, 不要在其两侧使用空格 def complex(real, imag=0.0): return magic(r=real, i=imag)
类、函数注释在类名和函数名下使用三双引号进行注释
单行注释使用井号,井号与注释信息间使用空格 例:# 注释信息
需要后期完成的注释使用#TODO进行标识
""" Created on 2017-4-17 @author: jj 公共函数 文件应该注明 开发者、开发时间、文件功能描述 """ def example(A, B): """ 公共函数需注明代码用途, 参数类型,返回形式 :param A: {} :param B: [] :return: Bool """ # TODO 完成功能信息 by admin pass
如果一个类不继承自其它类(基类), 就显式的从object继承. 嵌套类也一样.
class SampleClass(object): pass
避免在循环中用+和+=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间.
字符串拼接
# + 操作符连接 x = a + b # % 替换 x = '%s, %s!' % (imperative, expletive) x = 'name: %s; score: %d' % (name, n) # 需判断变量类型 x = "%.2f" % a # 保留两位小数(也可以 使用decimal.Decimal类型, decimal是Python中满足高精度计算的一种数据类型,使用进需要导入decimal包) # format 替换 x = 'name: {}; score: {}'.format(name, n) x = 'name: {name}; score: {score}'.format(name=name, score=n) # join 可以实现以一个字符串拼接字符元素列表 # 遇到循环拼接字符串,尽量将拼接内容存入列表中,使用"".join(datalist)进行拼接 data = “ and ”.join(['name'='admin', 'age'='12', 'gender'=u'男']) print data # name=admin and age=12 and gender=男
推荐使用 “with”语句 以管理文件:
with 可以自动关闭文件、线程锁的自动获取和释放等
with open("hello.txt") as hello_file: for line in hello_file: print line
1.对类名使用大写字母开头的单词(如CapWords, 即Pascal风格)
2.对于视图类名和功能类名进行区分,在视图类名追加View
3.模块名应该用小写加下划线的方式(如lower_with_under.py)
4.函数名应该用小写加下划线的方式(如get_user)
5.宏定义应该用大写加下划线的方式(如LIMIT)
6.避免双下划线开头并结尾的名称(Python保留, 例如_init_)
7.避免使用关键字(如 list)
导入总应该放在文件顶部, 位于模块注释和文档字符串之后, 模块全局变量和常量之前.
应该写全模块的完整包路径
应该根据每个模块的完整包路径按字典序排序
应该明确导入使用的对象,避免使用*
Virtualenv 对于 Python 项目来说是必须的。它提供一个隔离不同 Python 运行环境的方法。典型的, 我们在 /opt/webapps/ 部署生产环境站点,在 ~/webapps/ 目录部署我们的开发环境站点。每个 project 有它自己的 virtualenv,virtualenv 还充当 project 所有相关代码的根目录。
为了尽量标准化 Django 模板区块 (block) 名称, 我建议通常情况下使用以下区块名称.
这个区块用来定义页面的标题. 你的 base.html 模板很可能要在这个 tag 之外定义 站点名字 (Site’s name) (即便使用了 Sites 框架), 以便能够放在所有页面中.
我认为这是个非常有用的区块, 很多人已经以某种方式在使用了. 很多页面经常需要在 HTML 文档头添加些信息, 比如 RSS 源, Javascript, CSS, 以及别的应该放在文档头的信息. 你可以, 也很可能将会, 定义另外专门的区块 (比如前面的 title 区块) 来添加文档头的其它部分的信息.
这个 tag 用来包含页面的整个 body 部分. 这使得你在 app 中创建的页面 能够替换整个页面内容, 不仅仅是正文内容. 这种做法虽不常见, 但当你需要时, 它确实是一个非常方便的 tag. 你可能还没注意到, 我一直尽可能的使 tag 名字和 HTML 标签名称保持一致.
你的菜单 (导航栏) 应该包含在这个区块中. 它是针对站点级的导航, 不是 每个页面专属的导航菜单.
这个区块用来放置页面正文内容. 任何页面正文内容都可能不一样. 它不 包含任何站点导航, 信息头, 页脚, 或其它任何属于 base 模板的东东.
用来指定 content 区块的 “title”. 比如 blog 的标题. 也可以用来 包含 content 内的导航 (译注: 比如提纲), 或其它类似的东东. 大致都是些 页面中并非主要内容的东东. 我不知道这个区块是否应该放到 content tag 内, 并且对应于前面建议的 content tag, 是不是还需要一个 main_content 区块.
任何每个页面都可能修改的文本区域的页面和页脚.
用来设置 HTML 文档 body 标签的 class 或 id 属性. 在设置样式或其它属性时 非常有用.
这是对应于之前建议的 menu 区块. 用来导航一个章节或页面.
每个正则表达式前面的 r 是可选的,但是建议加上,表示该字符串中任何字符都不应该转义。
不论路由中匹配的是数字还是字符串,最终参数取出的是字符串。
from django.conf.urls import url urlpatterns = [ url(r'^(?P<username>\w+)/blog/', views.blog), url(r'articles/(?P<year>[0-9]{4})/', views.year_archive), # 接受一个名为year参数,数值为0-9长度为4的数字。 url(r'comments/(?:page-(?P<page_number>\d+)/)?$', comments), # 接受一个名为page_number参数,数值为数字。 ]
from django.db.models.signals import pre_save, post_save, pre_delete, post_delete, m2m_changed
from django.core.signals import request_started, request_finished, got_request_exception
可以实现异步的操作
比如对请求数据加缓存需要考虑:1.缓存数据的时效;2.缓存数据修改后数据清理。数据清理就可以使用信号来完成,post_save是在数据保存后发出信号,此时接收信号清理数据。