> 技术文档 > python语法笔记之-range() 函数语法详解

python语法笔记之-range() 函数语法详解


问题11:range() 函数语法详解

基本语法

range(stop)  # 从0开始,步长为1range(start, stop) # 从start开始,步长为1range(start, stop, step) # 从start开始,指定步长

参数说明

  • start序列的起始值(可选,默认为0)
  • stop:序列的结束值(不包含)
  • step:步长(可选,默认为1)

返回值

  • 返回一个 range 对象,这是一个可迭代对象
  • 不是列表,但可以转换为列表

功能说明

  • range() 是 Python 的内置函数,用于生成一个不可变的数字序列
  • 内存效率高,不会立即生成所有数字
  • 支持负数步长

基本示例

# 基本用法print(list(range(5))) # [0, 1, 2, 3, 4]print(list(range(1, 6))) # [1, 2, 3, 4, 5]print(list(range(0, 10, 2))) # [0, 2, 4, 6, 8]# 负步长print(list(range(5, 0, -1))) # [5, 4, 3, 2, 1]print(list(range(10, 0, -2))) # [10, 8, 6, 4, 2]# 空序列print(list(range(0))) # []print(list(range(1, 1))) # []print(list(range(5, 1))) # []

常见用法

# 1. for 循环for i in range(5): print(i, end=\' \') # 0 1 2 3 4# 2. 列表推导式squares = [x**2 for x in range(5)]print(squares) # [0, 1, 4, 9, 16]# 3. 索引遍历fruits = [\'apple\', \'banana\', \'orange\']for i in range(len(fruits)): print(f\"{i}: {fruits[i]}\")# 4. 倒序遍历for i in range(len(fruits)-1, -1, -1): print(f\"{i}: {fruits[i]}\")

高级用法

# 1. 生成等差数列def arithmetic_sequence(start, end, step): return list(range(start, end + 1, step))print(arithmetic_sequence(1, 10, 2)) # [1, 3, 5, 7, 9]# 2. 生成几何数列def geometric_sequence(start, ratio, count): return [start * (ratio ** i) for i in range(count)]print(geometric_sequence(1, 2, 5)) # [1, 2, 4, 8, 16]# 3. 矩阵索引def create_matrix(rows, cols): matrix = [] for i in range(rows): row = [] for j in range(cols): row.append(i * cols + j) matrix.append(row) return matrixprint(create_matrix(3, 3))# [[0, 1, 2], [3, 4, 5], [6, 7, 8]]# 4. 滑动窗口def sliding_window(data, window_size): for i in range(len(data) - window_size + 1): yield data[i:i + window_size]data = [1, 2, 3, 4, 5]for window in sliding_window(data, 3): print(window)# [1, 2, 3]# [2, 3, 4]# [3, 4, 5]

性能特点

import sys# 内存效率对比large_range = range(1000000)large_list = list(range(1000000))print(f\"range 对象大小:{sys.getsizeof(large_range)} 字节\")print(f\"列表大小:{sys.getsizeof(large_list)} 字节\")# range 对象占用很少内存,而列表占用大量内存# 迭代效率import timestart = time.time()for i in range(1000000): passrange_time = time.time() - startstart = time.time()for i in list(range(1000000)): passlist_time = time.time() - startprint(f\"range 迭代时间:{range_time:.6f}秒\")print(f\"列表迭代时间:{list_time:.6f}秒\")# range 迭代通常更快

实际应用场景

# 1. 计数器for i in range(10): print(f\"倒计时:{10-i}\")# 2. 索引遍历names = [\'Alice\', \'Bob\', \'Charlie\']for i in range(len(names)): print(f\"{i+1}. {names[i]}\")# 3. 重复操作def repeat_operation(func, times): for _ in range(times): func()# 4. 数值计算def sum_range(start, end): return sum(range(start, end + 1))print(sum_range(1, 100)) # 5050# 5. 时间模拟def simulate_time(hours): for hour in range(hours): for minute in range(60): for second in range(60): yield f\"{hour:02d}:{minute:02d}:{second:02d}\"# 使用示例(只显示前几个)for time_str in simulate_time(1): print(time_str) break # 避免输出太多

常见错误和注意事项

# 错误1:期望包含结束值print(list(range(5))) # [0, 1, 2, 3, 4] 不包含5# 错误2:负步长时的边界print(list(range(5, 1))) # [] 空序列,因为默认步长为1# 错误3:浮点数参数# range(1.5, 5.5) # TypeError: \'float\' object cannot be interpreted as an integer# 正确做法:使用整数print(list(range(1, 6))) # [1, 2, 3, 4, 5]# 注意事项:range 对象不是列表r = range(5)print(type(r)) # print(r[2]) # 2 (可以索引)print(r[1:3]) # range(1, 3) (可以切片)

与其他序列生成方法的对比

方法 语法 特点 适用场景 range() range(start, stop, step) 内存效率高,整数序列 循环、索引 list() list(range()) 立即生成所有元素 需要列表操作 enumerate() enumerate(iterable) 同时获取索引和值 遍历时需索引 itertools.count() count(start, step) 无限序列 无限循环

最佳实践

# 1. 使用 range 进行循环for i in range(10): print(i)# 2. 使用 enumerate 获取索引和值fruits = [\'apple\', \'banana\', \'orange\']for i, fruit in enumerate(fruits): print(f\"{i}: {fruit}\")# 3. 使用 range 生成列表squares = [x**2 for x in range(10)]# 4. 使用 range 进行倒序遍历for i in range(len(fruits)-1, -1, -1): print(fruits[i])# 5. 使用 range 进行步长遍历for i in range(0, 100, 10): print(i) # 0, 10, 20, 30, ...

高级技巧

# 1. 自定义 range 类class CustomRange: def __init__(self, start, stop, step=1): self.start = start self.stop = stop self.step = step def __iter__(self): current = self.start while current < self.stop: yield current current += self.step# 使用示例for i in CustomRange(1, 10, 2): print(i) # 1, 3, 5, 7, 9# 2. 生成器表达式def fibonacci_range(n): a, b = 0, 1 for _ in range(n): yield a a, b = b, a + bprint(list(fibonacci_range(10))) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]# 3. 条件 rangedef conditional_range(start, stop, condition): for i in range(start, stop): if condition(i): yield i# 使用示例even_numbers = list(conditional_range(1, 20, lambda x: x % 2 == 0))print(even_numbers) # [2, 4, 6, 8, 10, 12, 14, 16, 18]