comments in Python

在 Python 中,注解(comments) 是用来解释程式码、标注作者的想法,或者提供对程式逻辑的简要说明。注解不会被 Python 解释器执行,它们仅供开发者阅读,使程式码更加可读、易于维护。

1. 单行注解

单行注解使用井号(#)开头,Python 会忽略这行从井号开始后的所有内容。范例:

# 这是一个单行注解,Python 会忽略这行
print("Hello, world!") # 这里也可以加注解

2. 多行注解

Python 没有专门的多行注解符号,但可以用多个单行注解来达到多行注解的效果。范例:

# 这是多行注解的第一行
# 这是多行注解的第二行
# 这是多行注解的第三行

3. 区块注解

使用多行字串(\'\'\' 或 """)作为区块注解。虽然这些通常是用来处理字串,但也能作为不会影响程式执行的区块注解使用。这样的注解不会显示或执行,常用于文件字符串(docstring)说明整个程式的目的或某个函数的功能。范例:

\'\'\'
这是一个多行注解区块
通常用于解释程式的逻辑或流程
也可以用作函数的文件字符串
\'\'\'
print("区块注解不会被执行")

4. 注解的用途

注解有助于使程式码更具可读性,尤其在团队合作或开发大型专案时,清楚的注解可以帮助其他开发者快速理解代码的意图。注解用来标注尚未完成的功能或可能需要改善的代码,这些通常以 TODO 开头:范例:

# TODO: 优化这段程式码来提高执行效率

快速comments

vscode 中,选取code区块后 使用command +/ (in Mac)or Ctrl+/ (in windows)即可变成注解

Type Checking

在 Python 中,Type Checking(型别检查) 是检查变数或表达式的资料型别的过程,以确保程式在运行时能够正常处理这些数据。由于 Python 是一个动态型别语言,变数的型别是在程式运行期间动态决定的,而不是在编写程式或编译时就固定。

1. 动态型别检查(Dynamic Type Checking)

Python 採用动态型别检查,这意味着你可以在不同时期给变数赋值不同的型别,而 Python 会在程式运行时自动检查这些型别。

范例:

x = 10 # x 是一个整数
x = "Hello" # 现在 x 是一个字串

在这个范例中,变数 x 一开始是整数,但后来被赋值为字串。Python 允许这种变数型别的灵活变化,并且在运行期间动态检查 x 的型别。

2. 型别检查的工具

虽然 Python 是动态型别语言,但你可以使用一些工具来检查变数的型别,这对于防止错误和提升代码可读性很有帮助。

  • type() 函数:用来检查变数的型别。

范例:

x = 42
print(type(x)) # <class \'int\'>

  • isinstance() 函数:用来检查变数是否属于某一特定型别。范例:

x = 42
print(isinstance(x, int)) # True

3. 静态型别提示(Type Hinting)

从 Python 3.5 开始,Python 引入了型别提示(Type Hinting),虽然 Python 不会强制执行这些型别提示,但它可以帮助开发者明确变数、参数和返回值的型别,让代码更易读,并且有助于静态型别检查工具(如 mypy)发现潜在的型别错误。

范例:

def add(x: int, y: int) -> int:
return x + y

这表示函数 add 接收两个整数型参数,并返回一个整数。这是一种静态型别提示方式,不会改变 Python 的动态性,但可以帮助开发者及早发现型别错误。

所以 静态型别提示(Type Hinting)很像是javasccript的typescript?

没错,**静态型别提示(Type Hinting)**在 Python 中的概念,与 TypeScript 在 JavaScript 中的作用非常相似。两者都是用来在代码中提前标注变数、参数或函数的资料类型,让代码更容易理解和维护,也帮助早期发现错误。

例如在 Python 中的静态型别提示:

def greet(name: str) -> str:
return f"Hello, {name}"

greet(123) # 这会导致静态检查工具(例如 MyPy)报错

在这里,我们使用了 : str 来表示 name 必须是字串,-> str 表示这个函数的返回值也应该是一个字串。尽管 Python 本身不会在执行时强制检查,但开发工具和静态分析工具(例如 MyPy)会根据这些提示检查潜在的错误

在 TypeScript 中类似的例子:

function greet(name: string): string {
return `Hello, ${name}`;
}

greet(123); // 这会在编译时报错

TypeScript 会在编译时期直接检查资料型别,这样就能在代码运行前发现问题。