返回顶部

有一个函数接受可选参数。 def alpha(p1="foo", p2="bar"): print('{0},{1}'.format(p1, p2)) 让我重复一下当我们以不同方式使用该函数时会发生什么: >>> alpha() foo,bar >>> alpha("FOO") FOO,bar >>> alpha(p2="BAR") foo,BAR >>> alpha(p1="FOO", p2=None) FOO,None 现在考虑我想像这样调用它alpha("FOO", myp2)并且myp2将包含要传递的值或为None. 但即使函数处理p2=None,我也希望它使用其默认值"bar"。 也许措辞令人困惑,所以让我改写一下: 如果myp2 is None,调用alpha("FOO")。否则,调用alpha("FOO", myp2). 区别是相关的,因为alpha("FOO", None)其结果与 不同alpha("FOO")。 我怎样才能简洁地(但可读地)做出这种区分? 一种可能性通常是在 内检查 Nonealpha,这是鼓励的,因为这将使代码更安全。但是假设它alpha用于其他实际应该处理的地方None。 我想在调用方处理。 一种可能性是区分大小写: if myp2 is None: alpha("FOO") else: alpha("FOO", myp2) 但是当有多个这样的参数时,这很快就会变成很多代码。(指数,2^n) 另一种可能性是简单地做alpha("FOO", myp2 or "bar"),但这需要我们知道默认值。通常,我可能会采用这种方法,但我以后可能会更改默认值,alpha然后需要手动更新此调用,以便仍然使用(新)默认值调用它。 我使用的是 python 3.4,但最好是你的答案能提供一种适用于任何 python 版本的好方法。 这个问题在技术上已经在这里完成,但我再次改写了一些要求,因为第一个答案确实掩盖了这一点: 我希望一般保留alpha其默认值的行为"foo", "bar",所以它(可能)不是改变alpha自身的选项。 再换句话说,假设在其他alpha地方使用它作为alpha("FOO", None)输出FOO,None预期行为的地方。

正在加载...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152