笑来在《自学是门手艺》的《2.4.3 化名与匿名》中,讲到了函数的化名。经过几个月的实战,我发现,实际上化名无处不在。我有时也会称之为“别称”,意思一样。函数化名只是化名的一种应用场景,还有好几种使用化名的地方,本篇笔记将整理小结我所遇到的各种化名。

情境A:导入时化名

导入其它模块时,直接化名为简约版,是我相当常用的,甚至有一些业界约定俗成的化名。无论是模块,模块中的函数或变量,都可以此种方式化名简化之。

# 业界约定俗成的一些化名
import pandas as pd
import numpy as np
# 自定义模块与自定义函数的化名
from zhihu_base import get_all_topics_detail as zhihu

我编程时给函数或变量命名的习惯是,让人一看到名字就能知道该它是做什么的,如此以来名称就会挺长。函数因为要被调用,尤其是外部调用,写的复杂点倒能理解。但如果是一个不被外部调用的变量,为什么不直接在定义变量时就定义一个简约的名字呢?

情境B:同一行语句多次调用名字,临时简化

这里有一种情境,调用该变量的大部分语句都相对简约,用全称更易读,但偶尔有一句复杂的语句,要多次调用该变量,导致该语句特别长,此时要临时要用一个变量化名,简化代码。


sql_search = 'select url_token,zhihu_name,lase_active_time from zhihu_whos_v;'
df_topics_details = pd.read_sql(sql_search,conn)
# 这里省略很多代码
# 此时出现一条相对复杂冗长的语句,多次出现该变量名
df_value_v = df_topics_details[(df_topics_details['upvotecount']>100000) & (df_topics_details['last_activity']>'2019-09-01') ]

该语句是为了把 df_topics_details 这个数据集之中,符合条件 upvotecount > 100000last_activity >'2019-09-01' 的数据筛选出来,是 pandas 中相当常用的语句。后来我发现,在这种多次调用某个变量名或函数名的语句中,可以临时加一个化名,来简化该语句长度。像这样:


df_topics_details = dtd
df_value_v = dtd[(dtd['upvotecount']>100000) & (dtd['last_activity']>'2019-09-01') ]

但是这种化名,并不适合在定义该变量时就如此做。试想我一开始就把该变量定义为 dtd,其余许多行代码会极其不易读——我或者代码的其它读者完全无法理解dtd指代什么。如果更多变量都采用这种风格,代码的可读性将有多糟糕啊!

情境C:文件对象化名

其实文件对象化名这个说法倒不准确,本质上是变量的赋值:把一个特定的文件对象赋值给一个变量来指代保管。单独拎出来,是因为它太高频使用了。类似fw或者frwriter也是约定俗成的命名习惯。

实例 X:

fw = open("my_test.txt", "at")
fw.write("xue.cn 月收费仅15元,对编程自学者相当友好。")
fw.close()

实例Y:

with open("my_test.txt", "at") as fw:
fw.write("xue.cn 可以在网页上一边阅读一边在线写代码。")

实例Z:

comms_file = output_path + 'xuecn_comments_statistics_' + str(datetime.datetime.now())[:10] + '.xlsx'
with pd.ExcelWriter(comms_file) as writer:
comms_counts_monthly.to_excel(writer, sheet_name='留言月报')
comms_counts_weekly.to_excel(writer, sheet_name='留言周报')
comms_counts_daily.to_excel(writer, sheet_name='留言日报')
comms_by_reg_date.to_excel(writer, sheet_name='每日激活用户的留言情况')
comms_by_reg_week.to_excel(writer, sheet_name='每周激活用户的留言情况')
comms_counts_by_hour.to_excel(writer, sheet_name='留言活跃时段')
vote_by_name.to_excel(writer, sheet_name='用户获赞')
name_count_by_vote.to_excel(writer, sheet_name='用户获赞的分布')
vote_by_content.to_excel(writer, sheet_name='留言获赞')
content_count_by_vote.to_excel(writer, sheet_name='留言获赞的分布')

情境D:化名是通用的操作

如我上一篇笔记提及,sql 语句也有“化名”的方法,用的关键词和python导入时所用到的 as 是一样的。


with data as(
select
date(created_at) as time,
user_id
from user_comments
union all
select
date(created_at) as time,
user_id
from user_activities
)
select
time,
count(distinct user_id) as 每日学习用户数
from data
group by time
order by time def who_is_v_detail

