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个)

相关推荐
wangsir.14 小时前
测试之自动化测试常用函数
python·测试
微小冷14 小时前
Rust异步编程详解
开发语言·rust·async·await·异步编程·tokio
铁蛋AI编程实战14 小时前
MemoryLake 实战:构建超长对话 AI 助手的完整代码教程
人工智能·python·microsoft·机器学习
A9better14 小时前
C++——不一样的I/O工具与名称空间
开发语言·c++·学习
清水白石00814 小时前
《为什么说 deque 是 Python 滑动窗口的“隐藏神器”?深入解析双端队列的高效之道》
开发语言·python
杜子不疼.14 小时前
Ascend_C自定义算子开发
c语言·开发语言
kjkdd14 小时前
5. LangChain设计理念和发展历程
python·语言模型·langchain·ai编程
摘星编程14 小时前
CANN ops-nn 激活函数算子全解析:从ReLU到GELU的演进与实现
python
WooaiJava14 小时前
流式TTS音频播放项目 - 面试问答(后端)
java·开发语言
love530love14 小时前
【高阶编译】Windows 环境下强制编译 Flash Attention:绕过 CUDA 版本不匹配高阶指南
人工智能·windows·python·flash_attn·flash-attn·flash-attention·定制编译