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中使用SAX解析xml实例
Nov 21 Python
python通过wxPython打开一个音频文件并播放的方法
Mar 25 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
python写入并获取剪切板内容的实例
May 31 Python
python3判断url链接是否为404的方法
Aug 10 Python
网易有道2017内推编程题 洗牌(python)
Jun 19 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
python实现飞船大战
Apr 24 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
Python标准库pathlib操作目录和文件
Nov 20 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截取后台登陆密码的代码
2012/05/05 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
Javascript常考语句107条收集
2010/03/09 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
利用python在excel中画图的实现方法
2020/03/17 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
大二学期个人自我评价
2014/01/13 职场文书
个人优缺点自我评价
2014/01/27 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
单位婚育证明范本
2014/11/21 职场文书
离婚协议书范本
2015/01/26 职场文书
出租车拒载检讨书
2015/01/28 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python