python和传统的 C/C++、Java、C# 等语言相比,Python 对代码格式的要求没有那么严格,这种宽松使得用户在编写代码时比较舒服,不用在细枝末节上花费太多精力。我来举两个典型的例子:

Python 不要求在每个语句的最后写分号;
定义变量时不需要指明类型;

编写代码时候的舒服却伴随着阅读和维护代码的困难和痛苦,比如在调试代码的时候,很多时候都需要搞清楚变量的类型,**编写代码的时候也没有标注清楚变量的类型,**这就给项目的维护造成了很大的困难。所以反观一下Java等强类型语言,就没有这些问题。

为什么要注明变量类型?

  1. 注明变量类型后,可以在IDE中方便的该类型的属性和方法,便于开发
    如图:

    不注明参数的类型,在编码的时候不会提示其属性和方法。

    注明参数的类型,在编码的时候会提示其属性和方法,方便编码。

2.注明方法的变量类型,方便代码的阅读和维护

如何使用?

①在写声明变量:

a :type = value

②在写方法的时候,注明变量的类型,以及其返回值。
基本用法如下:

def func(a:int,b:str,c:list)->(result....)
    示例几种情况:

   # 有返回值:
def sum(a:int,b:int)-> int:
    return a+b
   #无返回值:    
 def print_value(a:int,b:int)-> None:
    print(f"a={a} b={b}")
   # 多返回值:
def exchange(a:int ,b:int)->(int,int):
    a,b = b,a
    return a ,b

笔者认为python的灵活简单是它的优点,但也是它的缺点。正是因为灵活简单使得python简单易学,但是在维护和学习他人代码的时候总感觉不舒服。

希望python coder 能养成好的编码习惯。本文只是简述类型注解的基本用法,还有更多的用法在typing包中,例如方法参数可选带默认值等。之后笔者会出一篇文章。

题外话,在Golang中 函数的用法和注明变量类型和返回值的Python的代码。大家习惯了本文中的类型注解等于学会了Go方法的编写。

//Golang   func 函数名(参数 类型) 返回值
func sum(a int,b int)int  {
    return a+b
}
# python
def sum(a:int,b:int)-> int:
    return a+b