Function,表示子例程的一般性名词。在某些编程语言中,它指带返回值的子例程或语句。在一些编程语言中起着关键字的作用。

在Python中,function是非常重要而且常见的,一般获取类或函数的参数信息。

在Python中,function一般有如下几类:

一、POSITIONAL_OR_KEYWORD

如果没有任何*的声明,那么就是POSITIONAL_OR_KEYWORD类型的,如同语义一样,POSITIONAL_OR_KEYWORD类型的参数可以通过位置POSITIONAL传参调用,也可以过关键字KEYWORD传参。以下是一个最简单的例子:

def foo(a):

pass

# 位置传参调用

foo(1)

# 关键字传参调用

foo(a=1)

二、VAR_POSITIONAL

第二种是可变的位置参数,通过一个*前缀来声明,如果你看到一个*xxx的函数参数声明(不是函数调用!声明和调用是两种不同的含义的),那一定是属于VAR_POSITIONAL类型的,如同语义,这种类型的参数只能通过位置POSITIONAL传参调用,不支持关键字KEYWORD传参,在函数内部,VAR_POSITIONAL类型的参数以一个元祖(tuple)显示,有一点需要注意的,VAR_POSITIONAL类型可以不传任何参数调用也不会报错,而且只允许存在一个。以下是一个简单的例子:

def foo(*b):

print(b)

# 不传参数不会报错,参数值是一个空元祖

foo() # 结果是 ()

# 可以传入任意个位置参数调用

foo(1, 2.0, '3', True) #结果是 (1, 2.0, '3', True)

三、KEYWORD_ONLY

第三种是关键字参数,这种参数只会在VAR_POSITIONAL类型参数的后面而且不带**前缀。如同语义,这类参数只能用关键字KEYWORD来传参,不可以用位置传参,因为位置传的参数全让前面的VAR_POSITIONAL类型参数接收完了,所以KEYWORD_ONLY只能通过关键字才能接收到参数值。以下是一个简单的例子:

# VAR_POSITIONAL不需要使用时,可以匿名化

def foo(*, c):

pass

# 只能关键字传参调用

foo(c=1)

四、VAR_KEYWORD

第四种是可变的关键字参数,VAR_KEYWORD类型的参数通过**前缀来声明(不是函数调用!声明和调用是两种不同的含义的)。如同语义,这种类型的参数只能通过关键字KEYWORD调用,但可以接收任意个关键字参数,甚至是0个参数,在函数内部以一个字典(dict)显示。VAR_KEYWORD类型的参数只允许有一个,只允许在函数的最后声名。以下是简单的例子:

def foo(**d):

print(d)

# 不传参数不会报错,参数值是一个空字典

foo() # 结果是 {}

# 可以传入任意个关键字参数调用

foo(a=1, b=2.0, c='3', d=True) # 结果是 {'d': True, 'c': '3', 'b': 2.0, 'a': 1}

五、POSITIONAL_ONLY

第五种是位置参数,选择最后说这个,是因为它一点也不重要,属于python的历史产物,你无法在高版本的python中创建一个POSITIONAL_ONLY类型的参数,在某种底层的内置函数也许会使用这类型的参数,但我试用inspect模块也没法正确识别它的命名,但在Ipython的??帮助下,还是能看到Init signature: dict(self, /, *args, **kwargs)这里的self就是位置参数POSITIONAL_ONLY了。相信我,你不会需要用到它的,现在python推荐用VAR_POSITIONAL来代替它。下面是一个综合示例:

import inspect

def foo(a, *b, c, **d):

pass

for name, parame in inspect.signature(foo).parameters.items():

print(name, ': ', parame.kind)

默认参数

VAR类型不允许设置默认参数

POSITIONAL_OR_KEYWORD和KEYWORD_ONLY可以自定义默认参数,而VAR_POSITIONAL和VAR_KEYWORD不允许自定义默认参数的,因为VAR_POSITIONAL的默认参数是tuple()空元祖,而VAR_KEYWORD的默认参数是dict()空字典。如果自定义了默认参数的话,调用函数的时候可以不必传参,如果默认值是空的话,那就必须传参数才能调用。

默认参数的位置

POSITIONAL_OR_KEYWORD类型的默认参数一定要放在后面,否则会报错,KEYWORD_ONLY虽然没有强制要求,因为都是用关键字传参,谁先谁后都无所谓,但最好还是尽可能地放在后面吧。

默认参数不默认?

默认参数绝对不能设置为可变类型(比如list, dict, set),如果你在函数内改变了默认参数,下次再调用时它就不再是默认值了。

