Python函数基础小结
Python函数基础笔记
目录
- 函数的概念
- 函数的定义
- 函数的参数
- 位置参数
- 关键参数
- 默认参数
- 不定长参数(
*args
和**kwargs
)
- 参数传递的扩展操作
*
和**
的解包
- 传递不可变与可变对象
- 函数的返回值
- 变量的作用域
- 局部变量
- 全局变量
globals()
和locals()
- 函数嵌套与递归
- 练习题
1. 函数的概念
- 作用:封装重复使用的代码块,提高开发效率和可维护性。
- 分类:
- 内建函数:Python预定义的函数(如
print()
)。 - 自定义函数:用户根据需求定义的函数。
- 内建函数:Python预定义的函数(如
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. 练习题
- 求n个数字的和
def sum_numbers(*args):
return sum(args)
- 返回奇数位元素
def get_odd_elements(sequence):
return list(sequence[::2])
- 保留列表前两个元素
def keep_first_two(lst):
return lst[:2] if len(lst) > 2 else lst
- 截断字典值的长度
def truncate_dict_values(d):
return {k: v[:2] if len(v) > 2 else v for k, v in d.items()}
- 模拟轮盘抽奖
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
整理完成