【人工智能概论】 Python标准库——typing(类型标注)、 assert断言、 @property装饰器和setter装饰器、*args和**kwargs

【人工智能概论】 Python标准库——typing(类型标注)、 assert断言、 @property装饰器和setter装饰器、*args和**kwargs

文章目录

  • 【人工智能概论】 Python标准库——typing(类型标注)、 assert断言、 @property装饰器和setter装饰器、*args和**kwargs
  • 一. typing(类型标注)简介
  • 二. assert断言
  • 三. @property装饰器和setter装饰器
  • 四. *args和**kwargs


一. typing(类型标注)简介

  • 众所周知,Python是弱类型语言,大多情况下函数参数类型或返回值类型是难以知晓的,这可能导致一段时间后忘记了函数需要传什么参数,返回什么类型的结果,造成不必要的麻烦,而typing模块可以很好的解决这个问题。
  • typing的主要功能有:
  1. 作为开发文档附加说明,方便使用者使用时了解传入和返回的参数类型。
  2. 类型检查,防止运行时出现参数、返回值类型不符的情况,模块加入不会影响程序的运行,不会报正式的错误,pycharm支持typing检查错误时会出现黄色警告。
  • 语法:
def 函数名(参数名: 数据类型) -> 返回值类型:
    pass

变量名: 数据类型 = 变量值
  • 常见的标注类型:
  • Union :并集,Union[X, Y]即变量(参数)要么是X类型、要么是Y类型。
  • Optional : Optional[X]与Union[X, None]等价,即它默认允许变量(参数)为None类型。
  • Tuple : 举例:person: Tuple[str, int, float] = (‘Mike’, 22, 1.75),表示person是个元组,其内部元素类型分别为str,int,float。
  • List : 举例:var: List[int or float] = [2, 3.5],表示var是个列表,其内部元素可以是int或float类型;var: List[List[int]] = [[1, 2], [2, 3]],很明显组合使用罢了。
  • Dict: 举例: dic: Dict[str, int],表示dic是键为str类型,值为int类型的字典。
  • Sequence:可能在某些情况下,并不需要严格区分一个变量或参数到底是列表 list 类型还是元组 tuple 类型,此时就可以使用一个更为泛化的类型,叫做 Sequence,其用法类似于 List。

二. assert断言

  • assert通常在代码调试中被使用,被用来判断紧随其后的代码的正确性,如果满足条件(正确),程序自动向后执行,如果不满足条件(错误),便中断当前程序并产生一个AssertionError错误。
  • 举例:
a = -1
assert a < 0
assert a > 0

【人工智能概论】 Python标准库——typing(类型标注)、 assert断言、 @property装饰器和setter装饰器、*args和**kwargs_第1张图片

三. @property装饰器和setter装饰器

  • 举例与简介:
  • Python 提供@property装饰器、setter装饰器,被装饰的方法,可被当作属性来用
  • 举例:定义一个Exam类,为避免直接对内部属性_score进行操作,通过property装饰器、setter装饰器提供的方法实现间接控制属性,这样便起到封装的作用,把一些不想对外公开的属性隐蔽起来,而只是提供方法给用户操作,在方法里面,可以检查参数的合理性等。
class Exam(object):
    def __init__(self, score):
        self._score = score
 
    @property
    def score(self): # 属性访问
        return self._score

    @score.setter
    def score(self, val): # 属性赋值
        if val < 0:
            self._score = 0
        elif val > 100:
            self._score = 100
        else:
            self._score = val
 
if __name__ == '__main__':
	e = Exam(60)
	print(e.score)
 
	e.score = 90
	print(e.score)
 
	e.score = 200
	print(e.score)

四. *args和**kwargs

  • 它俩都是Python中的可变参数。
  • 值得注意的是,argskwargs是可以随便修改的,重点在于***
  • *args : 在传入的参数个数未知,且不需要知道参数名称时使用,它将参数保存成一个元组,元组名为args 。
  • **kwargs : 在传入参数个数未知,但需要知道参数的名称时使用,它将数据保存成一个字典,字典名为kwargs 。
  • 举例:
def args_test(data1, *args, **kwargs):
    print('data1: ',data1)
    print('args:', args)
    print('type_of_args: ', type(args))
    print('kwargs: ' , kwargs)
    print('type_of_kwargs:' ,type(kwargs))
    
args_test(1,2,3,4,5,k1=6,k2=7,k3=8)

【人工智能概论】 Python标准库——typing(类型标注)、 assert断言、 @property装饰器和setter装饰器、*args和**kwargs_第2张图片

你可能感兴趣的:(【人工智能概论】,python,开发语言,数学建模)