小白学Python(编码习惯)
2021/5/12 20:27:11
本文主要是介绍小白学Python(编码习惯),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
IDE
好IDE战斗力陡增,不过在刚开始学习Python的时候建议用Linux,在命令行手打,缩进会让你变成一种习惯的。 个人推荐IDE有Sublime和Pycharm不想买可以下载破解版的,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是在数据保存后发出信号,此时接收信号清理数据。
未完待续
这篇关于小白学Python(编码习惯)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南