📜  在 python 中使用 step 制作自己的范围函数(1)

📅  最后修改于: 2023-12-03 14:51:05.359000             🧑  作者: Mango

在 Python 中使用 step 制作自己的范围函数

有时候我们需要自己定义一个范围函数,比如只输出偶数或者只输出某些规则下符合条件的数。Python 中提供了 range() 函数可以输出一定范围内的整数序列,但是如果我们需要满足上述情况时就需要自己制作一个自己的范围函数。

在这里,我们将会介绍如何在 Python 中使用 step 制作自己的范围函数,并提供一些例子方便理解。

什么是 step

在 Python 中,range() 函数有三个参数 startstopstep。其中 step 表示步长,是可选项,默认为 1,表示在序列中相邻两个数之间的差值为 1。而这个 step 参数就是我们自己定义自己的范围函数的利器。

制作自己的范围函数

下面给出一个简单的自定义范围函数代码:

def my_range(start, end, step):
    i = start
    while i < end:
        yield i
        i += step

这个函数接受三个参数 startendstep。它返回的是一个生成器,而不是一个序列列表,这意味着它极其节省内存,可以用于大规模数据的处理。

在这个函数中,我们通过 while 循环来产生范围内的数字。每次循环的步长都是由我们提供的 step 参数决定的。如果不设置 step 参数,那么默认的步长是 1

例子

下面我们来看几个例子,了解如何使用自己制作的范围函数:

输出 1 到 10 中的偶数

我们可以通过设置 step=2 来输出 1 到 10 中的偶数:

for i in my_range(1, 11, 2):
    print(i)

输出:

1
3
5
7
9
输出 1 到 10,但跳过 4,6,8

我们可以设置 step 取反,然后通过 if 语句来控制输出。下面的例子中,我们输出 1 到 10,但是将 4,6,8 跳过了:

for i in my_range(1, 11, -1):
    if i not in [4, 6, 8]:
        print(i)

输出:

1
2
3
5
7
9
10
输出所有的素数

我们可以写一个判断素数的函数,然后通过调用这个函数来输出所有的素数。下面的例子中,我们输出 1 到 100 中的所有素数:

def is_prime(num):
    if num <= 1:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

for i in my_range(1, 101, 1):
    if is_prime(i):
        print(i)

输出:

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
结论

自制的范围函数可以让我们更加灵活地产生自己想要的数字序列,且可以修改细节实现更多样的用法。step 可以根据需求自行制定,这样可以让我们更方便地生成我们需要的数字序列。