[PY3]——函数——函数注解 | 实现类型检查功能

函数注解(Function Annotations)——> 可以在定义函数的时候对参数和返回值添加注解

写函数注解

#平时我们使用help()可以查看一个函数的说明,我们自己写的函数也可以提供这样的说明

#第一种方式:直接在函数内 ‘‘‘写文本‘‘‘

def add(x,y):
   ‘‘‘x+y
   @:param x int
   @:param y int
   @return int
   ‘‘‘
   return x+y

#print(help(add))
  Help on function add in module __main__:
  add(x, y)
      x+y
      @:param x int
      @:param y int
      @return int
  (END)

# 第二种方式:更常用,是python中的函数注解语法
# 参数:类型参数:"说明文本"  -> 返回值类型
def add(x:int,y:"It‘s a int") ->int:
     return x+y()
print(help(add))
  Help on function add in module __main__:
  add(x:int, y:"It‘s a int") -> int
  (END)

查看函数注解

function.__annotations__

# function.__annotations__
print(sum.__annotations__)
#{‘return‘: <class ‘int‘>, ‘lst‘: typing.List<~T>[int]}

inspect.signature

# inspect.signature
import inspect

# 获取函数注解
sig=inspect.signature(add)
print(sig)
#(x:int, y:"It‘s a int") -> int

# 获取函数参数(其输出是个有序字典)
print(sig.parameters)
#OrderedDict([(‘x‘, <Parameter "x:int">), (‘y‘, <Parameter "y:"It‘s a int"">)])

## 获取指定参数注解 ##
# 法1:
print(sig.parameters[‘x‘])
#x:int
# 法2:
print(sig.parameters[‘x‘].annotation) #即利用parameters输出的有序字典来访问
#<class ‘int‘>

## 获取返回值注解 ##
print(sig.return_annotation)
#<class ‘int‘>

print(sig.parameters.values())
#odict_values([<Parameter "x:int">, <Parameter "y:int">])
时间: 2024-11-06 10:12:28

[PY3]——函数——函数注解 | 实现类型检查功能的相关文章

基于 Python 3 新增的函数注解(Function Annotations )语法实现参数类型检查功能

2016-01-06 python python 3 / Function Annotations 函数注解(Function Annotations) 类型检查 参考资料 函数注解(Function Annotations) 函数注解语法 可以让你在定义函数的时候对参数和返回值添加注解: def foobar(a: int, b: "it's b", c: str = 5) -> tuple: return a, b, c a: int 这种是注解参数 c: str = 5 是

Java泛型函数的运行时类型检查的问题

在一个数据持久化处理中定义了数据保存和读取的 泛型函数的,但是在运行时出现类型转换错误,类型不匹配,出错的位置不是load方法,而是在调用load方法之后,得到了列表数据,对列表数据进行使用时出现的.结果列表里面的元素实际是A类型,调用load方法传递的是B类型的class,但是仍然load成功. 很是疑惑,最终修改代码调试后,解决问题. import android.content.Context; import android.text.TextUtils; import java.io.F

JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常

在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前的版本: 1 2 3 4 5 6 7 8 9 10 catch (IOException ex) {      logger.error(ex);      throw new MyException(ex.getMessage()); catch (SQLException ex) {      

使用装饰器进行函数类型检查

动态类型的特性使得Python函数在被调用时,其参数类型不易被知晓.或者,为了动态支持多类型,实际参数的类型由调用者提供.如下: def add(x, y): return x + y print(add(2, 3)) # 5 print(add('Hello', ' World')) # Hello World 上面的例子可以看出,函数参数并没有指定类型,使得该函数支持多种类型,这也正是Python语言的特殊之处. 但有时候,我们想限制函数的参数类型.这时很多人会想到类型提示(Type Hin

javascript函数参数、返回值类型检查

实现带参数.返回值类型声明的js函数: 类型定义:window.Str = Type.Str = Type.define('STRING', Type.isStr);var Per = Type.define('PERSON', function(p){    return p && p.type === 'person' && p.name;}); 定义函数:var addStr = Str(function(a, b){  return a + b;}, Str, St

C语言不进行类型检查 和函数可以不进行前向声明

编译器为gcc4.5 #include <stdio.h> int main() { printf("%d\n",add(3)); printf("%d\n",add('c')); printf("%d\n",add(3.2)); return 0; } int add(int a) { return a; } C 语言可以不进行前向声明,前提是定义的函数必须是 int型返回值和int型的形参. C语言不进行类型检查 和函数可以不进行

名字查找先于类型检查:函数重载与作用域

作用域屏蔽名字:内层作用域中声明的名字将隐藏外层作用域中声明的同名实体. 同名??C++有关同名的除了变量之外,也就是函数重载了!! [作用域对于函数重载的限制] 1. 在不同的作用域中无法重载函数名 2. 函数匹配时,编译器首先寻找对该函数名的声明,一旦在当前作用域中找到了所需的名字,编译器就会忽略掉外层作用域中的同名实体,剩下的工作就是检查函数调用是否有效了 #include <iostream> using namespace std; void print(double); void

sql server 之函数小技巧 &amp;&amp; 整数类型为空是用空字符串替代实现

1.判空函数 说明:使用指定的替换值替换 NULL. 语法:ISNULL ( check_expression , replacement_value ) 参数: check_expression:将被检查是否为 NULL 的表达式.check_expression 可以为任何类型. replacement_value:当 check_expression 为 NULL 时要返回的表达式.replacement_value 必须是可以隐式转换为 check_expresssion 类型的类型.

C++ Primer学习笔记(三) C++中函数是一种类型!!!

C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! 重要的事情要说三遍... 接 C++ Primer学习笔记(二) 类的构造函数 与类同名,且无返回类型. 同类的成员函数一样,也可以在类中声明,在类外定义. 格式: 类名(): 成员1(成员1初始化值), 成员2(成员2初始化值) { } 以上,冒号至大括号中间的部分,称为构造函数的初始化列表,用于调用类成员的构造函数来初始化. 没有在初始化列表中显式指定初始化的成员,将会