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代理抓取并验证使用多线程实现
May 03 Python
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
go语言计算两个时间的时间差方法
Mar 13 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
python实现倒计时小工具
Jul 29 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 Python
详解Golang如何实现支持随机删除元素的堆
Sep 23 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 strtotime 函数UNIX时间戳
2009/01/14 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
php远程下载类分享
2016/04/13 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
javascript解析json实例详解
2014/11/05 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
python3.0 字典key排序
2008/12/24 Python
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
python 遍历pd.Series的index和value
2019/11/26 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
Python加速程序运行的方法
2020/07/29 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
留学推荐信写作指南
2014/01/25 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
关于工作经历的证明书
2014/10/11 职场文书
python中的装饰器该如何使用
2021/06/18 Python