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

相关推荐
万行2 小时前
机器学习&第五章生成式生成器
人工智能·python·算法·机器学习
_李小白2 小时前
【Android FrameWork】延伸阅读:AMS 的 handleApplicationCrash
android·开发语言·python
蕨蕨学AI2 小时前
【Wolfram语言】45.1 数据集
开发语言·wolfram
黎雁·泠崖2 小时前
Java入门篇之吃透基础语法(一):注释+关键字+字面量全解析
java·开发语言·intellij-idea·intellij idea
hqwest2 小时前
码上通QT实战15--监控页面07-打开串口连接
开发语言·qt·多线程·signal·slot·emit·信号和槽
mjhcsp2 小时前
C++ 后缀树(Suffix Tree):原理、实现与应用全解析
java·开发语言·c++·suffix-tree·后缀树
mjhcsp2 小时前
C++ 有限状态自动机(FSM):原理、实现与应用全解析
开发语言·c++·有限状态自动机
万行2 小时前
机器学习&第一章
人工智能·python·机器学习·flask·计算机组成原理