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获得时间的实例说明
Mar 25 Python
python通过shutil实现快速文件复制的方法
Mar 14 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
Python网络编程之TCP与UDP协议套接字用法示例
Feb 02 Python
python机器学习之贝叶斯分类
Mar 26 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Python寻找路径和查找文件路径的示例
Jul 10 Python
利用python-docx模块写批量生日邀请函
Aug 26 Python
python实现画出e指数函数的图像
Nov 21 Python
django列表筛选功能的实现代码
Mar 27 Python
pycharm永久激活超详细教程
Oct 29 Python
Python中使用Lambda函数的5种用法
Apr 01 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文件读写操作之文件写入代码
2011/01/13 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
vue模式history下在iis中配置流程
2019/04/17 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python文件与目录操作实例详解
2016/02/22 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
python实现海螺图片的方法示例
2019/05/12 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
python爬虫实现获取下一页代码
2020/03/13 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
a标签下载链接的简单实现
2016/09/13 HTML / CSS
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
高级工程师岗位职责
2013/12/15 职场文书
致接力运动员广播稿
2014/02/17 职场文书
世界文化遗产导游词
2015/02/13 职场文书
任命通知范文
2015/04/21 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle