Python学习(六):函数注解

1.介绍

Python是一门动态语言,声明函数的参数时,并不需要声明类型

def add(a, b):
    return a + b

上面的示例,对于使用这块代码的人来说,就会比较模糊。ab我应该传什么类型的数据呢?传错了会怎么样呢?如下

def add(a, b):
    return a + b


if __name__ == "__main__":  # 实例化-下单类
    print("传两列表:", add([1234], [10101010]))
    print("传两整数:", add(110))
    print("传两字符串:", add("您""好"))
    print("传两字典:", add({'a'1}, {'b'2}))
    
# ---------------------- 输出 ----------------------
传两列表: [123410101010]
传两整数: 11
传两字符串: 您好
Traceback (most recent call last):
  File "/Users/liuqh/ProjectItem/PythonItem/python-learn-demo/main.py", line 12in <module>
    print("传两字典:", add({'a'1}, {'b'2}))
                   ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/liuqh/ProjectItem/PythonItem/python-learn-demo/main.py", line 5in add
    return a + b
           ~~^~~
TypeError: unsupported operand type(s) for +: 'dict' and 'dict' 

为了代码更易读,Python 3 提供了一个新的特性: 函数注解

2. 使用语法

2.1 语法

def 函数名(x:类型, y:类型) -> 类型:
    ...
    return x + y

2.2 内置类型

  • int,long,float: 整型,长整形,浮点型
  • bool,str: 布尔型,字符串类型
  • List, Tuple, Dict, Set:列表,元组,字典, 集合
  • Iterable,Iterator:可迭代类型,迭代器类型
  • Generator:生成器类型

3. 参数示例

3.1 内置类型

alt

输出:

传入数字:  6
传入字符串:  ab

当函数加上注解时,可以看出当传入不对的类型时,IDE会给出提示,但是代码还是可以正常运行的。 特别要强调的是,Python 解释器并不会因为这些注解而提供额外的校验,这些类型注解加不加,对代码来说没有任何影响,一样可以正常运行.

3.2 自定义类

# ---------------------- 定义类 ----------------------
class Student:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

    def desc(self):
        print("我是{},今年{}".format(self.name, self.age))

# ---------------------- 接受参数 ----------------------
def operate(s: Student):
    isRes = isinstance(s, Student)
    if not isRes:
        print("参数类型错误~")
        return
    s.desc()

# ---------------------- 代码运行 ----------------------
if __name__ == "__main__":
    # 传个类
    stu = Student("小明"23)
    operate(stu)
    # 传个基本类型
    operate("消息")
    

有了函数注解后,当传入的是个对象时,IDE会提示我们这个参数有哪些属性和方法。

alt

4.返回值示例

4.1 自定义类

内置类型比较简单,这里不在过多演示,接着上面示例,把返回值也加上说明

# ---------------------- 接受参数 ----------------------
def createStudent(name: str, age: int) -> Student | None:
    if age < 10:
        return None
    return Student(name, age)

# ---------------------- 代码运行 ----------------------
if __name__ == "__main__":
    c = createStudent("张三"18)
    if c is not None:
        c.desc()

    c2 = createStudent("哈士奇"1)
    if c2 is None:
        print("未能创建对象~")
        
# ---------------------- 输出 ----------------------   
# 我是张三,今年18
# 未能创建对象~

本文由 mdnice 多平台发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值