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 内置类型
输出:
当函数加上注解时,可以看出当传入不对的类型时,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会提示我们这个参数有哪些属性和方法。
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("未能创建对象~")
|