当口头谈论方法时,我永远不确定是否使用单词参数或参数或其他东西.无论哪种方式,其他人都知道我的意思,但是什么是正确的,这些条款的历史是什么?
我是一名C#程序员,但我也想知道人们是否使用不同语言的不同术语.
根据记录,我是自学成才,没有计算机科学的背景.(请不要告诉我阅读Code Complete,因为我问这个是为了其他没有史蒂夫麦康奈尔精彩书籍的人的利益.)
普遍的共识似乎是在团队环境中交替使用这些术语是可以的.除非您定义精确的术语; 那么你也可以使用" 形式参数/参数"和" 实际参数/参数"来消除歧义.
有一个带有可选参数的函数.
def alpha(p1="foo", p2="bar"):
print('{0},{1}'.format(p1, p2))
Run Code Online (Sandbox Code Playgroud)
让我迭代一下当我们以不同方式使用该函数时会发生什么:
>>> alpha()
foo,bar
>>> alpha("FOO")
FOO,bar
>>> alpha(p2="BAR")
foo,BAR
>>> alpha(p1="FOO", p2=None)
FOO,None
Run Code Online (Sandbox Code Playgroud)
现在考虑我想要调用它的情况,alpha("FOO", myp2)并且myp2将包含要传递的值,或者是None.但即使该函数处理p2=None,我希望它使用其默认值"bar".
也许这令人困惑,所以让我改写一下:
如果
myp2 is None,打电话alpha("FOO").不用了,打电话alpha("FOO", myp2).
区别是相关的,因为alpha("FOO", None)结果不同alpha("FOO").
我如何简洁(但可读)做出这种区分?
一种可能性通常是在内部检查无alpha,这将被鼓励,因为这将使代码更安全.但是假设alpha它实际上应该在其他地方使用,None就像它一样.
我想在来电方面处理这个问题.
一种可能性是区分案例:
if myp2 is None:
alpha("FOO")
else:
alpha("FOO", myp2)
Run Code Online (Sandbox Code Playgroud)
但是,当有多个这样的论点时,这很快就会成为很多代码.(指数,2 ^ n)
另一种可能性是简单地做alpha("FOO", myp2 or "bar"),但这需要我们知道默认值.通常,我可能会采用这种方法,但我可能稍后更改默认值, …
在python中,有没有办法在类方法中使用实例变量作为可选参数?即:
def function(self, arg1=val1, arg2=val2, arg3=self.instance_var):
# do stuff....
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.