zoukankan      html  css  js  c++  java
  • Python基础之只接收关键字参数的函数

    当我们希望函数的某些参数强制使用关键字参数时,可以将强制关键字参数放到某个*后面就能得到这种效果。比如:

    def recv(maxsize, *, block):
        """接收一条消息"""
        pass
    recv(1024, True)        #错误写法会产生TypeError错误
    #TypeError: recv() takes 1 positional argument but 2 were given
    
    recv(1024, block=True)  #正确
    

    使用这种方法,我们还能在接受任意多个位置参数的函数中指定关键字参数。比如:

    def mininum(*values, clip=None):
        m = min(values)
        if clip is not None:
            m =clip if clip > m else m
        return m
    
    ret1 = mininum(1, 5, 2, -5, 10)
    print(ret1)                     #ret1 = -5
    ret2 = mininum(1, 5, 2, -5, 10, clip=0)
    print(ret2)                     #ret2 = 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)
        接受一条信息
    

    强制关键字参数在一些更高级场合同样也很有用。

    比如说,它们可以被用来在使用*args和**kwargs参数作为输入的函数中插入参数。

     

  • 相关阅读:
    Ajax 学习笔记
    StringBulider简单用法
    asp.net 发送邮件
    log4net日志组件
    Web.Config文件详解
    关闭discuzX3.2注册页面的注册邮箱验证
    Oracle 序列(sequence)的创建、修改及删除
    MySQL 和 Oracle 主键自增长
    EL(表达式)语言的几种运算符
    SQL:select case when 的用法
  • 原文地址:https://www.cnblogs.com/yang-wei/p/10015502.html
Copyright © 2011-2022 走看看