如何实现 range 函数的参数?
2024-09-06 19:12:12
关于 range 函数
Python
内置的range
函数可以接收三个参数:
class range(stop):
...
class range(start, stop[, step]):
...
标准库中解释为:range
构造器的参数必须为整数(可以是内置的 int
或任何实现了 __index__
特殊方法的对象)。如果省略 step
参数,其默认值为 1
;如果省略 start
参数,其默认值为 0
,如果 step
为零则会引发 ValueError
。
range 的使用
range
函数返回的结果会包含 start
参数,而不包含 stop
参数,当接收到的参数只有 1 位时,range
会把这位参数作为 stop
,当接受到的参数有 2 位时,则第 2 位参数会被视为 stop
,只有当接收 3 位参数时,默认的 step
才会被传入的参数代替,也就是说,如果我们需要 0 到 5 之间的数字,每隔 2 个整数返回,那么第一个参数 start
就算为 0
,也必须显示的指定才行,否则传入的 2 个参数将被视为 start
和 stop
,示例:
>>> list(range(0, 5, 2))
[0, 2, 4]
>>> list(range(5, 2))
[]
那么,按照 Python 定义函数的方式,这是怎么实现的呢?
range 参数的实现
很明显,如果在 Python 中定义一个函数,要让第二个参数为固定参数,第一和第三个参数为默认参数是会引发语法错误的:
>>> def range(start=0, stop, step=1):
>>> pass
File "<ipython-input-23-876b8b222e30>", line 1
def range(start=0, stop, step=1):
^
SyntaxError: non-default argument follows default argument
那么怎样才能用 Python 实现这样的操作呢,有两种方法可以参考:
1. 定义可变参数
判断传入参数的个数,如果是一个则作为 stop
参数,如果是两个则将第 1 个作为 start
参数,同 range
一样,该方法不接受关键字参数的传入,示例:
def range(*params):
if 3 < len(params) < 1:
raise ValueError('range takes 1 - 3 arguments')
elif len(params) == 1
b = params[0]
else:
a, b = params[:2]
c = params[2] if len(params) > 2 else 1
2. 交换参数
设置 stop
和 step
的默认值,该方法可以接收关键字参数的传入。示例:
def range(start, stop=None, step=1):
if stop is None:
start, stop = 0, start
最新文章
- CString用法小结《转载》
- 我的Android第五章:通过Intent实现活动与活动之间的交互
- 重构Web Api程序(Api Controller和Entity) 续篇(2)
- 递归算法(二)&mdash;&mdash;前缀转后缀
- paip.微信菜单直接跳转url和获取openid流程总结
- Android SQLite的ORM接口实现(一)---findAll和find的实现
- Centos 如何安装Django环境
- MySQL- 锁(3)
- 华为OJ平台——整数的二进制中1的个数
- linux 操作
- 遵守GPL的开源软件能用于商用吗?
- ***php 数组添加关联元素的方法小结(关联数组添加元素)
- 【HDU 1828】 Picture (矩阵周长并,线段树,扫描法)
- Coach(并查集)
- Android使用Linux mount获取SdCard存储文件夹
- 【Java&;amp;Android开源库代码分析】のandroid-async-http の开盘
- C语言连接Oracle
- Python笔记&#183;第十一章—— 函数 (二) 装饰器
- Linux 安装及配置 Nginx + ftp 服务器
- 《android开发艺术探索》读书笔记(三)--分发机制和滑动冲突
热门文章
- 设计模式学习-使用go实现模板模式
- 青龙+Nvjdc短信登陆对接Xdd-plus推送+Ninja CK登陆教程(11.23更新)
- 千呼万唤,web人脸识别登录完整版来了,这样式我爱了
- k8s-Pod污点与容忍
- Codeforces 587D - Duff in Mafia(2-SAT+前后缀优化建图)
- Atcoder Grand Contest 013 E - Placing Squares(组合意义转化+矩阵快速幂/代数推导,思维题)
- JSOI2021 游记
- 远程登录Linux系统及上传下载文件
- 44-Count and Say
- JavaScript | 新手村(一)变量,运算和变量方法