0 赞 0 踩
其他回答
Python的函数参数绑定有两种方式:顺序绑定与关键字绑定。当使用顺序绑定时,必须从左到右指定参数,不能跳过已有的参数,否则没有办法判断这些参数究竟是传递给谁的。Python没有类型系统,不能根据传入参数的类型匹配相应的重载版本,而且说到底也根本不支持重载(而是支持可变参数)。最关键的是,即使可以指定一套规则允许可选参数在前,除了破坏代码可读性以外也没有什么实际的意义。一般来说,必选的参数必然比可选的参数重要,所以它在之前也是理所当然的事情。当我们看到func(a,b,c)和func(a,b)的时候,也会理所当然地认为省略的是最后一个参数,而不是原来的第一个参数。
在很少的情况下,由于参数位置有额外的数学上的习惯,比如range(start, [end]),当使用一个参数版本的时候,start其实是end。这可以很容易通过代码进行hack,当检测到只有一个参数的时候,将两个参数的值交换就行了。其他奇怪的参数顺序要求也可以这样实现。 灵剑 5小时前 0条评论
在很少的情况下,由于参数位置有额外的数学上的习惯,比如range(start, [end]),当使用一个参数版本的时候,start其实是end。这可以很容易通过代码进行hack,当检测到只有一个参数的时候,将两个参数的值交换就行了。其他奇怪的参数顺序要求也可以这样实现。 灵剑 5小时前 0条评论
0 赞 0 踩
简单的来说把含有默认值的参数放在不含默认值的参数前边会有歧义。
举个例子:
add(3)会有两种含义:
1. 第一个参数y使用默认值所以省略,传入第二个参数的值。也就是y=2,x=3
2. 传入的2是第一个参数y的值,在这种情况下少一个参数,应该报错。
题主也许会说,把编译出错的情况忽略掉就可以了。
但是考虑下列情况:def add(y=1,z=2,x): pass
调用add(3,2)
得到的参数到底是y=1,z=3,x=2还是y=3,z=2,x=2?
所以你在任何正常的语言中都不会见到将含有默认值的参数放在不含默认值的参数前边的情况。 热心网民 5小时前 0条评论
举个例子:
add(3)会有两种含义:
1. 第一个参数y使用默认值所以省略,传入第二个参数的值。也就是y=2,x=3
2. 传入的2是第一个参数y的值,在这种情况下少一个参数,应该报错。
题主也许会说,把编译出错的情况忽略掉就可以了。
但是考虑下列情况:def add(y=1,z=2,x): pass
调用add(3,2)
得到的参数到底是y=1,z=3,x=2还是y=3,z=2,x=2?
所以你在任何正常的语言中都不会见到将含有默认值的参数放在不含默认值的参数前边的情况。 热心网民 5小时前 0条评论
0 赞 0 踩
登录后可回答 提交回答
关键词 :
- 上一个:铸就机构作为编程的更开始,举凡未是天经地义的选?
- 下一个:18年,女,中专毕业,思成为医生,自身该怎样开始才能动上医生的征途?
推荐资讯
点击排行