鱼C论坛

 找回密码
 立即注册
查看: 2422|回复: 11

怎么搞出好几种语法

[复制链接]
发表于 2023-4-28 15:21:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
liike this
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)

这将输出:
[0, 1, 2, 3, 4]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-28 15:27:11 From FishC Mobile | 显示全部楼层
只有第一个该说太不灵活
只有第二个就成了太不简洁
问就是哲学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我是说,怎么声明,这个函数有好几种语法
不然只能用可选参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-28 15:38:42 | 显示全部楼层
dolly_yos2 发表于 2023-4-28 15:27
只有第一个该说太不灵活
只有第二个就成了太不简洁
问就是哲学

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-28 15:44:33 From FishC Mobile | 显示全部楼层
Threebody1 发表于 2023-4-28 15:38

生成类型信息:@overload
实现:手动实现
大概是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不太懂你意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-28 15:53:04 | 显示全部楼层

emm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[0]
    else:
      self._start = args[0]
      self._stop = args[1]
      if len(args) == 3:
        self._step = args[2]

  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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-28 16:11:10 | 显示全部楼层
dolly_yos2 发表于 2023-4-28 15:54
我的 Python 水平一般,看看这个有没有用吧

捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-28 16:16:08 From FishC Mobile | 显示全部楼层
Threebody1 发表于 2023-4-28 16:11

然而这是我看到的标准库的 stub 文件里 range 的写法,在 Pylance 是能正常生成提示的
论断:鉴定为 IDLE 不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

pygame.Rect也有提示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 18:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表