当前位置: 首页 > news >正文

网站的建设公司/5118网站如何使用免费版

网站的建设公司,5118网站如何使用免费版,汽车网站建设公司哪家好,基础展示型网站# 静态语言:编译过程中会检查,会发下问题# 动态语言:只有在运行时才会发现问题# 1 由于编译期间不做任何检查,直到运行期间我呢提才会暴露# 2 函数使用者并不知道参数类型的时候,容易传错参数类型# 函数注解&#…

# 静态语言:编译过程中会检查,会发下问题
# 动态语言:只有在运行时才会发现问题
# 1 由于编译期间不做任何检查,直到运行期间我呢提才会暴露
# 2 函数使用者并不知道参数类型的时候,容易传错参数类型

# 函数注解:给函数的形参一个类型,并有指向的return值
# python3.5开始引入
# 可以用于第三方工具(如:pycharm)提示是否有return
# 3.6可以对变量进行注解,如:i:int = 3

def add(x:int, y:int) -> int: # 声明规范是整数相加,并不强制形参类型
'''
This is add function
:param x: int
:param y: int
:return: int
'''
return x + y

print(add(4, 10))
print(add(4.0, 5.0))
print(add('abc', 'd'))

# 业务应用
# 检查实参类型
# __annotations__是一个字典,其中包括返回值类型的声明。
# inspect模块:提供回去对象信息的函数,可以检查函数和类、类型检查
# signature(callable)函数,可以获取签名(函数签名包含了一个函数的信息,包括:函数名、参数类型、函数所在的类和名称空间及其他信息)

import inspect

def add(x:int, y:int, *args, **kwargs) -> int:
'''
This is add function
:param x: int
:param y: int
:return: int
'''
return x + y

print('0 ', add.__annotations__) # 普通字典
sig = inspect.signature(add) # 拿到add函数签名((x:int, y:int, *args, **kwargs) -> int)
print('---------------------')
print(sig)
print('1 params: ', sig.parameters) # 返回OrderedDict(有序字典)
print('2 return: ', sig.return_annotation) # 返回值注解
print('3 ', sig.parameters['x'])
print('4 ', sig.parameters['x'].annotation) # 参数注解
print('5 ', sig.parameters['args'])
print('6 ', sig.parameters['args'].annotation) # 空类型 inspect._empty
print('7 ', sig.parameters['kwargs'])
print('8 ', sig.parameters['kwargs'].annotation) # 空类型 inspect._empty

# inspect模块
# inspect.isfunction(add) 是否是函数
# inspect.ismethod(add) 是否是类的方法
# inspect.isgenerator(add) 是否是生成器对象
# inspect.isgeneratorfunction(add) 是否是生成器函数
# inspect.isclass(add) 是否是类
# inspect.ismodule(inspect) 是否是模块
# inspect.isbuiltin(print) 是否是内建对象

# inspect模块 - parameter对象
# 保存在元组中,只读 OrderedDict([('x', <Parameter "x:int">), ('y', <Parameter "y:int">), ('args', <Parameter "*args">), ('kwargs', <Parameter "**kwargs">)])
# name 参数名
# annotation 参数注解,可能没有定义
# default 参数缺省值,可能没有定义
# empty 特殊的类,用来标记default属性或者注释annotation属性的空值
# kind 实参如何绑定到形参
# POSITIONAL_ONLY 值必须是位置参数提供
# POSITIONAL_OR_KEYWORD 值可以作为关键字或者位置参数提供
# VAR_POSITIONAL 可变位置参数,对应*args
# KEYWORD_ONLY keyword_only参数,对应*或者*args之后出现的非可变关键字参数
# VAR_KEYWORD 可变关键字参数,对应**kwargs

def add2(x, y:int=11, *args, z, t=10, **kwargs) -> int:
return x + y

sig = inspect.signature(add2)
print('================================')
print('1 ', sig)
print('2 params ', sig.parameters)
print('3 return ', sig.return_annotation)
for i, item in enumerate(sig.parameters.items()):
name, param = item
print(i+1, name, '\n', param.annotation, '\n', param.kind, '\n', param.default)
print(param.default is param.empty, end='\n\n')

# 装饰器
from functools import wraps
def checker(fn):
@wraps(fn) # Decorator factory
def wrapper(*args, **kwargs):
# 检查实参
print(args, kwargs)
sig = inspect.signature(fn)
params = sig.parameters # 有序字典
# 位置参数检查
param_list = tuple(params.keys()) # 转换成有序的元组
for i, v in enumerate(args):
k = param_list[i] # 拿到key
if isinstance(v, params[k].annotation): # 根据key拿到注解
print(v, ' is ', params[k].annotation)
else:
print(v, ' is not ', params[k].annotation)
# 关键参数检查
for k,v in kwargs.items():
if isinstance(v, params[k].annotation):
print(v, ' is ', params[k].annotation)
else:
errstr = '{} {} {}'.format(v, 'is not', params[k].annotation)
print(errstr)
raise TypeError(errstr) # 抛出异常
result = fn(*args, **kwargs)
return result
return wrapper

@checker
def add3(x:int, y:int=8) -> int:
return x + y

print('================================')
print(add3(4, y=5))
add3('abc', 'bcd')
print(add3(4))

转载于:https://www.cnblogs.com/lizitest/p/9658001.html

http://www.lbrq.cn/news/1244233.html

相关文章:

  • 做网站就上凡科建设/天津最新消息今天
  • seo建站是什么/中国疫情今天最新消息
  • 合肥网站建设费用/百度统计收费吗
  • 重生做二次元网站/网络推广的目标
  • 做的网站适应屏幕大小/seo网页推广
  • 专业做学校网站的公司/腾讯云1元域名
  • 容桂网站制作咨询/北京网站seo
  • 站酷网官网入口/厦门seo排名优化公司
  • 在线教育网站建设方案/北大青鸟培训机构靠谱吗
  • 南宁企业建站模板/百度怎么找人工客服
  • 宁波网站建设联系方法/深圳纯手工seo
  • 建筑证书兼职网站/南宁seo优化
  • 行唐县做网站电话/seo网络推广企业
  • 网站维护英文/seo是什么的缩写
  • 高校网站如何建设论文/南宁百度关键词推广
  • 宝安做棋牌网站建设/关键词优化案例
  • 国土资源网站建设方案/百度免费推广怎么操作
  • 开发网站监控推荐/手机如何制作自己的网站
  • 域名费用和网站服务器费用是同样的吗/广东: 确保科学精准高效推进疫情
  • 温州网站系统开发/网站建设平台哪家好
  • asp网站开发的实训报告/零基础学什么技术好
  • 哪些网站可以做公司制度/网站建设需要多少钱?
  • 贵州专业网站建设公司/优秀网站设计赏析
  • 一个人在线观看免费高清视频动漫/小红书seo排名帝搜软件
  • 帝国手机网站怎么做/软文发布系统
  • 河北永生建筑工程网站/百度网盘怎么提取别人资源
  • 福州做推广有哪些网站/网络软文怎么写
  • 老外做汉字网站/比较经典的营销案例
  • 深圳网站建设联系方式/谷歌搜索引擎
  • 手机网站特效/营销公司排行
  • 查看主板信息的3种方法
  • LRU缓存淘汰算法的详细介绍与具体实现
  • Vue2 项目实现 Gzip 压缩全攻略:从配置到部署避坑指南
  • 在SQL SERVER 中,用SSMS 实现存储过程的每日自动调用
  • android MVC/MVP/MVVM/MVI架构发展历程和编写范式
  • 力扣刷题日常(9-10)(待完善)