多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Python-函数

Python-函数 一、为什么需要函数问题同一段代码写了 10 遍改一处要改 10 处。解决把代码封装成函数需要时调用即可。函数的好处代码复用——写一次用多次模块化——分工明确易于维护抽象——隐藏实现细节只关心「做什么」二、函数的定义与调用2.1 基本语法def 函数名(参数1, 参数2, ...): 文档字符串说明函数功能 函数体 return 返回值 # 可选2.2 示例def greet(name): 向用户打招呼 print(fHello, {name}!) greet(张三) # 调用 help(greet) # 查看文档2.3 定义函数的规则函数名是标识符遵循命名规范函数名后必须有()函数体必须缩进用return返回结果没有 return 则返回None三、参数详解重点3.1 形参与实参def add(a, b): # a, b 是形参形式参数 return a b add(3, 5) # 3, 5 是实参实际参数3.2 位置参数与关键字参数def info(name, age, city): print(f{name}, {age}岁, {city}) info(张三, 20, 北京) # 位置参数 info(name李四, age22, city上海) # 关键字参数 info(王五, city广州, age25) # 混合位置在前3.3 默认参数def greet(name, greetingHello): print(f{greeting}, {name}!) greet(张三) # Hello, 张三! greet(李四, Hi) # Hi, 李四!⚠️ 默认参数不要用可变对象# 错误 def bad(lst[]): lst.append(1) return lst # 正确 def good(lstNone): if lst is None: lst [] lst.append(1) return lst3.4 不定长参数 *argsdef total(*args): print(args) # 元组 return sum(args) total(1, 2, 3, 4) # 103.5 不定长关键字参数 **kwargsdef show(**kwargs): print(kwargs) # 字典 show(name张三, age20) # {name: 张三, age: 20}3.6 参数顺序def func(a, b, c0, *args, **kwargs): pass # 顺序位置参数 → 默认参数 → *args → **kwargs3.7 解包传参def add(a, b, c): return a b c add(*[1, 2, 3]) # 序列解包 add(**{a: 1, b: 2, c: 3}) # 字典解包3.8 参数传递机制Python 是对象引用传递不可变对象int、str、tuple函数内修改不影响外部可变对象list、dict函数内修改会影响外部def modify(lst): lst.append(4) nums [1, 2, 3] modify(nums) print(nums) # [1, 2, 3, 4]四、返回值def get_min_max(nums): return min(nums), max(nums) # 返回元组 minimum, maximum get_min_max([3, 1, 4, 1, 5]) print(minimum, maximum) # 1 5 # 没有 return 返回 None def do_nothing(): pass print(do_nothing()) # None五、函数嵌套调用def square(x): return x ** 2 def sum_of_squares(a, b): return square(a) square(b) print(sum_of_squares(3, 4)) # 25六、变量作用域6.1 局部变量与全局变量x 10 # 全局变量 def func(): x 20 # 局部变量不影响全局 print(x) # 20 func() print(x) # 106.2 global 关键字count 0 def increment(): global count count 1 increment() print(count) # 16.3 nonlocal 关键字def outer(): x 10 def inner(): nonlocal x x 20 inner() print(x) # 20 outer()6.4 LEGB 规则查找变量名的顺序Local →Enclosing →Global →Built-in七、递归函数调用自身必须有终止条件。def factorial(n): if n 1: return 1 return n * factorial(n - 1) print(factorial(5)) # 120递归三要素终止条件递归出口递归公式每次递归向终止条件靠近八、匿名函数 lambda# 语法lambda 参数: 表达式 square lambda x: x ** 2 print(square(5)) # 25 # 常用于 sorted 的 key students [(张三, 85), (李四, 92), (王五, 78)] students.sort(keylambda s: s[1], reverseTrue) print(students)九、练习题基础题1.编写is_prime(n)判断素数。2.编写函数接收任意个数数字返回平均值。3.编写函数返回字符串中 (大写个数, 小写个数, 数字个数)。4.用 lambda 将[(apple,3),(ban,2)]按数量降序排列。5.编写递归函数求 12...n。进阶题6.实现二分查找递归版。7.编写装饰器timer打印函数执行耗时。参考答案点击展开参考答案import time def is_prime(n): if n 2: return False for i in range(2, int(n**0.5) 1): if n % i 0: return False return True def average(*args): return sum(args) / len(args) if args else 0 def count_chars(s): return (sum(1 for c in s if c.isupper()), sum(1 for c in s if c.islower()), sum(1 for c in s if c.isdigit())) def sum_n(n): if n 0: return 0 return n sum_n(n - 1) def timer(func): def wrapper(*args, **kwargs): start time.time() result func(*args, **kwargs) print(f{func.__name__} 耗时: {time.time()-start:.4f}s) return result return wrapper
返回列表