小结

我比较少细究某个化名,到底是对函数、变量或对象进行化名。核心在于,化名只是给名字复杂的东西,另外取了一个简单好记的指代他,不管名字如何,那东西的特性不变,所指代的总还是ta。

好似某个人叫“因缺思厅·尼古拉斯·蒋·巴斯帝国五世·一品带刀侍卫·阿拉斯加·狗蛋·王”,你可以简称他:老王。

“化名”是编程和日常生活中普遍存在的现象,只不过具体在某个语言中,它通过什么关键词或语法来实现而已。

小结 python 实战中遇到的几种需要化名的情境的更多相关文章

  1. 【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  2. Python编程中常用的12种基础知识总结

    原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...

  3. python接口测试中常见的两种接口依赖处理方式

    一.请求体的字段依赖 这种情况多数是在当前测试的接口,它的前置接口的请求体中的字段要拿来在当前的接口请求体中继续使用,比如修改用户信息的接口,该接口会使用到用户名的字段,该字段是由创建用户时的请求体中 ...

  4. python中常用的九种数据预处理方法分享

    Spyder   Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...

  5. python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)

    毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一.默认参数 def multiply1(x, y): retu ...

  6. python中字符串的几种表达方式(用什么方式表示字符串)

    说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 ...

  7. Python实现接口测试中的常见四种Post请求数据

    前情: 在日常的接口测试工作中,模拟接口请求通常有两种方法, 利用工具来模拟,比如fiddler,postman,poster,soapUI等 利用代码来模拟,使用到一些网络模块,比如HttpClie ...

  8. python中常用的九种预处理方法

    本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal ...

  9. python中字符串的四种表达方式

    今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 > ...

随机推荐

  1. Robot Framework RIDE介绍

    快捷键 F8 -执行测试用例 F5 -查看关键字 Edit标签 测试项目和测试套件所提供的Edit标签是一致的,两者功能也一样.

  2. django2.2(一)

    限制请求method 什么是method 1.通常客户端请求服务器获取资源为GET方式 2.客户端提交数据给服务器端数据为POST方式 method限制请求 如果要限制请求,比如客户端只允许用GET方 ...

  3. linux禁止root用户直接登录

    允许root用户登录是很不安全的,但是有时候为了测试的方便, 也可以允许root用户登录,但是这个方法最好不要对公网开放使用. 1.新建一个用户,用来登录 test@cloud:~> usera ...

  4. 复数基础及其2D空间的旋转

    本文我们讨论复数及其旋转的含义.复数很有意思,本文介绍了复数的基本定义和性质,以及它关于旋转的几何意义. 复数对于旋转的两个方面极为重要: 1. 它引入了旋转算子(rotational operato ...

  5. mysql基础知识之数据类型与约束

    一.约束 作用: 保证数据的完整性和一致性表的设计 1.not null 和 default not null 是放在最后用来约束 前面 数据类型的 (在原有基础上本来可以主键后面可以为空,但是一旦在 ...

  6. postgresql plv8 安装

    网上可以看到pg 9.6 版本的plv8容器镜像,没有pg 高版本的支持镜像,但是在基于原有dockerfile 进行构建的时候,居然失败了,有墙的问题,有版本的问题 所以通过虚拟机尝试下构建方式安装 ...

  7. gcd与exgcd

    gcd 辗转相除法求gcd证明 \(gcd(a, b) == gcd(b, a\%b)\) 证明: 设: \(d\)为\(a\)与\(b\)的一个公约数, 则有\(d|b\) \(d|a\) 设: \ ...

  8. pycharm默认注释与快捷键功能

    pycharm快捷键使用技巧 Ctrl+d 复制当前行.或者选择的块Ctrl+n 跳转到类Ctrl+shift+n 快速查找文件名Ctrl+shift+f 全局查找,快速查找关键字的文件Ctrl+sh ...

  9. 关于.ipynb文件

    一.简介: .ipynb文件即为Jupyter Notebook,是一个交互式笔记本,支持运行 40 多种编程语言. Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文 ...

  10. Spring Cloud 升级最新 Greenwich 版本,舒服了~

    去年将 Spring Cloud 升级到了 Finchley 版本: Spring Cloud 升级最新 Finchley 版本,踩了所有的坑! 这个大版本栈长是踩了非常多的坑啊,帮助了不少小伙伴. ...