函数定义方式
Python:
def my_function(param1, param2, keyword_param=None):
return param1 + param2 + (keyword_param if keyword_param is not None else 0)
Python 使用 def 关键字来定义函数。参数类型不需要显式声明,Python 是动态类型语言。
C/C++:
int my_function(int param1, int param2) {
return param1 + param2;
}
C/C++ 中使用 int, float, char 等类型来明确指定参数类型。
Java:
public int myFunction(int param1, int param2) {
return param1 + param2;
}
Java 中同样需要明确指定参数类型。
函数作为参数传递
在 Python 中,函数可以作为参数传递给其他函数,这使得函数式编程成为可能。
def apply_operation(operation, a, b):
return operation(a, b)
定义一个加法函数
def add(a, b):
return a + b
定义一个减法函数
def subtract(a, b):
return a - b
result_add = apply_operation(add, 5, 3)
result_subtract = apply_operation(subtract, 5, 3)
print(result_add) # 输出: 8
print(result_subtract) # 输出: 2
不定长参数
Python 支持不定长参数,允许函数接受任意数量的参数。不定长参数有两种形式:
*args (非关键字参数):
def example_function(*args):
for arg in args:
print(arg)
example_function(1, 2, 3, "hello") # 输出: 1 2 3 hello
**kwargs (关键字参数):
def example_function(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
example_function(name="Alice", age=30) # 输出: name: Alice age: 30
键=值参数(默认参数)
在 Python 中,函数可以接受带有默认值的参数。这使得调用函数时可以选择性地提供某些参数。
def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"
print(greet("Alice")) # 输出: Hello, Alice!
print(greet("Bob", "Hi")) # 输出: Hi, Bob!
其中如果全是键=值的参数传递可以不按照顺序,如果有直接传入的参数则写到最前面。
匿名函数(Lambda 表达式)
Python 中可以使用 lambda 表达式来创建匿名函数。这些函数通常用于简单的操作,不适合复杂的逻辑。
add = lambda x, y: x + y
print(add(5, 3)) # 输出: 8
可以直接在函数中使用
result = apply_operation(lambda x, y: x * y, 5, 3)
print(result) # 输出: 15
弊端
可读性: 过度使用 lambda 表达式会使代码难以阅读和理解,尤其是当表达式复杂时。
调试困难: 匿名函数缺少名称,这使得在调试时难以定位错误。
功能限制: lambda 表达式只能包含简单的单行表达式,不能包含复杂的逻辑如条件语句、循环等。