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版的文曲星猜数字游戏代码
Sep 02 Python
Python入门篇之条件、循环
Oct 17 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
浅谈Python中数据解析
May 05 Python
在Python的Django框架中生成CSV文件的方法
Jul 22 Python
Python模块结构与布局操作方法实例分析
Jul 24 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 Python
python命名空间(namespace)简单介绍
Aug 10 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
Python如何在bool函数中取值
Sep 21 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
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
Javascript this指针
2009/07/30 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
layui表格数据重载
2019/07/27 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
详解python的四种内置数据结构
2019/03/19 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
python下载的库包存放路径
2020/07/27 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
音乐专业应届生教师求职信
2013/11/04 职场文书
学生个人的自我评价分享
2013/11/05 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
幼儿园家长寄语
2014/04/02 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
2015年国庆节慰问信
2015/03/23 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android