专栏首页35岁开始自学编程小结 python 实战中遇到的几种需要化名的情境

小结 python 实战中遇到的几种需要化名的情境

笑来在《自学是门手艺》的《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。

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • pandas数据分析输出excel产生文本形式存储的百分比数据,如何处理?

    我用 python pandas 写了数据统计与分析脚本,并把计算结果用 pandas 的 to_excel() 存入到 excel 表格提交给团队。但遇到一个...

    刘娟娟PRESSone
  • 和35岁刘阿姨一起自测 Python 流程控制基本功

    流程控制语句、布尔值、布尔值操作符都属于 python 的基础功。大好周末我写这篇笔记,不是为了整理这些基础知识点,而是记录几个令我突然迷惑的代码段。——代码本...

    刘娟娟PRESSone
  • 数据分析师如何自力更生统计用户行为频次?

    不懂数据分析的 growth hacker 不是好运营。近日我想要统计我家产品 xue.cn 用户的编程自学行为的频次,且在不给技术开发部门带来任何新需求的情况...

    刘娟娟PRESSone
  • 吴章金: 如何创建一个*可执行*的共享库

    license: "cc-by-nc-nd-4.0" description: "本文手把手指导如何创建一个可以执行的共享目标文件"

    Linux阅码场
  • Spark Task 的执行流程③ - 执行 task

    创建、分发 Task一文中我们提到 TaskRunner(继承于 Runnable) 对象最终会被提交到 Executor 的线程池中去执行,本文就将对该执行过...

    codingforfun
  • 电力竞价(广东规则)详解与代码

    竞价规则 交易规模 报价规则 撮合规则 结算规则 实例讲解 交易双方 交易情况概述 交易结算 代码 ? 电力改革如火如荼,针对电力交易的广东规则,本文进行了详细...

    用户1147754
  • Tika简单实例应用

    程序说明: 默认可读取10万以内个字符文档,如果文档文件过大,则报错。 org.apache.tika.sax.WriteOutContentHandler...

    程裕强
  • House Robber

    Tyan
  • Intellij IDEA取消拼写检查的方法

    飞奔去旅行
  • 「每日五分钟,玩转JVM」:指针压缩

    最初的时候,JVM是32位的,但是随着64位系统的兴起,JVM也迎来了从32位到64位的转换,32位的JVM对比64位的内存容量比较有限,但是我们使用64位虚拟...

    山禾说

扫码关注云+社区

领取腾讯云代金券