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 解析XML文件
Apr 15 Python
Python高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
python的exec、eval使用分析
Dec 11 Python
python 编写简单网页服务器的实例
Jun 01 Python
Django中使用Celery的教程详解
Aug 24 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
python命令行工具Click快速掌握
Jul 04 Python
python实现动态数组的示例代码
Jul 15 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
python元组打包和解包过程详解
Aug 02 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
dedecms系统常用术语汇总
2007/04/03 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
php字符串操作常见问题小结
2016/10/11 PHP
jquery 回车事件实现代码
2011/08/23 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python中datetime常用时间处理方法
2015/06/15 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
网上书店创业计划书
2014/01/12 职场文书
服装促销活动方案
2014/02/23 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
三方合作协议书范本
2014/04/18 职场文书
信息工作经验交流材料
2014/05/28 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
HTML常用标签超详细整理
2022/03/19 HTML / CSS
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android