Kri*_*itz 12 python arguments range python-3.x
python3中的range函数有三个参数,其中两个是可选的.所以参数列表看起来像:
[开始],停止,[步骤]
所以这意味着(如果我错了,请纠正我)在非可选参数之前有一个可选参数.但是,如果我尝试定义这样的函数,我得到这个:
>>> def foo(a = 1, b, c = 2):
print(a, b, c)
SyntaxError: non-default argument follows default argument
Run Code Online (Sandbox Code Playgroud)
这是我作为'普通'python用户不能做的事情,还是我能以某种方式定义这样的功能?当然我可以做点什么
def foo(a, b = None, c = 2):
if not b:
b = a
a = 1
Run Code Online (Sandbox Code Playgroud)
但是例如帮助功能会显示奇怪的信息.所以我真的想知道是否可以定义上面的函数(第一个).
Mar*_*ers 15
range()
采用1个位置参数和两个可选参数,并根据传入的参数数量不同地解释这些参数.
如果只传入一个参数,则假定它是stop
参数,否则第一个参数将被解释为start.
在现实中,range()
,编码在C,采用可变数目的参数.你可以这样模仿:
def foo(*params):
if 3 < len(params) < 1:
raise ValueError('foo takes 1 - 3 arguments')
elif len(params) == 1
b = params[0]
elif:
a, b = params[:2]
c = params[2] if len(params) > 2 else 1
Run Code Online (Sandbox Code Playgroud)
但你也可以只交换参数:
def range(start, stop=None, step=1):
if stop is None:
start, stop = 0, start
Run Code Online (Sandbox Code Playgroud)
eum*_*iro 10
range
不接受关键字参数:
range(start=0,stop=10)
TypeError: range() takes no keyword arguments
Run Code Online (Sandbox Code Playgroud)
它需要1个,2个或3个位置参数,它们根据它们的数量进行评估:
range(stop) # 1 argument
range(start, stop) # 2 arguments
range(start, stop, step) # 3 arguments
Run Code Online (Sandbox Code Playgroud)
也就是说,它无法创建所定义的范围stop
,并step
和默认start
.
归档时间: |
|
查看次数: |
6227 次 |
最近记录: |