跳至主要內容

函数实现

blacklad大约 5 分钟PythonPython

函数实现

之前的学习用到了内置的函数,如 print、input、len 等等。这节学习如何创建一个自己的函数。

一、介绍

函数是由多行代码组成的代码块,并包含一个名字。当你定义好一个函数后,就可以多次调用相同的函数,无需重复编写相同的代码。

特点

  1. 重用代码
  2. 提高可读性
  3. 隐藏功能的实现细节

二、定义函数

比如我们要定义一个函数,来计算一个圆的面积。可以这样定义。

  1. 首先使用 def 关键字开始表明要定义一个函数
  2. def 加空格后是函数名称,由开发者来定义(名称需要有意义,符合函数实际执行的功能)
  3. 函数名称后紧挨着的是由括号括起来的,里面是函数的参数,称为形参,多个参数用逗号隔开
  4. 最后以冒号结尾
  5. 紧跟着后面的行都需要进行缩进,缩进的行为该函数内部的代码
  6. 使用return可以返回结果
def 函数名称(形参1,形参2...形参n):
	代码体
	return 变量

这样就定义好了一个函数。

三、函数的使用

使用函数的时候只需要通过函数名加括号,括号内为需要给函数传递参数的值(称为实参),需要保证传递的参数个数和定义的个数相同。

def calc_area(r):
    area = 3.14 * r * r
    return area

area1 = calc_area(16)
print(f"半径为16的圆的面积是{area1}")

area2 = calc_area(2)
print(f"半径为2的圆的面积是{area2}")
半径为16的圆的面积是803.84
半径为2的圆的面积是12.56

显然通过定义好函数后,我们可以多次的调用,复用重复的代码,提升代码的可读性。同时通过参数指定每次执行函数需要改变的地方。

参考上述的代码,你可以定义一个计算长方形周长的函数

四、参数传递

当函数的定义包含多个形参的时候,参数的传递有多种方式将实参和形参对应起来。

1. 位置传递

位置传递是最常用的一种方式,将实参按顺序挨个与形参关联起来。

比如要定义一个计算长方形面积的函数。

def calc_area(x, y):
    print(f"一边的长度为{x}, 另一边的长度为{y}")
    return x * y

area = calc_area(3, 4)
print(f"长为3, 宽为4的长方形的面积为 {area}")
一边的长度为3, 另一边的长度为4
长为3, 宽为4的长方形的面积为 12

可以看到,Python 自动把第一个实参 3 赋值给了 x,第二个实参 4 赋值给了 y。

2. 指定参数名称

在实参传递时,也可以手动指定需要传递给的形参。

calc_area(y = 3, x = 4)

因为指定名字后,即使顺序不一致,也能得到同样的结果。

3. 实参的默认值

在函数定义时,可以给形参指定默认值。这样使用函数时,可以不传递这个参数,函数内部使用默认值进行计算。

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

# 调用函数时传递两个参数 name,greeting
print(greet("Alice", "Hi"))

# 调用函数时只传递一个参数 name
print(greet("Bob"))

Hi, Alice!
Hello, Bob!

4. 不定参数

Python 函数支持使用不定参数来处理任意数量的输入参数。主要有两种类型的不定参数:序列传参和字典传参。

序列传参

在函数定义中使用 *args 可以接收任意数量的位置参数,并将它们作为一个元组传递给函数。

def print_func(*args):
    for arg in args:
        print(arg)

print_func(1, 2, 3)
1
2
3

在调用 example_func 时,传递了三个位置参数 1, 2, 3,它们在函数内部被作为一个元组 args 接收和处理。

字典传参

在函数定义中使用 **kwargs 可以接收任意数量的关键字参数,并将它们作为一个字典传递给函数。

示例:

def print_func(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

example_func(a=1, b=2, c=3)
a: 1
b: 2
c: 3

在调用 example_func 时,传递了三个关键字参数 a=1, b=2, c=3,它们在函数内部被作为一个字典 kwargs 接收和处理。

五、类型声明

类型声明用于明确函数参数和返回值的预期类型,这有助于提高代码的可读性和可维护性。虽然 Python 是动态类型语言,但通过类型提示(type hints),我们可以给出变量和函数的类型信息。

参数类型声明

参数类型声明通过在参数名后面添加冒号 : 和类型来实现。在函数定义时,可以为每个参数指定一个类型提示。

def greet(name: str, age: int) -> None:
    print(f"Hello, {name}. You are {age} years old.")

greet("Alice", 30)
Hello, Alice. You are 30 years old.

name 参数被声明为 str 类型,age 参数被声明为 int 类型。这意味着在调用 greet 函数时,期望传入一个字符串和一个整数。

返回值类型声明

返回值类型声明通过在函数定义的参数列表后面使用箭头 -> 和类型来实现,表示函数的返回值类型。

def add(a: int, b: int) -> int:
    return a + b

result = add(3, 4)
print(result)
7

add 函数被声明为接受两个 int 类型的参数,并返回一个 int 类型的值。

上次编辑于:
贡献者: blacklad