对人生完全没帮助的的沙雕小技巧

2024-05-15 13:18

本文主要是介绍对人生完全没帮助的的沙雕小技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阅读本文大概需要 3 分钟。

大家好,今天分享一点对人生完全没帮助的沙雕小技巧,点进来的朋友注意了哈!

你即将要失去这阳间的三分钟。

假设我现在使用print大法打印了一段日志:

print('我是日志')

我想把这段日志注释掉,大家会怎么做呢?相信大多数人都是在行首加上一个#号:

# print('我是日志')

有些人可能也会用多行注释:

"""
print('我是日志')
"""

但有些人,偏偏喜欢另辟蹊径标新立异,非要跟大家不一样,他们是这样写的:

print:('我是日志')

print和左括号之间,加了一个冒号。从效果上看,确实也起到了注释的作用

为什么这样写也能实现注释的效果呢?这就要从 Python 的类型标注说起。

Python作为一个动态语言,其本身对变量类型是没有强制要求的,同一个变量,我们既可以让它是int,也可以让它是字符串:

a = 1
a = 'x'

但项目规模大起来以后,这种特性可能会带来很多难以察觉的隐患。因此,Python引入了一个新的功能,叫做类型标注。在定义变量、函数接收参数的时候,我们可以指定它们的类型,如果赋值或者传递参数的时候类型不匹配,IDE会给你加上深色背景,提醒你这里有问题,如下图所示:

但类型标注这个功能是给IDE或者静态检查工具使用的,Python解释器在解释代码的时候,会自动忽略它。所以即使你强行不遵守也没有关系,如下图所示:

.

有些人正是看中了Python解释器自动忽略类型标注这个特点,动起了歪脑筋,干起了奇技淫巧的勾当。

因为类型标注中,冒号后面的类型,除了我们常见的类型外,还可以是我们自定义的类,甚至是一个列表:

class People:def __init__(self, name, age):self.name = nameself.age = agekingname = People('kingname', 28)
kingname_clone: People = kingname
kingname_god: [1, 2, 3] = kingname # 这里,强制标注 kingname_god 变量的类型为[1, 2, 3]。

同时,类型标注也可以不赋值,所以这样写也是可以的:

a: int

这样一来,显然下面这种写法也是可以的:

kingname_god: [1, 2, 3]

现在,我们把列表改成元组,于是就变成了:

kingname_god: (1, 2, 3)

现在我们把kingname_god改成print,于是我们就得到了:

print: (1,2, 3)

因为元组也可以只有一个元素,所以显然:

print:('我是日志')

这种写法也是合法的,它表示把 print变量标注为('我是日志')类型,但不赋值。

由于Python 解释器会自动忽略类型标注,所以对于这种没有赋值的类型,Python 会自动忽略整行,所以看起来就像是被注释了一样。

为了更好地证明print:('我是日志')本质上是一个没有赋值的类型标注,我们来看一下字节码:

可以看到,这两种写法,我们一行一行对比,他们的字节码流程完全一样,差别仅仅在用的类型是int还是'我是日志',以及变量名是a还是print

除了print外,任何我们自定义的函数甚至是字典、列表都可以这样写,例如:

说真的,这些知识点足够沙雕,但其实想要真正理解他们,还是要对 Python 的最底层知识完全熟悉。很多时候 bug 就出在这样模糊不清的地方。因此遇到“沙雕小知识”时多问自己几个为什么,之后遇到的 bug 就会越来越少啦!

啊!总而言之,又浪费了在阳间的三分钟~

明天见~~~

推荐阅读

1

全球 26 个主流视频网站高清视频下载全搞定,包括 P 站!

2

史上最强 iPhone 越狱工具开源:功能永久有效!

3

安利下这个库,解放你左手

4‍‍

太赞了!程序员应该访问的最佳网站都在这里了!

崔庆才

静觅博客博主,《Python3网络爬虫开发实战》作者

隐形字

个人公众号:进击的Coder

长按识别二维码关注

好文和朋友一起看~

这篇关于对人生完全没帮助的的沙雕小技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991913

相关文章

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl