Weibw's World Weibw's World
首页
  • HTML
  • Python

    • Python基础知识
    • Python CookBook第三版
    • Flask
  • MySQL

    • MySQL基础知识
    • MySQL调优
    • MySQL面试题
算法
  • FineReport
  • Kettle
  • Git
  • 微信公众号文章
  • 优秀博客文章
  • 其他
收藏夹
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Weibw

一个没有梦想的咸鱼
首页
  • HTML
  • Python

    • Python基础知识
    • Python CookBook第三版
    • Flask
  • MySQL

    • MySQL基础知识
    • MySQL调优
    • MySQL面试题
算法
  • FineReport
  • Kettle
  • Git
  • 微信公众号文章
  • 优秀博客文章
  • 其他
收藏夹
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《Flask》

  • 《Python Cookbook》第三版

    • 第一章:数据结构与算法

    • 第二章:字符串和文本

    • 第三章:数字日期和时间

    • 第四章:迭代器与生成器

    • 第五章:文件与IO

    • 第六章:数据编码和处理

    • 第七章:函数

      • 可接受任意数量参数的函数
      • 只接受关键字参数的函数
        • 解决方案
        • 讨论
      • 给函数参数增加元信息
      • 返回多个值的函数
      • 定义有默认参数的函数
      • 定义匿名或内联函数
      • 匿名函数捕获变量值
      • 减少可调用对象的参数个数
      • 将单方法的类转换为函数
      • 带额外状态信息的回调函数
      • 内联回调函数
      • 访问闭包中定义的变量
    • 第八章:类与对象

    • 第九章:元编程

    • 第十章:模块与包

    • 第十一章:网络与Web编程

    • 第十二章:并发编程

    • 第十三章:脚本编程与系统管理

    • 第十四章:测试、调试和异常

    • 第十五章:C语言扩展

  • Python基础

  • Python
  • 《Python Cookbook》第三版
  • 第七章:函数
weibw
2022-01-12

只接受关键字参数的函数

# 解决方案

将强制关键字参数放到某个参数或者单个后面就能达到这种效果。比如:

def recv(maxsize, *, block):
    'Receives a message'
    pass

recv(1024, True) # TypeError
recv(1024, block=True) # Ok
1
2
3
4
5
6

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

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
1
2
3
4
5
6
7
8

# 讨论

很多情况下,使用强制关键字参数会比使用位置参数表意更加清晰,程序也更加具有可读性。 例如,考虑下如下一个函数调用:

msg = recv(1024, False)
1

如果调用者对recv函数并不是很熟悉,那他肯定不明白那个False参数到底来干嘛用的。 但是,如果代码变成下面这样子的话就清楚多了:

msg = recv(1024, block=False)
1

另外,使用强制关键字参数也会比使用**kwargs参数更好,因为在使用函数help的时候输出也会更容易理解:

>>> help(recv)
Help on function recv in module __main__:
recv(maxsize, *, block)
    Receives a message
1
2
3
4

强制关键字参数在一些更高级场合同样也很有用。 例如,它们可以被用来在使用*args和**kwargs参数作为输入的函数中插入参数,9.11小节有一个这样的例子。

编辑 (opens new window)
上次更新: 2023/10/13, 17:39:25
可接受任意数量参数的函数
给函数参数增加元信息

← 可接受任意数量参数的函数 给函数参数增加元信息→

最近更新
01
牛客网非技术快速入门SQL练习题
03-08
02
其他日常SQL题
03-07
03
用户与权限管理
03-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 | Weibw | 辽ICP备18015889号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式