Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >❓ 你看不懂的 Python 写法

❓ 你看不懂的 Python 写法

作者头像
布鲁斯鱼
发布于 2022-11-02 06:06:59
发布于 2022-11-02 06:06:59
37200
代码可运行
举报
运行总次数:0
代码可运行

近来在网上冲浪时看到了一个奇怪的 Python 语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> [0xfor x in (15, 10, 5)]
[15]

有那么一瞬间,对自己多年的 Python 语法产生了怀疑, 0xfor 是一个什么新的循环关键字?

经过一番探究,发现一个奇怪的 Python 语法世界。

上面这一句,实际上是 [0xf or x in (15, 10, 5)]

首先, 0xf 代表了 十六进制整型 15 ,同理还可以用二进制、八进制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> [0b010or x in (15, 10, 5)]
[2]

>>> [0o0or x in (15, 10, 5)]
[8]

还有一个特殊数字表示—— j ,代表 complex(复数)类型j 在这里表示虚数 i不用 i 的原因),也可以有很奇怪的写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 0jor.0j
0j

>>> 0jis.0j
True

其次,在 Python 中操作符(Operator)左右的空格并不全是必须的

" Whitespace is needed between two tokens only if their concatenation could otherwise be interpreted as a different token"

所以理论上你可以写出类似这样的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 0xfin[15]
True

>>> 0o7is[0xf]
False

>>> 0o7&0xf
7

>>> ~0o0**0o0
-2

最后,由于 or 操作符遵循最短求值原则,只要左侧表达式为真,右侧表达式是不会执行的,所以任何奇怪的表达都可以正常运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 0xdeadbeefor whysoserious
3735928559

>>> 0xdeadbeefor whysoserious
3735928559

>>> 0o0and whysoserious
0

所以综上,我们来一个终极“乱码”:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 0b010&0o0&0b0is(0j)in[0xdeadbeefor["是不是很奇怪这样也能运行"]]
False

现在再看一眼开头, [0xfor x in (15, 10, 5)] 是不是一眼就能能把 [15] 给看出来了呢?🥴

参考:

  1. https://stackoverflow.com/questions/67083039/why-does-python-return-15-for-0xfor-x-in-1-2-3
  2. https://twitter.com/nedbat/status/1382027078816653319
  3. https://stackoverflow.com/questions/24812444/why-are-complex-numbers-in-python-denoted-with-j-instead-of-i
  4. https://stackoverflow.com/questions/8370637/complex-numbers-in-python
  5. https://docs.python.org/3/reference/expressions.html#operator-precedence
  6. https://docs.python.org/3/reference/lexical_analysis.html#whitespace-between-tokens
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 5 月 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
两天研习Python基础(七) 列表
基于键key[8]进行排序,例如基于字符串长度lambda表达式[9]在比如传递自定义单个表达式、基于第二个字母进行排序中很有用
王诗翔呀
2020/07/02
8350
两天研习Python基础(九) 文本处理
字符转换例子: https://stackoverflow.com/questions/555705/character-translation-using-python-like-the-tr-command
王诗翔呀
2020/07/06
1.1K0
Python 字符串格式化操作 - format方法
字符串操作 对于 %, 官方以及给出这种格式化操作已经过时,在 Python 的未来版本中可能会消失。 在新代码中使用新的字符串格式。因此推荐大家使用format()来替换 %.
叉叉敌
2020/02/20
4070
2019 年 stackoverflow 网站最受欢迎的 20 个 Python 问题
在最新一期的“Python开发者周刊”(Pycoder's weekly)里,我看到一则有意思的分享,故转出来分享给大家。
Python猫
2020/01/17
3740
2019 年 stackoverflow 网站最受欢迎的 20 个 Python 问题
两天研习Python基础(三) 函数
[1]Python文档 - 编码风格: https://docs.python.org/3/tutorial/controlflow.html#intermezzo-coding-style
王诗翔呀
2020/07/02
5380
两天研习Python基础(六)控制结构
[1]Python文档 - 真值检验: https://docs.python.org/3/library/stdtypes.html#truth
王诗翔呀
2020/07/02
5260
Built-in Functions(p
    在python中有很多的内置函数,这些内置函数让我们更高效,在此将部分相关知识总结一下。
py3study
2020/01/06
4430
Python3 | 练气期,基本数据类型,类型转换!
描述:上一章,我们学习了Python3基础语法,此章节我们学习Python几种基本数据类型,以及数据类型转换,希望各位看友认真学习此基础篇章,为后续的深入学习打下牢固的基础,为了不让各位看友犯困,作者也尽可能用简短的语言以及实践示例进行表达。
全栈工程师修炼指南
2024/07/29
2810
Python3 | 练气期,基本数据类型,类型转换!
通过C模块中的Python API访问数组的数组
在 C 语言中,我们可以使用 Python 的 C API 来访问和操作数组的数组(即二维数组或嵌套列表)。通常,我们可以使用 Python C API 提供的 PyListObject 和 PySequence 相关函数来访问 Python 传递过来的列表结构。
华科云商小徐
2025/02/08
5760
24 个好用到爆的 Python 实用技巧!
作为一名数据工作者,我们每天都在使用 Python处理大多数工作。在此过程中,我们会不断学到了一些有用的技巧和窍门。
数据STUDIO
2021/11/17
6450
Python NumPy ndarray 入门指南
因为这几天做模糊数学和用 Python OpenCV2 都涉及到 NumPy ndarray,搜到的东西都没有写一些自己想要的。于是干脆自己写一篇,方便以后查阅。
用户7886150
2021/01/05
8870
函数 | Python内置函数详解—数学运算类
Python内置的函数及其用法。为了方便记忆,已经有很多开发者将这些内置函数进行了如下分类:
潘永斌
2020/02/18
9610
Python格式化字符串format
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书
Tyan
2020/06/22
5710
Python 内建函数
    Help on built-in function divmod in module __builtin__:
py3study
2020/01/15
7650
数字 20 例
接下来我会严格按照 我的施工计划,往下推进这个开源项目( 目前 4300+ star ),链接为:
double
2020/06/28
1.4K0
收藏级:优雅编写Python3的66个小贴士!
今天公众号为大家带来一篇有关Python技巧的文章,可以帮助你编写优雅的Python3代码!
量化投资与机器学习微信公众号
2019/07/23
6580
收藏级:优雅编写Python3的66个小贴士!
一觉醒来,竟发现自己看不懂 JS 了?
最近看到了一些很有趣的 ES 提案,如 Record 与 Tuple 数据类型,思路来自 RxJS 的 Observable,借鉴自函数式编程的 throw Expressions,带来更好错误处理的Error Cause等,可以认为一旦这些提案完全进入到 ES 新特性中,前端 er 们的工作效率又会 upup,这篇文章就来介绍一下我认为值得关注的 ES 提案。
coder_koala
2021/07/08
7220
python基础教程:内置函数(一)
Python解释器内置了很多函数和类型,可以随时随地在编程中使用。其实,我们在前面的学习中已经接触过好多内置函数。
一墨编程学习
2019/05/15
9060
Python: 按位或运算符(Bitwise OR)
文章背景: 最近在学习Qt5的QFileDialog(提供选择文件或目录的GUI的对话框),有一段代码用到了按位或运算符(|=),
Exploring
2022/12/18
9410
Python第一周 学习笔记(3)
python3的int就是长整型,且没有大小限制,受限于内存区域的大小 int(x) 返回一个整数
py3study
2020/01/07
7980
相关推荐
两天研习Python基础(七) 列表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验