python全栈day10

01 形参 动态参数

1.目的:

  函数为了拓展,对于传入的实参数量不固定,我们需要一个万能参数,可以收纳所有传入的数据。


2.形式:

  • 在函数定义时,在位置函数前加一个'*',含义是聚合或者打散。
  • *args将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args
  • **kwargs将所有的实参的关键字参数聚合到一个字典,并将这个字典赋值给kwargs

  打散的魔性用法例题:

l1 = [1,2,3]
l2 = [111,22,33]
def fun1(*args)
  print(args)
func1(*l1,*l2)
#打散后得到的结果是
(1,2,3,111,22,33)
def func1(**kwargs):
    print(kwargs)
dic = {'name':'alex'}
dic1 = {'age':1000}
func1(**dic,**dic1)
#打散得到的结果
{'name':'alex','age':1000}

 

3.形参顺序

  •  位置参数>*args>默认参数>**kwargs

02 作用域,名称空间,取值顺序等


1.名称空间

  作用:存储的是变量名对应值的内存空间的对应关系
  分类:
    1)内置名称空间
    2)全局名称空间
    3)局部名称空间

2.作用域

  作用域分类:
    1)全局作用域,包含全局名称空间和内置名称空间
    2)局部作用域包含局部名称空间。


3.取值顺序

  满足就近原则
  先局部名称空间找,没有就去全局名称空间找,再没有就去内置名称空间找。也没有,则报错。
  顺序:局部>全局>内置,单项从小到大。


4.加载顺序

  内置名称空间最先加载,全局名称空间其次(在程序执行时),最后局部名称空间(函数调用时)

  顺序:内置名称空间 先于 全局名称空间 先于 局部名称空间

 

03 函数的嵌套
04 global nonlocal

#例题:
count = 1
def func1():
    count = count + 1
    print(count)
func1()
#注意:在局部名称空间,对一个变量进行修改,那么解释器会认为该变量在局部已经定义
#而上述的例题,局部没有定义count,所以会报错。

 

1.global
  作用:
    1)在局部名称空间声明一个全局变量。

#例题:
def func2():
    name = 'alex'
func2()
print(name)
#输出:报错
#原因:name为局部变量在函数执行完毕后内存空间释放
#     报错没有定义

  

def func2():
    global name
    name = 'alex'
func2()
print(name)
#输出:alex
#原因:global函数会保留name的内存空间在内存中,
#不会因为函数结束而释放

 

2)局部名称空间可以对全局变量进行修改
例题:

count = 1
def func1():
    global count
    count = count + 1
    print(count)
func1()
#输出结果:2
#在函数内更改了全局变量count的值

  

  实际应用:
    对全局变量进行修改

2.nonlocal

例题:

def func1():
    count = 666
  def func2():
      count += 1
      print(count)
func2()
func1()
#输出:报错,内部名称空间不能对外部名称空间的变量进行修改,只能引用。

 

  作用:
  子函数对父函数的变量进行修改。
  注意:此变量不能是全局变量

原文地址:https://www.cnblogs.com/abner28/p/9486939.html