echidna

 

Python函数基础小结

Python函数基础笔记


目录

  1. 函数的概念
  2. 函数的定义
  3. 函数的参数
    • 位置参数
    • 关键参数
    • 默认参数
    • 不定长参数(*args**kwargs
  4. 参数传递的扩展操作
    • *** 的解包
  5. 传递不可变与可变对象
  6. 函数的返回值
  7. 变量的作用域
    • 局部变量
    • 全局变量
    • globals()locals()
  8. 函数嵌套与递归
  9. 练习题

1. 函数的概念

  • 作用:封装重复使用的代码块,提高开发效率和可维护性。
  • 分类
    • 内建函数:Python预定义的函数(如 print())。
    • 自定义函数:用户根据需求定义的函数。

2. 函数的定义

语法格式

def 函数名(参数列表):
    """函数说明文档(可选)"""
    函数体
    return [表达式]  # 可选,默认返回 None

示例

def add(a, b):
    """求两数之和"""
    sum = a + b
    return sum

result = add(2, 5)
print("输出结果为 %d" % result)  # 输出:7

注意事项

  • 函数名需符合标识符规则,不能与关键字重名。
  • 参数列表的括号不可省略,多个参数用逗号分隔。
  • 函数体必须缩进,以冒号起始。

3. 函数的参数

3.1 位置参数

  • 实参与形参按顺序一一对应。
def stu_print(name, score):
    print("姓名 %s\n成绩 %.2f" % (name, score))

stu_print("小倍", 90)  # 输出:姓名 小倍,成绩 90.00

3.2 关键参数

  • 通过形参名指定实参,忽略顺序。
stu_print(score=50, name="第三")  # 输出:姓名 第三,成绩 50.00

3.3 默认参数

  • 默认参数必须定义在非默认参数右侧。
def stu_print(name, score, assess="好学生"):
    print("姓名 %s\n成绩 %.2f\n评价 %s" % (name, score, assess))

stu_print("小信", 90)  # 输出:评价 好学生
stu_print("第三", 50, "请努力")  # 输出:评价 请努力

3.4 不定长参数

  • *args:接收多余位置参数,保存为元组。
  • **kwargs:接收多余关键字参数,保存为字典。
def sum(a, b, *args, **kwargs):
    total = a + b
    for num in args:
        total += num
    for key in kwargs:
        total += kwargs[key]
    return total

print(sum(1, 2, 3, 4))           # 输出:10
print(sum(1, 2, c=3, d=4))       # 输出:10
print(sum(1, 2, 3, 4, c=5, d=6)) # 输出:21

4. 参数传递的扩展操作

*** 的解包

  • *:解包列表/元组为位置参数。
  • **:解包字典为关键字参数。
def sum(a, b, c):
    return a + b + c

tuple1 = (1, 2, 3)
print(sum(*tuple1))  # 输出:6

dict1 = {'a': 1, 'b': 2, 'c': 3}
print(sum(**dict1))  # 输出:6

5. 传递不可变与可变对象

  • 不可变对象(数字、字符串、元组):函数内修改会创建新对象。
  • 可变对象(列表、字典):函数内修改直接影响原对象。
def test(alist):
    alist.append(4)
    print(alist)  # 输出:[1, 2, 3, 4]

list1 = [1, 2, 3]
test(list1)
print(list1)  # 输出:[1, 2, 3, 4](原列表被修改)

6. 函数的返回值

  • return:终止函数并返回结果,未指定时默认返回 None
  • 返回多个值时以元组形式保存。
def print_max(a, b):
    if a > b:
        return a, a - b
    else:
        return b

print(print_max(8, 6))  # 输出:(8, 2)(类型为元组)

7. 变量的作用域

7.1 局部变量

  • 函数内定义的变量,仅在函数内有效。
def func1():
    a = 2
    print(a)  # 输出:2

func1()
# print(a)  # 报错:NameError

7.2 全局变量

  • 使用 global 在函数内声明全局变量。
a = 99  # 全局变量

def func1():
    global b
    b = 8
    print(b)  # 输出:8

func1()
print(b)  # 输出:8

7.3 globals()locals()

  • 查看全局和局部变量(返回字典)。
a = 99

def func1():
    x, y = 2, 3
    print(locals())  # 输出:{'x': 2, 'y': 3}

func1()
print(globals())  # 输出全局变量字典

8. 函数嵌套与递归

8.1 函数嵌套

  • 函数内部调用其他函数。
def outer():
    print("外层函数")
    def inner():
        print("内层函数")
    inner()

outer()  # 输出:外层函数 → 内层函数

8.2 递归函数

  • 函数调用自身,需有终止条件。
def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n - 1)

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

9. 练习题

  1. 求n个数字的和
def sum_numbers(*args):
    return sum(args)
  1. 返回奇数位元素
def get_odd_elements(sequence):
    return list(sequence[::2])
  1. 保留列表前两个元素
def keep_first_two(lst):
    return lst[:2] if len(lst) > 2 else lst
  1. 截断字典值的长度
def truncate_dict_values(d):
    return {k: v[:2] if len(v) > 2 else v for k, v in d.items()}
  1. 模拟轮盘抽奖
import random

def simulate_prize():
    counts = {'一等奖': 0, '二等奖': 0, '三等奖': 0}
    for _ in range(1000):
        num = random.random()
        if num <= 0.08:
            counts['一等奖'] += 1
        elif num <= 0.3:
            counts['二等奖'] += 1
        else:
            counts['三等奖'] += 1
    return counts

整理完成

posted on 2025-04-09 19:02  爱姬多娜  阅读(17)  评论(0)    收藏  举报

导航