编程语言
首页 > 编程语言> > 小白学Python(编码习惯)

小白学Python(编码习惯)

作者:互联网

  

IDE

  好IDE战斗力陡增,不过在刚开始学习Python的时候建议用Linux,在命令行手打,缩进会让你变成一种习惯的。 个人推荐IDE有SublimePycharm不想买可以下载破解版的,Pycharm2017年激活码

Pycharm常用快捷键:

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 + / 行注释/取消行注释

Python

基本语法

推荐看下
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)

导入

导入总应该放在文件顶部, 位于模块注释和文档字符串之后, 模块全局变量和常量之前.
应该写全模块的完整包路径
应该根据每个模块的完整包路径按字典序排序
应该明确导入使用的对象,避免使用*

Django

沙盒

Virtualenv 对于 Python 项目来说是必须的。它提供一个隔离不同 Python 运行环境的方法。典型的, 我们在 /opt/webapps/ 部署生产环境站点,在 ~/webapps/ 目录部署我们的开发环境站点。每个 project 有它自己的 virtualenv,virtualenv 还充当 project 所有相关代码的根目录。

模版

为了尽量标准化 Django 模板区块 (block) 名称, 我建议通常情况下使用以下区块名称.

{% block title %}

这个区块用来定义页面的标题. 你的 base.html 模板很可能要在这个 tag 之外定义 站点名字 (Site’s name) (即便使用了 Sites 框架), 以便能够放在所有页面中.

{% block extra_head %}

我认为这是个非常有用的区块, 很多人已经以某种方式在使用了. 很多页面经常需要在 HTML 文档头添加些信息, 比如 RSS 源, Javascript, CSS, 以及别的应该放在文档头的信息. 你可以, 也很可能将会, 定义另外专门的区块 (比如前面的 title 区块) 来添加文档头的其它部分的信息.

{% block body %}

这个 tag 用来包含页面的整个 body 部分. 这使得你在 app 中创建的页面 能够替换整个页面内容, 不仅仅是正文内容. 这种做法虽不常见, 但当你需要时, 它确实是一个非常方便的 tag. 你可能还没注意到, 我一直尽可能的使 tag 名字和 HTML 标签名称保持一致.

{% block menu %}

你的菜单 (导航栏) 应该包含在这个区块中. 它是针对站点级的导航, 不是 每个页面专属的导航菜单.

{% block content %}

这个区块用来放置页面正文内容. 任何页面正文内容都可能不一样. 它不 包含任何站点导航, 信息头, 页脚, 或其它任何属于 base 模板的东东.

{% block content_title %}

用来指定 content 区块的 “title”. 比如 blog 的标题. 也可以用来 包含 content 内的导航 (译注: 比如提纲), 或其它类似的东东. 大致都是些 页面中并非主要内容的东东. 我不知道这个区块是否应该放到 content tag 内, 并且对应于前面建议的 content tag, 是不是还需要一个 main_content 区块.

{% block header %} {% block footer %}

任何每个页面都可能修改的文本区域的页面和页脚.

{% block body_id %} {% block body_class %}

用来设置 HTML 文档 body 标签的 class 或 id 属性. 在设置样式或其它属性时 非常有用.

{% block [section]_menu %} {% block page_menu %}

这是对应于之前建议的 menu 区块. 用来导航一个章节或页面.

URL

每个正则表达式前面的 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是在数据保存后发出信号,此时接收信号清理数据。

未完待续

标签:编码,name,Ctrl,Python,空格,小白学,区块,block,页面
来源: https://blog.51cto.com/u_12768449/2771642