正确的示例:

def foo(p1, p2=2.0, *, k1, k2=None):

a_list = k2 or list()

pass

foo(1, k1='3')

invalid signature什么意思_function是什么意思?相关推荐

  1. 解决微信H5获取SDK授权报错提示errMsg: “config:fail,Error: 系统错误,错误码:63002,invalid signature [20200908 22:17:17][]“

    如果常规检查都做过可以仔细看下微信开放文档 这个里面的报错原因 如果都不是那么极有可能是(恭喜你!看样子你的H5页面日活人数还蛮多[呲牙]) 获取腾讯微信平台access_token超过每日默认上限2 ...

  2. VUE解决微信签名,SPA微信invalid signature问题,完美处理

    深度解决方案,包教不包会,只因为踩坑无数,希望大家能有所收获 前端小菜鸟,因为项目要对接微信的jssdk,对接就需要签名认证,但是无奈安卓和IOS各有各的坑,本篇文章只讨论签名,和一个分享的坑,希望大 ...

  3. 微信公众号签名错误 invalid signature

    在出现了 invalid signature签名错误后按照以下步骤进行校验 1.确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t= ...

  4. 微信-js sdk invalid signature签名错误 问题解决

    微信-js sdk invalid signature签名错误 问题解决 参考文章: (1)微信-js sdk invalid signature签名错误 问题解决 (2)https://www.cn ...

  5. 微信公众号 JSSDK 提示:invalid signature

    要命的invalid signature.其实腾讯的文档已经写了,只能怪我自己理解能力太差,掉了好几次坑. 签名要用到的jsapi_ticket需要保存的,2小时有效期.如果在2小时内出现问题需要删除 ...

  6. Invalid signature file digest for Manifest main attributes

    Invalid signature file digest for Manifest main attributes 解决方案: maven-shade-plugin更新到2.3或者以上即可.

  7. invalid signature_php,javascript - 微信接口调用一直是 invalid signature

    最近在开发过程中用到微信的分享接口,但是按照他的文档来生成签名时,却一直出现invalid signature 的情况. 按照他提供的检测工具,检测出来的结果是正确的. 我这里获取签名的方法是在静态页 ...

  8. 微信分享踩坑:config:invalid signature错误的解决方法

    微信分享踩坑:config:invalid signature错误的解决方法 一般出现这个错误多半是签名获取失败,而我根据我获取到的签名跟签名算法校验里面得到的签名是一样的,于是查找大量文档,核实可能 ...

  9. vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 “invalid signature“错误解决方案

    vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 "invalid signature"错误解决方案 参考文章: (1)vue 单页面(SPA) hist ...

最新文章

  1. readelf和ldd分析elf文件
  2. mysql实训报告_mysql数据库技术》实验报告.doc
  3. 图灵2011年6月书讯【误区】【软件调试修炼之道】即将上市
  4. Hibernate 和快照
  5. Windbg内核调试之四: Dump文件分析
  6. Python之pypmml:pypmml的简介、安装、使用方法之详细攻略
  7. curl php 百度,phpcurl模拟登录百度首页
  8. 内容创业时代,粉丝已死
  9. [silverlight]WCF和Web Service(ASMX)的soap header传输方法
  10. pgsql自动安装shell脚本整理
  11. 股市大涨是不是楼市就要跌了?
  12. 陌生人社会_陌生人之旅
  13. 如何用Vue实现简易的富文本编辑器,并支持Markdown语法
  14. 企业面试之LeetCode刷题心得
  15. Leetcode 122.买卖股票的最佳时机II
  16. React router 路由 入门安装
  17. 机器搜索引擎 vs 人肉搜索引擎(作者:胡宝介)
  18. 计算机wps文字背景怎么设置,如何在wps文本中添加背景以及如何将图片设置为页面背景...
  19. idea关闭自动更新
  20. vue el-descriptions 样式问题

热门文章

  1. 【方法】如何限定IP访问Oracle数据库
  2. 【李宏毅2020 ML/DL】P23 Transformer | Self-attention, Multi-head Self-attention
  3. Linux-sed command
  4. Nginx的accept_mutex配置分析
  5. python list突破上限武器_Python3 tkinter基础 Listbox height 显示行数的上限
  6. Android导航栏高斯模糊,iOS 顶部高斯模糊导航栏 + 页面内容穿越底部导航栏效果...
  7. php tp5 model 文件,tp5model的新增
  8. 三维点云学习(3)8- 实现Spectral谱聚类
  9. SCOM 常识概念—与其他SC产品集成
  10. 装机防骗武器——鲁大师