1.介绍
Python
是一门动态语言,声明函数的参数时,并不需要声明类型
def add(a, b):
return a + b
上面的示例,对于使用这块代码的人来说,就会比较模糊。a
和b
我应该传什么类型的数据呢?传错了会怎么样呢?如下
def add(a, b):
return a + b
if __name__ == "__main__": # 实例化-下单类
print("传两列表:", add([1, 2, 3, 4], [10, 10, 10, 10]))
print("传两整数:", add(1, 10))
print("传两字符串:", add("您", "好"))
print("传两字典:", add({'a': 1}, {'b': 2}))
# ---------------------- 输出 ----------------------
传两列表: [1, 2, 3, 4, 10, 10, 10, 10]
传两整数: 11
传两字符串: 您好
Traceback (most recent call last):
File "/Users/liuqh/ProjectItem/PythonItem/python-learn-demo/main.py", line 12, in <module>
print("传两字典:", add({'a': 1}, {'b': 2}))
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/liuqh/ProjectItem/PythonItem/python-learn-demo/main.py", line 5, in 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](https://img-blog.csdnimg.cn/img_convert/e880aa815d765c54dae83d5c9fbdb6b7.png)
输出:
传入数字: 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](https://img-blog.csdnimg.cn/img_convert/064aba117a6e663fd9b5945a9e98b492.png)
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 多平台发布