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 08 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
python3爬取各类天气信息
Feb 24 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
python实现银联支付和支付宝支付接入
May 07 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
python自定义函数def的应用详解
Jun 03 Python
python实现学生成绩测评系统
Jun 22 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 中的4种标记风格介绍
2012/05/10 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
使用Python中的cookielib模拟登录网站
2015/04/09 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
django-初始配置(纯手写)详解
2019/07/30 Python
python中append实例用法总结
2019/07/30 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
先进个人事迹材料
2014/01/25 职场文书
小学班主任评语大全
2014/04/23 职场文书
六年级学生评语大全
2014/12/26 职场文书