最近,我有机会听了有关C语言编程实践的好坏的演讲。 在其中,特别涉及到了解码
看上去很有趣的程序代码(C中的
表情符号 )的话题。 然后是关于在面试中使用这种令人困惑的代码来测试应聘程序员职位技能的适当性的辩论。 争端并未达成共识。
考虑一个面试中关于
表情符号的可能问题,该职位暗示着对Python编程语言的了解。

挑战赛
有两个表达式:
_+_
_|_
这两个表达式中的哪个更可能导致错误?为什么?
表达说明应该注意的是,这些表达式的读法很差,不建议在工作代码中使用这些表达式,而只能将其用作难题。
您还需要记住,任务中的图
释不是用
Python编写的(不符合
PEP 8样式标准)。
解决方案
在Python中,下划线不是
关键字 ;因此,通常,下划线可用于将某些值分配给变量。
该任务简化为考虑加法期间出现错误的情况,并使用“按位或”(为简便起见,简称为“或”)一个变量。 即 搜索实现了一项操作的Python内置类型(类),并搜索实现另一项操作的内置类型。
在Python控制台中,很容易验证是否存在下划线值,例如:
评估每个表达式没有错误 >>> _ = 10 >>> _+_ 20 >>> _ = 10 >>> _|_ 10
评估第一个表达式没有错误 >>> _ = '10' >>> _+_ '1010' >>> _ = '10' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'str' and 'str'
计算第二个表达式没有错误 >>> _ = {1, 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'set' and 'set' >>> _|_ {0, 1}
每个表达式的计算中有错误 >>> _ = {1: 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'dict' and 'dict' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'dict' and 'dict'
Python的神奇之处在于加法,“或”以及其他运算符的实现是在针对所需类描述的所谓
“魔术方法”中进行的。
另外,这是方法
__add__
对于“或”,这是一种方法
__or__
每个魔术方法的名称都包含下划线,在相应单词的开头和结尾两个。
实现我们的方法的内置类:
九个内置类实现加法运算,四个实现“或”。
此外,您可以尝试推测在实际项目中使用基类的频率,非基类以及它们的上述方法的实现。 在面试中很可能会对此表示赞赏。
有关面试重点的其他问题
下划线在命名对象时起什么作用?
答案2。下划线可用于
在Python中以
不同的实体命名样式分隔单词:
- 小写命名时
lower_case_with_underscores
- 大写命名时
UPPER_CASE_WITH_UNDERSCORES
保留一些仅限于下划线的名称:
- 名称开头带有下划线,在常规导入期间不会导入
from module import *
- 名称的两边都有两个下划线,不建议将其用于其他目的
- 名称开头带有两个下划线,被认为是班级的私有 (非公开)
单个下划线的作用是什么?
答案3。在解释器中,如果下划线未明确用作变量,则它将存储屏幕上最后一次无错误操作的结果。
$ python3 Python 3.6.8 (default, Feb 14 2019, 22:09:48) [GCC 7.4.0] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> _ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '_' is not defined >>> 2 * 5 10 >>> _ 10 >>> _ = 1 >>> _ 1 >>> 2 * 5 10 >>> _ 1
这是因为
sys.stdout正在使用
displayhook进行转义。 以
官方文档为例:
def displayhook(value): if value is None: return
另外,为了方便
内部化,通常使用单个下划线。