推理基础设施 · Python1.1 定义和调用函数
01
函数与代码组织 · 1 / 6

1.1 定义和调用函数

💡 推理服务的每个 HTTP handler 本质都是一个函数

1.1 定义和调用函数

为什么先学函数

推理服务(vLLM / TGI / Triton)暴露给客户端的每一个接口,背后都是 Python 函数——接收请求参数、跑模型前向、返回 JSON。你不把“写函数”练扎实,看推理框架源码会寸步难行。

基本语法

def 函数名(参数):
    """文档字符串(docstring): 说明这个函数做什么"""
    函数体
    return 返回值   # 不写就返回 None
  • def 是关键字,告诉 Python “我要定义一个函数”
  • 函数命名跟变量一样用 snake_case,比如 handle_requestparse_prompt
  • 函数只有被调用才会执行,光定义不调用等于啥也没发生

示范

def greet(name):
    """返回一句问候语"""
    return f"hello, {name}"

print(greet("world"))   # hello, world
print(greet)            # <function greet at 0x...>  看到的是函数对象本身

注意最后一行——打印的是函数对象,不是函数返回值。

✍️ 练习

写一个函数 model_signature(),它不接受任何参数,返回字符串 "Qwen2.5-7B-Instruct"。 然后调用它并用 print 打印结果。

💡 思路提示

点开看提示
  1. 函数名后面有一对括号,里面是参数列表。没参数就留空:def f():
  2. return 是把值“交回”给调用者;没 return 默认是 None
  3. 字符串可以用双引号也可以用单引号,效果一样

✅ 参考解法

写不出来再打开
def model_signature():
    return "Qwen2.5-7B-Instruct"

print(model_signature())

🔍 进阶思考

想清楚“定义函数” vs “调用函数”的区别。

  • print(model_signature) 打印的是函数对象(<function ...>
  • print(model_signature()) 才是打印返回值

为什么这重要? 在推理框架里,“把函数本身传给别人”(比如 sorted(..., key=func))和“把函数的返回值传给别人”是完全不同的两件事。