python变量命名的7条建议


Posted in Python onJuly 04, 2019

前言

Quora 问答社区的一个开发者投票统计,程序员最大的难题是:如何命名(例如:给变量,类,函数等等),光是如何命名一项的选票几乎是其它八项的投票结果的总和。如何给变量命名,如何让它变得有意义成了程序员不可逾越的难题,这篇文章参考了 Clean Code ,提供7条命名建议,希望能在取名字的过程中给你带来一些帮助。

以下都是基于Python3.7语法

1、使用有意义而且可读的变量名

ymdstr = datetime.date.today().strftime("%y-%m-%d")

鬼知道 ymd 是什么?

current_date: str = datetime.date.today().strftime("%y-%m-%d")

看到 current_date,一眼就懂。

2、同类型的变量使用相同的词汇

这三个函数都是和用户相关的信息,却使用了三个名字

get_user_info()
get_client_data()
get_customer_record()

如果实体相同,你应该统一名字

get_user_info()
get_user_data()
get_user_record()

极好 因为 Python 是一门面向对象的语言,用一个类来实现更加合理,分别用实例属性、property 方法和实例方法来表示。

class User:
  info : str

  @property
  def data(self) -> dict:
    # ...

  def get_record(self) -> Union[Record, None]:
    # ...

3、使用可搜索的名字

大部分时间你都是在读代码而不是写代码,所以我们写的代码可读且可被搜索尤为重要,一个没有名字的变量无法帮助我们理解程序,也伤害了读者,记住:确保可搜索。

time.sleep(86400);

What the fuck, 上帝也不知道86400是个什么概念

# 在全局命名空间声明变量,一天有多少秒
SECONDS_IN_A_DAY = 60 * 60 * 24

time.sleep(SECONDS_IN_A_DAY)

清晰多了。

4、使用可自我描述的变量

address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$'
matches = re.match(city_zip_code_regex, address)

save_city_zip_code(matches[1], matches[2])

matches[1] 没有自我解释自己是谁的作用

一般

address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$'
matches = re.match(city_zip_code_regex, address)

city, zip_code = matches.groups()
save_city_zip_code(city, zip_code)

你应该看懂了, matches.groups() 自动解包成两个变量,分别是 city,zip_code

address = 'One Infinite Loop, Cupertino 95014'
city_zip_code_regex = r'^[^,\\]+[,\\\s]+(?P<city>.+?)\s*(?P<zip_code>\d{5})?$'
matches = re.match(city_zip_code_regex, address)

save_city_zip_code(matches['city'], matches['zip_code'])

5、 不要强迫读者猜测变量的意义,明了胜于晦涩

seq = ('Austin', 'New York', 'San Francisco')

for item in seq:
  do_stuff()
  do_some_other_stuff()
  # ...
  # Wait, what's `item` for again?
  dispatch(item)

seq 是什么?序列?什么序列呢?没人知道,只能继续往下看才知道。

locations = ('Austin', 'New York', 'San Francisco')

for location in locations:
  do_stuff()
  do_some_other_stuff()
  # ...
  dispatch(location)

用 locations 表示,一看就知道这是几个地区组成的元组

6、不要添加无谓的上下文

如果你的类名已经可以告诉了你什么,就不要在重复对变量名进行描述

class Car:
  car_make: str
  car_model: str
  car_color: str

感觉画蛇添足,如无必要,勿增实体。

class Car:
  make: str
  model: str
  color: str

7、使用默认参数代替短路运算和条件运算

def create_micro_brewery(name):
  name = "Hipster Brew Co." if name is None else name
  slug = hashlib.sha1(name.encode()).hexdigest()
  # etc.

def create_micro_brewery(name: str = "Hipster Brew Co."):
  slug = hashlib.sha1(name.encode()).hexdigest()
  # etc.

这个应该能理解吧,既然函数里面需要对没有参数的变量做处理,为啥不在定义的时候指定它呢?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python strip lstrip rstrip使用方法
Sep 06 Python
跟老齐学Python之做一个小游戏
Sep 28 Python
Python实现的递归神经网络简单示例
Aug 11 Python
浅谈python常用程序算法
Mar 22 Python
python实现连连看辅助(图像识别)
Mar 25 Python
pandas如何处理缺失值
Jul 31 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
如何用Python绘制3D柱形图
Sep 16 Python
Django项目创建及管理实现流程详解
Oct 13 Python
Pyqt助手安装PyQt5帮助文档过程图解
Nov 20 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 #Python
python批量修改图片尺寸,并保存指定路径的实现方法
Jul 04 #Python
python代理工具mitmproxy使用指南
Jul 04 #Python
Python批量修改图片分辨率的实例代码
Jul 04 #Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 #Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 #Python
python中比较两个列表的实例方法
Jul 04 #Python
You might like
PHP新手上路(九)
2006/10/09 PHP
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
PHP反射学习入门示例
2019/06/14 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
pow在python中的含义及用法
2019/07/11 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
大专自我鉴定范文
2013/10/23 职场文书
党员年终民主评议的自我评价
2013/11/05 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
白银帝国观后感
2015/06/17 职场文书