Python从小白到高手实现系列六百五十九:你可能还不知道的其他语法元素

Python 语法中有一些元素不太常见,也很少用到。这是因为它们能提供的好处很少,
或者它们的用法很难记住。因此,许多Python 程序员(即使有多年的经验)完全不知道这
些语法元素的存在。其中最有名的例子如下:
• for … else 语句。
• 函数注解(function annotation)。
for…else…语句
在for 循环之后使用else 子句,可以在循环“自然”结束而不是被break 语句终
止时执行一个代码块:

for number in range(1):
… break
… else:
… print(“no break”)

for number in range(1):
… pass
… else:
… print(“break”)

break
这一语句在某些情况下很有用,因为它有助于删除一些“哨兵(sentinel)”变量,如果
出现break 时用户想要保存信息,可能会需要这些变量。这使得代码更加清晰,但可能会
使不熟悉这种语法的程序员感到困惑。有人说else 子句的这种含义是违反直觉的,但这
里介绍一个简单的技巧,可以帮你记住它的用法:for 循环之后else 子句的含义是“没
有break”。
函数注解
函数注解是Python 3 最独特的功能之一。官方文档是这么说的:函数注解是关于用户
自定义函数使用的类型的完全可选的元信息,但事实上,它并不局限于类型提示,而且在
Python 及其标准库中也没有单个功能可以利用这种注解。这就是这个功能独特的原因:它
没有任何语法上的意义。可以为函数定义注解,并在运行时获取这些注解,但仅此而已。
如何使用注解留给开发人员去思考。
1.一般语法
对Python 官方文档中的示例稍作修改,就可以很好展示如何定义并获取函数注解:
def f(ham: str, eggs: str = ‘eggs’) -> str:
… pass

print(f.annotations)
{‘return’: <class ‘str’>, ‘eggs’: <class ‘str’>, ‘ham’: <class ‘str’>}
如上所述,参数注解的定义为冒号后计算注解值的表达式。返回值注解的定义为表示
def 语句结尾的冒号与参数列表之后的->之间的表达式。
定义好之后,注解可以通过函数对象的__annotations__属性获取,它是一个字典,
在应用运行期间可以获取。
任何表达式都可以用作注解,其位置靠近默认参数,这样可以创建一些迷惑人的函数
定义,如下所示:
def square(number: 0<=3 and 1=0) -> (
… +9000): return number**2
square(10)
100
不过,注解的这种用法只会让人糊涂,没有任何其他作用。即使不用注解,编写出难
以阅读和理解的代码也是相对容易的。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 12:48:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 12:48:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 12:48:01       87 阅读
  4. Python语言-面向对象

    2024-04-23 12:48:01       96 阅读

热门阅读

  1. .NET 高级开发人员面试常见问题及解答

    2024-04-23 12:48:01       39 阅读
  2. NLP预训练模型-GPT-3

    2024-04-23 12:48:01       35 阅读
  3. .NET WinForm开放中的 窗体的 Designer.cs作用

    2024-04-23 12:48:01       44 阅读
  4. Rx.Net 第四章

    2024-04-23 12:48:01       35 阅读
  5. [python] __setitem__与__getitem__的使用

    2024-04-23 12:48:01       182 阅读
  6. git 常用命令

    2024-04-23 12:48:01       58 阅读
  7. Elasticsearch与IK分词器:深度解析与实战应用

    2024-04-23 12:48:01       52 阅读
  8. python借助elasticsearch实现标签匹配计数

    2024-04-23 12:48:01       36 阅读
  9. 五道基础且高频的Python算法面试题

    2024-04-23 12:48:01       36 阅读
  10. .NET/C#汇总 —— 数据库概念知识

    2024-04-23 12:48:01       37 阅读