7.2 å�ªæŽ¥å�—关键å—å�‚数的函数¶
问题¶
ä½ å¸Œæœ›å‡½æ•°çš„æŸ�些å�‚数强制使用关键å—å�‚æ•°ä¼ é€’
解决方案¶
将强制关键å—å�‚数放到æŸ�个*å�‚数或者å�•个*å�Žé�¢å°±èƒ½è¾¾åˆ°è¿™ç§�效果。比如:
def recv(maxsize, *, block):
'Receives a message'
pass
recv(1024, True) # TypeError
recv(1024, block=True) # Ok
利用这ç§�技术,我们还能在接å�—ä»»æ„�多个ä½�ç½®å�‚æ•°çš„å‡½æ•°ä¸æŒ‡å®šå…³é”®å—å�‚数。比如:
def minimum(*values, clip=None):
m = min(values)
if clip is not None:
m = clip if clip > m else m
return m
minimum(1, 5, 2, -5, 10) # Returns -5
minimum(1, 5, 2, -5, 10, clip=0) # Returns 0
讨论¶
很多情况下,使用强制关键å—å�‚数会比使用ä½�ç½®å�‚数表æ„�æ›´åŠ æ¸…æ™°ï¼Œç¨‹åº�ä¹Ÿæ›´åŠ å…·æœ‰å�¯è¯»æ€§ã€‚ 例如,考虑下如下一个函数调用:
msg = recv(1024, False)
如果调用者对recv函数并ä¸�是很熟悉,那他肯定ä¸�明白那个Falseå�‚数到底æ�¥å¹²å˜›ç”¨çš„。 但是,如果代ç �å�˜æˆ�下é�¢è¿™æ ·å�çš„è¯�就清楚多了:
msg = recv(1024, block=False)
å�¦å¤–,使用强制关键å—å�‚数也会比使用**kwargså�‚æ•°æ›´å¥½ï¼Œå› ä¸ºåœ¨ä½¿ç”¨å‡½æ•°help的时候输出也会更容易ç�†è§£ï¼š
>>> help(recv)
Help on function recv in module __main__:
recv(maxsize, *, block)
Receives a message
强制关键å—å�‚数在一些更高级场å�ˆå�Œæ ·ä¹Ÿå¾ˆæœ‰ç”¨ã€‚ 例如,它们å�¯ä»¥è¢«ç”¨æ�¥åœ¨ä½¿ç”¨*argså’Œ**kwargså�‚æ•°ä½œä¸ºè¾“å…¥çš„å‡½æ•°ä¸æ�’å…¥å�‚数,9.11å°�èŠ‚æœ‰ä¸€ä¸ªè¿™æ ·çš„ä¾‹å�。