python函数

python函数--把相同或相似功能的代码封装在一起,实现一次编写,多次调用的效果

一、函数的创建与分类

创建:

def 函数名(参数列表): #形参
    函数体(return 值)

分类:

有参无返:接受参数,但不返回结果(return 可省略)

有参有返:接受参数,并通过return返回结果,可赋值给变量

无参:不接受参数

二、函数参数类型:

1、位置参数--调用函数时,传入的实参数量、顺序必须与定义时的形参一一对应

def add(a, b):
    return a + b
print(add(2, 3))  # 输出 5

2、关键字参数--使用 形参名 = 实参值 的形式传递参数,可以不遵循形参的顺序

⚠️若传入未定义的参数名,程序会报错

def add(a, b, c):
    return a + b + c
print(add(c=3, b=2, a=3))  # 输出 8

3、默认参数--为参数指定默认值。调用时若未传入该参数,则使用默认值

⚠️默认参数必须定义在所有位置参数之后,否则会报语法错误

def student(age, name='summer'):
    print(f'年龄:{age},姓名:{name}')
student(8)           # 输出:年龄:8,姓名:summer
student(8, 'jmeter') # 输出:年龄:8,姓名:jmeter(覆盖默认值)

4、可变参数--用于接收不确定数量的实参

1)基于元组(*args)--接收任意多个位置参数,并将其打包成一个元组

def print_name(*name):
    print(name, type(name))
print_name('summer', 'python', 'jmeter')  # 输出:('summer', 'python', 'jmeter') <class 'tuple'>

2)基于字典(**kwargs)--接收任意多个关键字参数,并将其打包成一个字典

def student_info(**info):
    print(info, type(info))
student_info(name='Alice', age=20)  # 输出:{'name': 'Alice', 'age': 20} <class 'dict'>

3)结合使用

*args 必须在前,**kwargs 在后

def show(*scores, **name):
    total = sum(scores)
    print(f'{name} 的总分是:{total}')
show(138, 125, 150, 姓名='Alice', 学号=2024003)
# 输出:{'姓名': 'Alice', '学号': 2024003} 的总分是:413

三、变量作用域

1、局部变量--在函数内部定义的变量,只能在函数体内访问。函数参数也属于局部变量

def local_var(x):
    s = 10
    return s + x
print(local_var(20))
print(s)  # 报错,因为 s 是局部变量,外部无法访问

2、全局变量

在函数外部定义的变量,可在整个程序中访问。

⚠️若要在函数内部修改全局变量,需使用 global 关键字声明。

a = 2  # 全局变量
def calc(b, c):
    global f   # 声明 f 为全局变量
    f = 6
    d = 5      # 局部变量
    return a + b + c + d
print(calc(2, 3))  # 输出 12
print(a + f)       # 输出 8(全局 a + 全局 f)

四、常用内置函数与高阶用法

类别 说明 示例
zip() 将多个可迭代对象对应位置打包成元组 zip(origin,userInput)
map() 对可迭代对象每个元素执行函数 map(str, facs)
eval() 执行字符串表达式 eval('1+2')返回 3
isinstance() 判断对象类型 isinstance(n, int)
join() 将序列元素用分隔符连接成字符串 '*'.join(map(str, facs))
sorted() 返回排序后的列表 sorted(seq)
random 模块 生成随机数、随机选择 randint(), random(), sample()
``itertools` 模块 循环迭代器、组合生成器 randint(), random(), sample()

五、函数练习

1、斐波那契数列
def fib():
    a, b = 1, 1
    while True:
        yield a
        a, b = b, a + b
f = fib()
for _ in range(10):
    print(next(f), end=' ')
2、判断素数(用于哥德巴赫猜想验证)
def is_prime(p):
    if p == 2: return True
    if p % 2 == 0: return False
    for i in range(3, int(p**0.5)+1, 2):
        if p % i == 0:
            return False
    return True
3、冒泡排序(支持升序/降序)
def bubble_sort(lst, reverse=False):
    n = len(lst)
    for i in range(n):
        swapped = False
        for j in range(n - i - 1):
            if (lst[j] > lst[j+1]) if not reverse else (lst[j] < lst[j+1]):
                lst[j], lst[j+1] = lst[j+1], lst[j]
                swapped = True
        if not swapped:
            break
    return lst
4、二分查找(要求列表有序)
def binary_search(lst, value):
    left, right = 0, len(lst) - 1
    while left <= right:
        mid = (left + right) // 2
        if lst[mid] == value:
            return mid
        elif lst[mid] < value:
            left = mid + 1
        else:
            right = mid - 1
    return False
5、蒙特卡罗方法计算Π
from random import random
def estimate_pi(times):
    hits = 0
    for _ in range(times):
        x, y = random()*2 - 1, random()*2 - 1
        if x*x + y*y <= 1:
            hits += 1
    return 4 * hits / times

六、总结

  • 函数定义def + 函数名 + 参数 + 函数体 + 可选 return
  • 参数类型:位置、关键字、默认、可变(*args**kwargs)。
  • 变量作用域:局部变量(函数内)和全局变量(函数外,需用 global 修改)。
  • 常用技巧:生成器(yield)、递归、内置高阶函数(map, zip, sorted 等)。

此文档涵盖了从基础定义到典型算法的核心内容,可作为函数学习的速查与练习指南。

posted @ 2026-07-27 16:55  珉好好  阅读(4)  评论(0)    收藏  举报