Threebody1 发表于 2023-4-28 15:21:44

怎么搞出好几种语法

liike this

isdkz 发表于 2023-4-28 15:26:39

在Python中, range 函数有两种主要用法。这个函数主要用于生成一个不可变的整数序列,通常用于for循环中。以下是两种用法的详解:

1. range(stop):当只提供一个参数时,将生成一个从0(包含)开始到stop(不包含)的整数序列。例如:

for i in range(5):
    print(i)


上面的代码将输出:

0
1
2
3
4


2. range(start, stop[, step]):当提供两个或三个参数时,将生成一个从start(包含)开始到stop(不包含)的整数序列,其中每个数字间隔为step。step参数是可选的,默认值为1。例如:

for i in range(2, 10, 2):
    print(i)


上面的代码将输出:

2
4
6
8


请注意, range 对象本身不是一个列表,而是一个可迭代对象。如果你需要将其转换为列表,可以使用 list() 函数:

numbers = list(range(5))
print(numbers)


这将输出:


dolly_yos2 发表于 2023-4-28 15:27:11

只有第一个该说太不灵活
只有第二个就成了太不简洁
问就是哲学

Threebody1 发表于 2023-4-28 15:38:12

isdkz 发表于 2023-4-28 15:26
在Python中, range 函数有两种主要用法。这个函数主要用于生成一个不可变的整数序列,通常用于for循环中。 ...

我是说,怎么声明,这个函数有好几种语法
不然只能用可选参数

Threebody1 发表于 2023-4-28 15:38:42

dolly_yos2 发表于 2023-4-28 15:27
只有第一个该说太不灵活
只有第二个就成了太不简洁
问就是哲学

{:5_94:}

dolly_yos2 发表于 2023-4-28 15:44:33

Threebody1 发表于 2023-4-28 15:38


生成类型信息:@overload
实现:手动实现
大概是这样

isdkz 发表于 2023-4-28 15:45:29

Threebody1 发表于 2023-4-28 15:38
我是说,怎么声明,这个函数有好几种语法
不然只能用可选参数

不太懂你意思

Threebody1 发表于 2023-4-28 15:53:04

isdkz 发表于 2023-4-28 15:45
不太懂你意思

emm

dolly_yos2 发表于 2023-4-28 15:54:50

dolly_yos2 发表于 2023-4-28 15:44
生成类型信息:@overload
实现:手动实现
大概是这样

我的 Python 水平一般,看看这个有没有用吧
from typing import overload


class custom_range:

@overload
def __init__(self, stop: int) -> None:
    ...

@overload
def __init__(self, start: int, stop: int, step: int = 1) -> None:
    ...

def __init__(self, *args) -> None:
    if len(args) == 0 or len(args) > 3:
      raise SyntaxError()
    self._start = 0
    self._stop = 0
    self._step = 1
    if len(args) == 1:
      self._stop = args
    else:
      self._start = args
      self._stop = args
      if len(args) == 3:
      self._step = args

def __iter__(self):
    self._current = self._start
    return self

def __next__(self) -> int:
    if self._current == self._stop:
      raise StopIteration()
    value = self._current
    self._current += self._step
    return value


for i in custom_range(12):
print(i, end=' ')
print()

for i in custom_range(12, 24):
print(i, end=' ')
print()

for i in custom_range(12, 24, 3):
print(i, end=' ')
print()

Threebody1 发表于 2023-4-28 16:11:10

dolly_yos2 发表于 2023-4-28 15:54
我的 Python 水平一般,看看这个有没有用吧

dolly_yos2 发表于 2023-4-28 16:16:08

Threebody1 发表于 2023-4-28 16:11


然而这是我看到的标准库的 stub 文件里 range 的写法,在 Pylance 是能正常生成提示的
论断:鉴定为 IDLE 不行

歌者文明清理员 发表于 2023-4-29 10:18:00

dolly_yos2 发表于 2023-4-28 16:16
然而这是我看到的标准库的 stub 文件里 range 的写法,在 Pylance 是能正常生成提示的
论断:鉴定为 IDL ...

pygame.Rect也有提示
页: [1]
查看完整版本: 怎么搞出好几种语法