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 相关文章推荐
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
python爬虫之百度API调用方法
Jun 11 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
Python操作Excel插入删除行的方法
Dec 10 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
Dec 14 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
Python并发爬虫常用实现方法解析
Nov 19 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php函数与传递参数实例分析
2014/11/15 PHP
javascript的事件描述
2006/09/08 Javascript
JS判定是否原生方法
2013/07/22 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python深入学习之内存管理
2014/08/31 Python
python使用turtle绘制分形树
2018/06/22 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
小学五一劳动节活动总结
2015/02/09 职场文书
高中政治教师教学反思
2016/02/23 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python