参数

1.作用域

作用域的相关知识点:
1.Python创建,改变和查找变量名都是在命名空间中进行的,作用域这个术语指的就是命名空间,在源代码中,变量名被赋值的位置就决定了这个变量名能被访问到的范围。

2.全局作用域(一个创建于模块顶层的变量的命名空间)的作用范围仅限于单个文件,全局指的是在一个文件顶层的变量名对于这个文件内部的代码而言是全局的。提到全局,就应该联想到模块。

3.函数的每次调用,都会创建一个新的局部作用域。

4.变量名解析机制称为LEGB规则:Python将查找4个作用域,并在第一次找到变量的地方停下来,首先是局部作用域(L),其次是向外一层的def或者lambda的局部作用域(E),之后是全局作用域(G),最后是内置作用域(B)。如果变量名在这一个过程中没有找到,Python会报错。

2. 参数

如果使用特殊参数匹配模式,编写参数的模式需要按照以下顺序:

1.在函数调用时,参数必须按此顺序出现:所有基于位置的参数(value),之后是所有关键字参数(name=value),和*iterbale形式的组合,以及**dict形式

2.在函数头部(也就是定义时),参数必须按照此顺序出现:一般所有参数(name),之后是所有默认值参数(name=value),之后是*name形式,之后是所有name或name=value的keyword-only的参数,之后是**name形式

def kwonly(a, *b, c):
    print(a,b,c)

kwonly(1, 2, c=3) # print的是 1 (2,) 3
kwonly(1, 2, 3) # 会报错,提示kwonly() missing 1 required keyword-only argument: 'c'

3.Python内部大致是使用以下的步骤来在赋值前匹配参数的:

  • 通过位置分配无关键字参数
  • 通过匹配名称分配关键字参数
  • 将剩下的非关键字参数分配到*name中
  • 将剩下的关键字参数分配到**name中
  • 把默认值分配给在头部为得到匹配的参数
def func(a, b, c =3, d=4):
    print(a, b, c, d)

func(1, *(5,6))
# 输出结果是1 5 6 4
posted @ 2022-03-30 11:33  焰红火  阅读(528)  评论(0)    收藏  举报