目录
前言
函数是一段完成特定任务的代码块,可以通过定义、调用和传递参数来实现代码的模块化和重复利用,提高开发效率和代码质量。
1. 函数的定义
函数是一个封装了特定功能的代码块,通过给定的名称来标识。在 Python 中,函数定义的基本语法如下:
图解:
def function_name(param1, param2, ...):
"""
:param strs:
:return: #文档字符串(docstring):用于描述函数的作用、参数和返回值等信息
"""
# 函数体:实现具体功能的代码块
statement(s)
return expression # expression 可选的返回语句
-
函数名:唯一标识函数的名称,应该使用有描述性的名字,符合命名规范,与变量命名规则差不多。可以参考:0基础学python-3:注释,关键字和变量命名规则-CSDN博客
-
参数:可选的,用于接收输入值的变量。可以有零个或多个参数,可以是位置参数、默认参数、可变长参数等。
-
函数体:包含实现函数功能的一组语句。函数被调用时,这些语句会执行。
-
返回值:可选的,用于向函数调用者返回结果。如果没有明确的返回语句,函数会返回
None
。
2. 函数的调用
函数调用是指执行函数体内的代码的过程。调用函数时需要使用函数名和必要的参数(如果函数定义了参数)。
# 调用函数
result = function_name(argument1, argument2, ...)
# 例子
def py_1():
print("hello world")
return 0
a = py_1()
print(a)
-
位置参数:按照函数定义时参数的顺序传递给函数。
-
关键字参数:指定参数名来传递参数,可以改变参数的顺序,提高代码的可读性。
输出: 函数py_1内的print语句执行,return 后面的值也被返回打印
hello world
0
3. 函数的参数
在函数定义时,可以指定多种类型的参数。除必选参数外,还可使用默认参数、可变参数、关键字参数和命名关键字参数。
注意!参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
< 1 > 必选参数
又名位置参数,调用函数时必须按顺序提供,不多不少。
def greet(name, message):
print(f"Hello, {name}! {message}")
greet("Alice", "How are you?")
输出:
Hello, Alice! How are you?
< 2 > 默认参数
在函数定义时为参数指定默认值。
def greet(name, message="Good morning!"):
print(f"Hello, {name}! {message}")
greet("Alice")
输出:
Hello, Alice! Good morning!
但是!再次调用函数,并且用新的参数时,会将默认参数覆盖再执行函数内容
greet("Alice!", "You look so pretty")
输出:
Hello, Alice!! You look so pretty
< 3 > 可变参数
使用 *args
接收不定数量的位置参数,作为元组(tuple)传递给函数。
def sum_all(*args):
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2, 3, 4))
输出:
10
< 4 > 关键字参数
使用 **kwargs
接收不定数量的关键字参数,作为字典(dict)传递给函数。
def print_info(**kwargs):
for key, value in kwargs.items(): # 取出字典的键和值分别放入key和value
print(f"{key}: {value}")
print_info(name="Alice", age=30, city="New York")
输出:
name: Alice
age: 30
city: New York
< 5 > 命名关键字参数
命名关键字参数是指在函数定义中,在可变位置参数 *args
之后使用的参数,这些参数必须在调用函数时以关键字的形式提供。这种类型的参数在定义时,前方有*args
,则直接在后方定义;若无,则要用*来标识。
def greet(name, age, *, city="Unknown", job="Unknown"):
print(f"Hello, I am {name}. I am {age} years old, living in {city} and working as a {job}.")
# 函数调用示例
greet("Alice", 30, city="New York", job="Engineer")
# city 和 job 是命名关键字参数,在调用时需指定关键字
输出:
Hello, I am Alice. I am 30 years old, living in New York and working as a Engineer.
4.注意事项
-
函数命名:使用有意义的函数名,符合命名规范,有助于代码的可读性和维护性。
-
参数传递:确保调用函数时传递的参数类型和数量与函数定义相匹配,或者使用关键字参数明确传递参数值。
-
返回值:理解函数的返回值类型,并根据需要处理返回值或者忽略返回值。
-
文档字符串:使用文档字符串描述函数的作用、参数、返回值等信息,方便他人使用和理解你的函数。
-
函数的独立性:每个函数应该实现一个明确的任务,保持功能单一,便于复用和测试。
-
异常处理:在函数内部考虑可能的异常情况并适当处理,提高函数的健壮性和稳定性。