Python的函数

本文最后更新于 2026年3月8日

本文未完待续

1.定义

1.函数代码以def关键字开头,后接函数标识符名称和圆括号()
2.任何传入的参数和自变量必须放在圆括号内,圆括号中定义参数
3.函数内容以冒号:开始,需要缩进
4.return表达式结束函数,返回一个值给调用方,不带表达式的return相当于返回None

def 函数名(参数列表):
    函数体
    return 返回值

例:

def greet(name, age):
    print("Hello World")

2.类型注解 Type Hints

Python函数参数不需要声明类型,解释器会自动推断,但是会带来难以理解,隐藏BUG,开发效率低下等问题,因此类型注解通过引入可选的类型信息解决这些问题,明确指出函数和返回值的类型,让代码更加健壮可维护。

在实现复杂逻辑和对外提供公共接口时,都应当使用类型注解

例:
func.py

def greet(name: str, age: int) -> str:
    return f"Hello  World {name}, age {age}"

但是,调用时仍然可以不遵守

func.py

def greet(name: str, age: int) -> str:
    return f"Hello  World {name}, age {age}"

if __name__ == '__main__':
    print( greet('lzj', 12.6) )

此时可以通过mypy工具包,对我们的代码进行检测,会检测出问题

先安装mypy工具 pip install mypy,再进行检测

PS D:\PycharmProjects\python-lang-test> mypy .\func\func.py
func\func.py:5: error: Argument 2 to "greet" has incompatible type "float"; expected "int"  [arg-type]
Found 1 error in 1 file (checked 1 source file)

如果要彻底避免,需要进行严格类型检查

def add(a: int, b: int) -> int:

    if not isinstance(a, int):
        raise TypeError(f"参数a期望类型int,实际传入{type(a).__name__}")
    if not isinstance(b, int):
        raise TypeError(f"参数b期望类型int,实际传入{type(b).__name__}")
    return a + b

result2 = add('5', 3)
print(result2)
Traceback (most recent call last):
  File "D:\PycharmProjects\python-lang-test\func\func.py", line 9, in <module>
    result2 = add('5', 3)
  File "D:\PycharmProjects\python-lang-test\func\func.py", line 4, in add
    raise TypeError(f"参数a期望类型int,实际传入{type(a).__name__}")
TypeError: 参数a期望类型int,实际传入str

对于参数是复杂数据类型的写法

from typing import List, Dict, Tuple, Set

#  只包含整数的列表
lst: List[int] = [1, 2, 3, 4, 5] # List<Integer> numbers

#  键为字符串、值为整数的字典
dic: Dict[str, int] = {"z3": 95, "li4": 88}

#  包含整数、字符串、布尔值的元组
tup: Tuple[int, str, bool] = (25, "z3", True)

#  只包含字符串的集合
s: Set[str] = {"z3", "li4", "w5"}

在函数返回值是某种特定类型或None时使用Optional

例:dic.get(name)可能返回字典的值,也可能在没有值时返回None

from typing import Optional

def age(name: str) -> Optional[int]:
    dic = {'a':16, 'b':17, 'c':18}
    return dic.get(name)

if __name__ == '__main__':
    print(age('dd'))
    print(age('a'))
None
16

"如果文章对您有帮助,可以请作者喝杯咖啡吗?"

微信二维码

微信支付

支付宝二维码

支付宝


Python的函数
https://blog.liuzijian.com/post/python/2026/01/10/python-function/
作者
Liu Zijian
发布于
2026年1月10日
更新于
2026年3月8日
许可协议