函数的动态参数,命名空间

Posted mlhz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的动态参数,命名空间相关的知识,希望对你有一定的参考价值。

1 函数的动态参数

  1 *args位置参数动态传参    *在这里表示接收位置传参的动态传参,接收到的是元组

def chi(*food):   #参数名:food   *表示动态传参
print(food)
chi("菜花","馒头","花卷","小吃")


结果:(菜花,馒头,花卷,小吃)

 

  2 **kwargs关键字参数动态传参

def chi(**food)            **关键字传参     food是参数名
print(food)
chi(冰淇淋="哈根达斯",零食="辣条",小吃="香肠")


结果:{冰淇淋:"哈根达斯",零食:"辣条",小吃:"香肠"}   结果是形成字典

 

顺序:位置参数,*args,默认值,**kwargs

def func(a,*args,c=6,**kwargs)
print(a,args,c,kwargs)
fun(2,12,23,c=4,哈哈="呵呵",多的="道德")

结果:2 (12,23),{哈哈:"呵呵",多的:"道德"}

 

形参的位置*,**,聚合

def func(*food):      形参 聚合,位置参数
print(food)
lst =["鸡蛋","黄瓜","苹果"]

fun(*lst)  实参 打散 把list,tuple,set,str进行迭代打散

 形参: 位置参数 按位置传参

         默认参数  放在后面

         动态参数   *args(形成元组)   **kwargs(形成字典)

实参的位置*,**,打散

def func(**kwargs):      形参  聚合成关键字实参
     print(kwargs)
dic ={name:"alex",age:18}
func(**dic)    实参  打散成关键字

 实参: 位置参数  按形参的位置传值

        关键字参数  按形参的关键字传值

         混合参数(位置在前,关键字在后)

2 命名空间

1 内置名称空间

2 全局名称空间

3 局部名称空间

 

a =10   全局名称空间中的内容
def fn():   fn 也在全局名称空间
    b=20      局部名称空间
    print(a)
def gn():
    print(a)
fn()
gn()

 

 作用域

1 全局作用域:内置+全局

2 局部作用域 局部(函数被调用时)

globals()查看全局中的内容

a=110
def fn():
   b =20   局部
   def gn():   局部
      print(globals())    可以查看全局作用域中的内容
      print(locals())   查看当前作用域中的内容
  gn()
fn()

 

locals()查看当前作用域中的内容

 

3 函数的嵌套

def outer():
    print("哈哈")
    def inner_1():
        print("呵呵")
        def inner_1_1():
            print("嘻嘻")
        inner_1_1()
        print("哄哄")
    def inner_2():
        print("嘿嘿")
    inner_2()
    inner_1()
outer()

结果:哈哈
 嘿嘿
呵呵
 嘻嘻
 哄哄

 

函数可以相互嵌套

 

4 global和nonlocal关键

global:在局部访问全局中的内容

nonlocal:在局部寻找外层函数中里他最近的那个变量

 

a=10
def global a    作用:1 可以把全局中的内容引入到函数内部  2 在全局创建一个变量
     a=10
     a+=10
print(a)

 

a =10
def outer():
    def inner():#inner中改变a的值
nonlocal a  寻找外层函数中离他最近的那个变量 a=20 inner() outer()

 










以上是关于函数的动态参数,命名空间的主要内容,如果未能解决你的问题,请参考以下文章

函数 / 命名空间 / 闭包

python(动态传参命名空间函数嵌套global和nonlocal关键字)

python之动态参数 *args,**kwargs和命名空间

python函数的动态传参.作用域与命名空间

python010

Python动态执行代码修改命名空间