Python 是一门强类型的动态语言, 对于一个 Python 函数或者方法, 无需声明形参及返回值的数据类型, 在程序的执行的过程中, Python 解释器也不会对输入参数做任何的类型检查, 如果程序中存在非法的数据操作, 程序会在相应的位置停止执行, 并抛出异常.  对象的调用者也无需声明所接收返回值的数据类型,所以这里就需要开发者在开发的过程中自行注意实参及所接收返回值的数据类型,并进行相应的业务处理.

def test_func(g, k):
try:
c = g + k
except Exception:
c = False
return c

如上面的示例, 函数 test_func 并不需要指明形参 g, k 及返回值的数据类型, 此时如果调用者传递了两个不同数据类型的实参, 那么就会导致该函数抛出异常.  这时就需要我们在函数中进行相应的业务处理,

或者进行异常捕捉,否则就需要开发者在调用函数前review该函数,严格传递正确的数据类型,并了解到该函数有可能出现的返回值类型,如上面的示例中,就有可能返回布尔值.在Python代码开发的过程中,

因为Python的这一特性,有时反而会加大我们不必要的开发时间成本

  从Python3.6开始, 加入了数据类型的检查功能,借助于现有IDE(如Pycharm)的高亮提示功能,在调用函数或者方法时,如果传递了错误的数据类型或者返回值数据类型异常,IDE会进行高亮,提示开发者及时进行更正,需要注意的是,这里只是进行提示开发者,但并不会要求你严格按照规则执行,更加不会因此而提升代码性能,它只是用来提升代码开发效率的一种方式而已,最起码可以有效的减少代码的调试时间

# g:int, k:int  提示形参的数据类型为 int
# -> int 提示返回值为 int
def test_func(g: int, k: int) -> int:
return g + k
  # 在IDE(pycharm)中, 如果是返回一个字符串,那么就会将该字符串进行高亮提示,但并不代表该程序无法执行
# return "lowman"
a: int = 1
b: str = 2 # 仍然能赋值成功
print(a + b) # 在IDE(pycharm)中, print 函数内的 b 参数被高亮, 但是程序仍然能执行, 结果输出 int类型 3

  所以,Python3.6版本新加入的类型检查功能, 只能算是提升开发效率的辅助方式而已.Python中的变量仍然是可动态变化的.实际上Python的数据类型检查是由Python解释器在执行代码时逐行进行完成的, 并动态的根据当前变量所指向的数据的类型为其指定,与其他语言(如Golang在使用变量之前必须先定义其数据类型,然后再根据其数据类型进行正确的赋值, Golang是强类型的静态语言)是有着本质区别.只能说,动态特性也是一把双刃剑

Python 加入类型检查的更多相关文章

  1. Python 静态类型检查 mypy 示例

    以下所有例子都参考了最新版本的 Python 文档与 mypy 文档 必备条件 安装最新版本的 Python 和 mypy 要学会按需配置自己的编辑器,比如我的 VSCode 就装好了 Python ...

  2. 介绍几款 Python 类型检查工具

    近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注. 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心, ...

  3. 享受Python和PHP动态类型检查语言的快感

    前言 写这文章的时候特地查了资料,以确保我没有说错关于Python和PHP的类型机制. 所以这里放一张图,关于强弱类型与动态/静态类型检查的区分 从分类上看,PHP属于弱类型语言,而Python属于强 ...

  4. Python 带参数的装饰器 [2] 函数参数类型检查

    在Python中,不知道函数参数类型是一个很正常的事情,特别是在一个大项目里.我见过有些项目里,每一个函数体的前十几行都在检查参数类型,这实在是太麻烦了.而且一旦参数有改动,这部分也需要改动.下面我们 ...

  5. Python中的对象行为与特殊方法(二)类型检查与抽象基类

    类型检查 创建类的实例时,该实例的类型为类本身: class Foo(object): pass f = Foo() 要测试实例是否属于某个类,可以使用type()内置函数: >>> ...

  6. pyi文件是干嘛的?(一文读懂Python的存根文件和类型检查)

    参考资料: https://blog.csdn.net/weixin_40908748/article/details/106252884 https://www.python.org/dev/pep ...

  7. python 鸭子类型

    首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型. 在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不 ...

  8. Python静态代码检查工具Flake8

    简介 Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具,相对于目前热度比较高的Pylint来说,Flake8检查规则灵活,支持集成额外插件,扩展性强.Flake8是对 ...

  9. [转载]关于python字典类型最疯狂的表达方式

    一个Python字典表达式谜题 让我们探究一下下面这个晦涩的python字典表达式,以找出在python解释器的中未知的内部到底发生了什么. # 一个python谜题:这是一个秘密 # 这个表达式计算 ...

随机推荐

  1. [LeetCode] 494. Target Sum 目标和

    You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symb ...

  2. [LeetCode] 406. Queue Reconstruction by Height 根据高度重建队列

    Suppose you have a random list of people standing in a queue. Each person is described by a pair of ...

  3. Salesforce 版本控制 - VS Code + GitHub + Salesforce

    使用VS Code开发Salesforce有个很好的地方是可以联接GitHub进行代码版本控制,点击查看使用VS Code开发SalesForce 第一步:安装GIthub Desktop Githu ...

  4. [数据库] SQL 语法之基础篇

    一.什么是 SQL ? SQL 是 Structured Query Language(结构化查询语言)的缩写,是一种专门用来与数据库沟通的语言.与其他语言(如英语或 C.C++.Java 这样的编程 ...

  5. Editor模式下实例化Prefab

    PrefabUtility.InstantiatePrefab//需要关联 GameObject.Instantiate//不需要关联

  6. url拼接参数格式

    在一些情况下,需要直接往url上拼接请求参数. http://www.yanggb.com?flag=1&type=normal&role=customer 通过上面的例子就可以看出, ...

  7. Python '\r', '\n', '\r\n' 的彻底理解

    回车和换行的历史: 机械打字机有回车和换行两个键作用分别是: 换行就是把滚筒卷一格,不改变水平位置.   (即移到下一行,但不是行首,而是和上一行水平位置一样) 回车就是把水平位置复位,不卷动滚筒.  ...

  8. jQuery实现C#CheckBoxList模糊搜索

    前言 最近开发的一套系统中需要对商品进行管理,在选择商品时,要分别从品牌.型号.商品三个类别分别选择对应的选项才能找到需要的商品,三者的关系为:品牌包含型号,型号包含商品,因此使用了三个不同的 asp ...

  9. git 命令从入门到放弃

    o(︶︿︶)o  由于项目使用 git 作为版本控制工具,自己可以进行一些常用操作但是有时候还是会忘掉,导致每次遇到 git 命令的使用问题时就要再查一遍,效率就立马降下来了,所以今天就来一个从头到尾 ...

  10. 使用Swagger创建Api

    1.首先创建一个web项目,选择Mvc模板 2.右键点击引用.管理Nuget程序包,浏览 搜索Swagger,下载安装下面的包 3.安装完后在App_Start里面会出现SwaggerConfig.c ...