Python函数怎样调用已经定义好的函数?这是每一个刚入门Python的学习者都会遇到的问题。函数是Python中最基本的代码组织单元,把一段具有特定功能的代码封装起来,需要的时候直接调用,既避免了重复劳动,也让程序结构更加清晰。本文将从函数的定义语法讲起,逐步说明调用函数的正确方式、参数传递的几种形式,以及实际开发中常见的函数调用场景。

一、先定义后调用:理解函数的基本语法
在Python中,定义函数使用def关键字,后面跟函数名、一对圆括号和冒号,括号里可以声明参数,冒号下方的缩进代码块就是函数体。例如定义一个简单的问候函数:
def say_hello():
print("你好,欢迎学习Python函数!")
say_hello() # 调用函数,输出问候语上面的代码中,say_hello是函数名,调用时直接写函数名加上一对圆括号即可。这里有一个非常重要的规则:Python解释器是从上往下逐行执行代码的,函数必须先定义,然后才能调用。如果把调用语句写在定义之前,就会抛出NameError错误,提示函数未定义。
再来看一个带参数的例子。函数定义时括号里的参数叫形式参数(形参),调用时传入的具体值叫实际参数(实参):
def add(a, b):
result = a + b
return result
# 调用函数并接收返回值
sum_value = add(3, 5)
print(sum_value) # 输出 8return语句把计算结果返回给调用处,调用方可以用一个变量把它接住。需要注意,函数执行到return就会立即结束,后面的代码不会被执行。如果函数没有写return,Python会默认返回None。
二、函数调用的多种传参方式
实际开发中,调用函数的方式比想象中灵活得多。最常见的是位置参数,也就是按照形参的顺序依次传入实参。除此之外还有关键字参数,调用时明确指定参数名,这样就不必关心顺序:
def introduce(name, age, city):
print(f"我叫{name},今年{age}岁,来自{city}")
introduce("小明", 20, "北京") # 位置参数
introduce(city="上海", name="小红", age=22) # 关键字参数,顺序可以打乱Python还支持默认参数,定义时给形参一个默认值,调用时如果不传这个参数,就自动使用默认值。这在很多内置函数和第三方库里非常常见:
def power(x, n=2):
return x ** n
print(power(5)) # 不传n,使用默认值2,输出25
print(power(5, 3)) # 传入n为3,输出125另外还有可变参数的用法。在形参前加一个星号表示接收任意数量的位置参数,打包成元组;加两个星号表示接收任意数量的关键字参数,打包成字典:
def total(*args, **kwargs):
print("位置参数元组:", args)
print("关键字参数字典:", kwargs)
total(1, 2, 3, name="Python", version=3)掌握了这些传参方式,面对各种函数签名时就能应对自如。建议初学者遵循一个简单原则:位置参数在前,关键字参数在后,可变参数放最后,这也是Python规定的参数顺序。
三、函数嵌套调用与跨模块调用
函数之间是可以互相调用的,这也是函数式编程思想的基础。一个函数的返回值可以作为另一个函数的输入,从而把复杂任务拆解成多个小函数的组合:
def get_circle_area(r):
return 3.14159 * r * r
def print_area(r):
area = get_circle_area(r) # 在函数内部调用另一个已定义的函数
print(f"半径为{r}的圆面积是: {area:.2f}")
print_area(10)嵌套调用时同样要保证被调用的函数已经定义。如果两个函数定义在同一个文件里,只要调用发生在两个函数都定义完成之后就没问题,也就是说函数A内部调用函数B,即使B写在A的后面也可以,因为真正执行A的时候,B早就定义好了。
当项目变大后,函数会分散在不同的模块(文件)中,这时需要先用import语句导入模块,再通过模块名调用其中的函数:
# 文件 mymath.py 中定义了 divide 函数 # 在另一个文件中导入并调用 import mymath result = mymath.divide(10, 2) # 也可以只导入单个函数 from mymath import divide result2 = divide(20, 4)
使用from 模块名 import 函数名的方式可以直接写函数名调用,代码更简洁,但要注意避免函数名冲突。标准库里的函数也是同样的调用方式,比如math.sqrt(16)计算平方根,len()获取序列长度。
四、初学者常见的调用错误与排查
第一种常见错误是忘记加括号。写say_hello只是引用函数对象本身,并不会执行函数,必须写成say_hello()才会真正调用。有些人在打印函数时看到<function say_hello at 0x...>这样的输出,就是因为少了括号。
第二种是缩进错误。Python用缩进区分代码块,函数体必须统一缩进,如果某一行缩进不一致,会引发IndentationError。第三种是参数数量不匹配,传入的实参个数与形参不符会抛出TypeError,提示缺少或多了参数。
def greet(name):
print("你好," + name)
# greet() # 错误:缺少必需的参数
# greet("a","b") # 错误:传了太多参数
greet("Python学习者") # 正确还有一种隐蔽的错误是函数名拼写不一致,比如定义时用get_data,调用时写成了getData,Python会认为这是两个不同的名字,直接报NameError。遇到函数调用报错时,先看错误类型和提示信息,再检查函数定义的位置和参数形式,大部分问题都能快速定位。
总的来说,调用一个已经定义好的Python函数,核心就是函数名加括号加参数这三个要素。理解了定义与调用的先后顺序、灵活的参数传递规则,以及模块导入的调用方式,就为后续学习面向对象和更大型的项目打下了扎实的基础。建议多动手敲几遍示例代码,观察每一步的输出结果,函数调用的概念自然就牢固了。
Python函数调用函数定义Python基础教程修改时间:2026-09-05 05:16:36