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 相关文章推荐
一个检测OpenSSL心脏出血漏洞的Python脚本分享
Apr 10 Python
windows下python连接oracle数据库
Jun 07 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
Python变量访问权限控制详解
Jun 29 Python
Python何时应该使用Lambda函数
Jul 02 Python
Python 画出来六维图
Jul 26 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
Jan 15 Python
详解python的异常捕获
Mar 03 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
DC动漫人物排行
2020/03/03 欧美动漫
php 无限级缓存的类的扩展
2009/03/16 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
PHPUnit PHP测试框架安装方法
2011/03/23 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
python脚本监控docker容器
2016/04/27 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
基于Python实现扑克牌面试题
2019/12/11 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
python实现从ftp服务器下载文件
2020/03/03 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
个人务虚会发言材料
2014/10/20 职场文书
社区母亲节活动总结
2015/02/10 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle