鱼C论坛

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

怎么搞出好几种语法

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

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

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

x
liike this
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  1. for i in range(5):
  2.     print(i)
复制代码


上面的代码将输出:

  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
复制代码


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

  1. for i in range(2, 10, 2):
  2.     print(i)
复制代码


上面的代码将输出:

  1. 2
  2. 4
  3. 6
  4. 8
复制代码


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

  1. numbers = list(range(5))
  2. print(numbers)
复制代码


这将输出:

  1. [0, 1, 2, 3, 4]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-28 15:27:11 From FishC Mobile | 显示全部楼层
只有第一个该说太不灵活
只有第二个就成了太不简洁
问就是哲学
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我是说,怎么声明,这个函数有好几种语法
不然只能用可选参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

生成类型信息:@overload
实现:手动实现
大概是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不太懂你意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

emm
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-28 15:54:50 | 显示全部楼层
dolly_yos2 发表于 2023-4-28 15:44
生成类型信息:@overload
实现:手动实现
大概是这样

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


  2. class custom_range:

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

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

  9.   def __init__(self, *args) -> None:
  10.     if len(args) == 0 or len(args) > 3:
  11.       raise SyntaxError()
  12.     self._start = 0
  13.     self._stop = 0
  14.     self._step = 1
  15.     if len(args) == 1:
  16.       self._stop = args[0]
  17.     else:
  18.       self._start = args[0]
  19.       self._stop = args[1]
  20.       if len(args) == 3:
  21.         self._step = args[2]

  22.   def __iter__(self):
  23.     self._current = self._start
  24.     return self

  25.   def __next__(self) -> int:
  26.     if self._current == self._stop:
  27.       raise StopIteration()
  28.     value = self._current
  29.     self._current += self._step
  30.     return value


  31. for i in custom_range(12):
  32.   print(i, end=' ')
  33. print()

  34. for i in custom_range(12, 24):
  35.   print(i, end=' ')
  36. print()

  37. for i in custom_range(12, 24, 3):
  38.   print(i, end=' ')
  39. print()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

然而这是我看到的标准库的 stub 文件里 range 的写法,在 Pylance 是能正常生成提示的
论断:鉴定为 IDLE 不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

pygame.Rect也有提示
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 23:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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