Python中定义函数用def关键字,后接函数名、参数和冒号,函数体需缩进;调用时直接使用函数名加括号传参。函数可包含Docstring提升可读性,通过return返回结果,默认返回None。参数支持位置、关键字、默认值、args和*kwargs,还可限制仅位置或仅关键字传参。了解函数应查看Docstring、理解返回值,并借助错误信息调试。进阶特性包括闭包、Lambda匿名函数和装饰器,能实现数据封装、简洁表达式和功能增强,体现Python的灵活性与强大。

Python中定义和调用函数,核心就是用
def
定义一个Python函数,你需要从
def
举个例子,我们定义一个简单的加法函数:
def add_numbers(a, b):
"""
这个函数接收两个数字,并返回它们的和。
这是一个很基础的加法操作。
"""
result = a + b
return result
# 调用这个函数
sum_result = add_numbers(5, 3)
print(f"5 + 3 的结果是: {sum_result}") # 输出: 5 + 3 的结果是: 8
# 也可以不接收返回值,直接调用
add_numbers(10, 20) # 虽然执行了,但结果没有被使用,函数依然会执行这里,
add_numbers
a
b
return result
result
return
None
立即学习“Python免费学习笔记(深入)”;
定义函数时,参数这块儿,Python给了我们很多灵活性,这让函数能适应各种场景。最常见的是位置参数,你传参的顺序必须和函数定义时的顺序一致。比如
def greet(name, message):
greet("张三", "你好")name
message
但有时候,参数顺序容易搞混,或者参数太多了,这时候关键字参数就派上用场了。你可以明确指定参数名来传值,顺序就无所谓了:
greet(message="你好", name="李四")
还有默认参数。
def greet_default(name, message="你好"):
greet_default("王五")message
None
当你不知道会有多少个位置参数时,可以用
*args
def sum_all(*numbers):
sum_all(1, 2, 3)
numbers
(1, 2, 3)
**kwargs
Python 3.8之后,我们甚至可以强制指定某些参数只能按位置传,或者只能按关键字传,通过
/
*
def func(a, b, /, c, *, d):
a
b
d
c
这是个非常实际的问题,尤其当你面对一个不熟悉的函数时。我个人经验是,首先看Docstring。一个好的Docstring会详细说明函数的功能、参数的含义、类型以及返回值是什么。这是了解函数最直接、最权威的途径。很多IDE(比如VS Code、PyCharm)在你输入函数名和括号时,会自动弹出Docstring和参数提示,这简直是开发者的福音。
比如,上面
add_numbers
# 在Python交互式环境中,你可以使用 help() 函数查看任何函数或对象的 Docstring help(add_numbers) # 输出类似: # Help on function add_numbers in module __main__: # # add_numbers(a, b) # 这个函数接收两个数字,并返回它们的和。 # 这是一个很基础的加法操作。
其次,理解return
return
return
return
None
print()
print()
None
def print_hello(name):
print(f"Hello, {name}!")
# 没有return语句
result = print_hello("Alice")
print(f"print_hello 函数的返回值是: {result}") # 输出: print_hello 函数的返回值是: None最后,遇到问题不要怕,Python的错误信息通常很直白。最常见的调用错误是
TypeError
NameError
Python函数的魅力远不止于此,它还有很多强大的进阶特性,能让我们的代码更加灵活和优雅。
一个很有意思的概念是闭包(Closures),这涉及到嵌套函数。简单来说,一个内部函数可以记住并访问其外部(Enclosing)函数的作用域中的变量,即使外部函数已经执行完毕。这在我看来,是一种非常优雅地实现数据封装和行为定制的方式,比如工厂函数或者需要记住特定状态的函数。
def outer_function(msg):
def inner_function():
print(msg) # inner_function 记住了 msg
return inner_function
my_closure = outer_function("Hello from closure!")
my_closure() # 输出: Hello from closure!这里
inner_function
msg
Lambda函数是另一种简洁的函数定义方式,适用于那些只需要一行表达式的简单函数。它们是匿名函数,没有名字。我个人觉得,虽然方便,但过度使用Lambda可能会降低代码可读性,尤其是在表达式变得复杂时,所以我会权衡使用,通常用于
map()
filter()
sorted()
# 传统的函数
def multiply(x, y):
return x * y
# Lambda函数实现相同功能
multiply_lambda = lambda x, y: x * y
print(multiply(2, 3)) # 输出: 6
print(multiply_lambda(2, 3)) # 输出: 6装饰器(Decorators)是Python中一个非常强大的元编程工具。它本质上是一个函数,可以包装另一个函数,在不修改原函数代码的情况下,增加或修改原函数的功能。比如,你可以用装饰器来实现日志记录、性能计时、权限检查等等。这背后的原理其实就是函数作为一等公民的体现:函数可以作为参数传递,也可以作为返回值。虽然理解起来可能需要一点时间,但一旦掌握,它会极大地提升代码的复用性和可维护性,让你的代码更加“干练”。
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Something is happening before the function is called.")
result = func(*args, **kwargs)
print("Something is happening after the function is called.")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
return f"Greetings to {name}"
returned_value = say_hello("Bob")
print(f"Function returned: {returned_value}")
# 输出:
# Something is happening before the function is called.
# Hello, Bob!
# Something is happening after the function is called.
# Function returned: Greetings to Bob这里
@my_decorator
say_hello = my_decorator(say_hello)
这些进阶特性,在我看来,是Python之所以灵活且强大的重要原因。它们让我们可以用更抽象、更优雅的方式来组织和编写代码,处理更复杂的逻辑。虽然初学时可能觉得有点烧脑,但一旦理解了,你会发现它们能解决很多实际问题,让你的Python技能更上一层楼,写出更具Pythonic风格的代码。
以上就是python怎么定义和调用一个函数_python函数定义与调用基础的详细内容,更多请关注php中文网其它相关文章!
python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号