Tags: 数据类型 AI 人工智能

Python函数(Functions)的使用与技巧

Python中,函数是一段被命名的代码块,只有在被调用时才会运行。函数通常可以接收输入参数,并在执行完毕后返回一个结果。掌握函数的定义、参数传递、返回值以及更多高级用法,是写出可读、可维护Python代码的基础。

1. 定义和调用函数

1.1 使用def关键词定义

def my_function():
    print("Hello from a function!")

上面只是定义了函数,并没有执行它。想要运行,就需要调用:

my_function()  # 调用函数

运行后将打印“Hello from a function!”。

2. 向函数传递参数(Arguments)

定义函数时可以在括号里列出参数,用于接收外部数据:

def greet(name):
    print("你好, " + name)
greet("小明")
greet("小红")

这里name就是函数定义时的“参数”(parameter),而"小明""小红"是实际调用时传递的“实参”(argument)。

2.1 位置参数与数量严格匹配

默认情况下,函数期望的参数数目和传递的实参数必须一致,否则会报错:

def my_add(a, b):
    print(a + b)
my_add(10, 5)   # 正常: 输出 15
my_add(10)      # 错误: 缺少一个参数

3. 不定数量的参数(*args, **kwargs)

3.1 *args (无名参数)

如果不确定要传多少个参数,可在定义时在前面加*

def my_function(*kids):
    print("最小的孩子是 " + kids[2])
my_function("aimier", "tuobiasi", "liunasi")

这里kids会变成一个元组,可在函数中自由使用。

3.2 **kwargs (关键字参数)

如果要接收任意数目的“键=值”形式的参数,则可用**

def my_function(**kid):
    print("他的姓是 " + kid["lname"])
my_function(fname="tuobiasi", lname="li")

这里kid是一个字典,可以通过kid["lname"]访问传入的具体键值。

4. 默认参数值

函数在定义参数时,可以指定一个默认值。若调用函数时不传该参数,则使用默认值:

def show_country(country="Nuowei"):
    print("我来自 " + country)
show_country("Riben")   # 自定义值
show_country()          # 使用默认值Nuowei

5. 向函数传递列表、字典等

Python函数可接收任意类型参数,比如列表:

def print_foods(foods):
    for x in foods:
        print(x)
fruits = ["pingguo", "xiangjiao", "yingtao"]
print_foods(fruits)

在函数内部,该列表依然保持可迭代的性质。

6. 返回值 (return)

如果你想让函数在执行后返回一个结果给调用方,可用return

def multiply_by_5(x):
    return 5 * x
print(multiply_by_5(3))    # 15
print(multiply_by_5(5))    # 25

函数遇到return就会结束,并将后面表达式的值返回。

7. 空函数 (pass)

如果暂时不想在函数中写任何代码,可用pass占位:

def my_empty_func():
    pass

8. 仅限位置参数和仅限关键字参数

Python允许指定某些参数只能用位置方式、或只能用关键字方式传递。

8.1 仅限位置参数( / )

def my_func(x, /):
    print(x)
my_func(3)       # OK
my_func(x=3)     # 错误, x只能作为位置参数

8.2 仅限关键字参数( * )

def my_func(*, x):
    print(x)
my_func(x=3)     # OK
my_func(3)       # 错误, x只能作为关键字

8.3 混合( /, *, )

def my_function(a, b, /, *, c, d):
    print(a + b + c + d)
my_function(5, 6, c=7, d=8)  # a,b只能用位置传,c,d只能用关键字

9. 递归函数(Recursion)

函数可以调用自身,这被称为递归(Recursion)。递归在处理某些数学或分层结构问题时很有用。但要注意避免无限递归。

def tri_recursion(k):
    if k > 0:
        result = k + tri_recursion(k - 1)
        print(result)
    else:
        result = 0
    return result
tri_recursion(6)

上述例子里,每次调用tri_recursion会再次调用自身,直到k等于0,然后把结果一级级返回。

总结

  • def:用来定义函数。
  • return:函数结束并返回一个值。
  • *args / **kwargs:可变数量的实参或关键字参数。
  • 默认参数:不传参时使用默认值。
  • 仅限位置/关键字参数/前只能位置传,*后只能关键字传。
  • 递归:函数调用自身,但需注意基线条件防止无限循环。

学会这些函数相关特性后,就能在Python中更灵活地组织和复用代码,编写更简洁、可维护的程序。