show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次研究了纯位置(position)参数(parameter)
- 纯位置参数在/之前
- 纯位置参数只能用位置
- 不能用关键字(keyword)
- 那和纯位置相对的
- 纯关键字(keyword only)
- 如何理解呢
- 下面代码中的\ 为续航符
- 下行 可以接着 本行
- 算作 一行源代码
import sys
def sentence(sub: str="I",\
/,\
pre: str = "love",\
*,\
obj: str = "you"):
"""
a sentence is composed by 3 parts,
sub is abbreviation of subject
pre is abbreviation of predicate
obj is abbreviation of object
"""
frame = sys._getframe()
code = frame.f_code
print("co_argcount:",code.co_argcount)
print("co_posonlyargcount:",code.co_posonlyargcount)
print("co_kwonlyargcount:",code.co_kwonlyargcount)
print(sub, pre, obj)
sentence(pre="like")
- sub 是纯位置形参
- pre 是两可形参
- obj 是纯关键字形参
- 我们先试试 pre 是否可以接受关键字实参
- 为什么参数总数是2呢?
- 查看手册
- 纯关键字形参不计入co_argcount
- 这里面只记录纯位置形参和两可形参
- 谓语(pre)可以接受位置实参吗?
- 谓语(pre)是两可形参
- 可以接受位置实参
- 宾语(obj)是纯关键字形参
- 可以接受位置实参么?
- 报错了
- 只能接受2个位置参数
- 1个纯位置
- 1个两可的
- 但是送过来3个位置实参
- 所以崩溃了
- 宾语改成关键字的
import sys
def sentence(sub: str = "I",\
/,\
pre: str = "love", \
* ,\
obj: str = "you"):
"""
a sentence is composed by 1 parts,
sub is abbreviation of subject
pre is abbreviation of predicate
obj is abbreviation of object
"""
frame = sys._getframe()
code = frame.f_code
print("co_argcount:",code.co_argcount)
print("co_posonlyargcount:", code.co_posonlyargcount)
print("co_kwonlyargcount:", code.co_kwonlyargcount)
print(sub, pre, obj)
sentence("oeasy","like",obj = "maomao")
- 没有问题
- 纯关键字形参当然能接受关键字实参
- 这些特性是什么时候有的呢?
- 2006 年的时候就有了
- 我们这次比较完整地了解了三种参数
- 纯位置
- / 之前
- 两可
- / 和 * 之间
- 纯关键字
-
- 之后
-
- 纯位置
- 顾名思义
- 三类形参都有各自接受实参的方式
- 不按方式来就报错
- 手册里还提到了
*
和**args
- 是什么意思?🤔
- 我们下次再说👋