Python函数

一、函数的基本概念

函数是一段可重复使用的代码块,用于执行特定任务。为什么要使用函数,一是可读性,二是便于维护,三是可重复使用。如果一段只需要使用一次,不建议你使用函数。

定义函数示例:

python 复制代码
# 定义1个函数
def greet_user(first_name,last_name):
    # print(f"你好,{username},{con}")
    full_name = f'{first_name} {last_name}'
    return full_name

#调用函数
# greet_user()   #不传递参数会报错
print(greet_user('黄','四喜'))

函数定义使用def关键字,后面跟着函数名和括号内的参数列表。函数体缩进,可以包含多行代码。函数可以使用return语句返回一个值,如果不写return,则默认返回None

二、函数中的参数

1.形参和实参

形参:在上面的示例代码中,first_name 和 last_name是形参,形参可以设置一个初始值,可以避免调用函数时没有实参传递导致程序报错。

实参:在调用函数时传递给函数的信息,实参对应形参的位置

2.位置实参的顺序很重要

当上面的函数将姓和名颠倒输入后,输出的内容就会颠倒

3.关键字实参

如果你要避免位置实参输入错误的情况出现,可以在用关键字实参,即实参前面加上形参,将值和形参名称关联起来,格式:形参=实参

python 复制代码
# 定义1个函数
def greet_user(first_name,last_name):
    # print(f"你好,{username},{con}")
    full_name = f'{first_name}{last_name}'
    return full_name

#调用函数
# greet_user()   #不传递参数会报错
print(greet_user('黄','四喜'))  # 输出:黄四喜

print(greet_user('四喜','黄'))  # 输出:四喜黄
print(greet_user(last_name='四喜',first_name='黄'))  # 输出:黄四喜

4.给形参设置默认值

给形参设置一个默认值,这样在调用函数时即使没有实参传递,也不会报错,而是会直接使用形参的默认值进行计算

python 复制代码
#定义1个加法
def add(a=0,b=0):
    return a + b

print(add())  #输出:0
print(add(1,1))  #输出:2

5.可变参数

即形参的数量不固定,传递参数时可以是任意的,但是要符合函数的使用逻辑。在形参前面加个星号(*),即让python创建一个形参元组,该元组包含函数收到的所有值。两个星(**)表示传递键值对。

python 复制代码
# *args 接收任意数量的位置参数
def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3, 4, 5))  # 输出: 15

# **kwargs 接收任意数量的关键字参数
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, city="New York")

6.函数作用域

python 复制代码
global_var = "I'm global"

def test_scope():
    local_var = "I'm local"
    print(global_var)  # 可以访问全局变量
    print(local_var)   # 可以访问局部变量

# 修改全局变量需要声明
counter = 0

def increment():
    global counter  # 声明使用全局变量
    counter += 1

increment()
print(counter)  # 输出: 1

7.参数类型提示

设定形参的时候,可以对函数的类型进行提示。

python 复制代码
def add(a: int, b: int) -> int:
    """返回两个整数的和"""
    return a + b

def process_data(data: list[str]) -> dict:
    """处理字符串列表,返回字典"""
    return {item: len(item) for item in data}

8.递归函数

python 复制代码
def factorial(n):
    """计算阶乘"""
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(5))  # 输出: 120

9.导入模块中的函数

你创建了一个函数full_name(),把它存储在一个名为name.py的python文件中,你需要导入name文件,然后才能调用full_name()函数。

name.py代码:

python 复制代码
# 定义返回所有名字
def full_name(first_name,last_name):
    # print(f"你好,{username},{con}")
    full_name = f'{first_name}{last_name}'
    return full_name

调动文件代码:

python 复制代码
# 导入name模块
import name

# 调用name模块中的full_name()函数
full_name = name.full_name('许','三多')
print(full_name)  #输出:许三多

三、函数实践建议

  1. 单一职责:每个函数只做一件事

  2. 明确命名:使用动词或动词短语命名函数

  3. 适当长度:函数不宜过长,保持可读性

  4. 使用文档字符串:为复杂函数添加说明

  5. 避免副作用:尽量减少函数对外部状态的修改

  6. 参数数量:避免过多参数(通常不超过5个)

相关推荐
用户8356290780512 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户8356290780512 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
你好潘先生10 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师11 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码11 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf11 小时前
FastAPI 如何连接 MySQL
后端·python
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户8356290780511 天前
使用 Python 在 PDF 中创建与管理书签
后端·python
MeixianAgent1 天前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
咕白m6251 天前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python