zoukankan      html  css  js  c++  java
  • 函数的动态参数

    1.动态参数:

    动态参数,也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你就用*args,**kwargs接收,args是元祖形式,接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中。

    def sum(*args):
        count = 0
        for i in args:
            count +=i
        return count
    print(sum(1,2,3,4,6,8,9,70))
    def func(*args,**kwargs):
        print(kwargs)
    func(a='caoshirong',b=123)

    *的魔性用法

    在函数的定义时,在*位置参数,**位置参数聚合。

    在函数的调用(执行)时,在*位置参数,**位置参数打散。

    l1 = [1,2,3]
    l2 = [111,22,33,'alex']
    def func(*args,**kwargs):
        # print(args)
        print(kwargs)
    # func(*l1,*l2)
    func(**{'name':'alex'},**{'sex':'boy'})

    #形参的顺序

    #位置参数,*args,默认参数,**kwargs.

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

    全局命名空间:代码在运行伊使部命名空间:在函数运行中临时临时开辟的空间叫局部#命名空间一共分为三种:

    全局命名空间

    局部命名空间(临时的)

    内置命名空间:内置命民中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法。

    #2

    作用域:

    全局作用域:全局名称空间,内置名称空间

    局部作用域:局部名称空间(临时)

    #3

    取值顺序:就近原则

    局部名称空间----------->全局名称空间-------------->内置名称空间(单向从小到大范围)

    len = 6
    def func1():
        len = 3
    func1()
    print(len)
    def len(l):
        return l
    print(len([1,2,3]))

    加载顺序:

    内置名称空间---------->全局名称空间(当程序执行时)----------->局部名称空间(当函数调用的时候)

    #4函数嵌套

    def func1():
        print(111)
    def func2():
        print(222)
        func1()
        print(333)
    print(666)
    func2()
    print(555)

    #global  nonloca

    #局部名称空间  对全局名称空间的变量可以引用,但是不能改变。

    count = 1
    def func():
        count +=1
        print(count) # local variable 'count' referenced before assignment
    func()
    
    
    

    #如果你在局部名称空间 对一个变量进行修改,那么解释器会认为你的这个变量在局部中已经定义了,

    但是对于上面的列题,局部中没有定义,所以他会报错。

    #global

    1.在局部名称空间声明一个全局变量。

    2.在局部名称空间可以对全局变量进行修改。

    3.对可变数据类型(list,dict,set)可以直接引用不用通过global。

    count = 1
    def func():
        global count
        count +=1
        print(count)
    func()
    li = [1,2,3]
    dic = {'a':'b'}
    def change():
        li.append('a')
        dic['q'] = 'g'
        print(dic)
        print(li)
    change()
    print(li)
    print(dic)

    #nonlocal

    1.子函数对父函数的变量进行修改

    2.此变量不能是全局变量

    #在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,

    #并且引用的那层,从那层及以下此变量全部发生改变

    def func1():
        count = 666
        def inner():
            print(count)
            def func2():
                nonlocal count
                count += 1
                print('func2',count)
            func2()
            print('inner',count)
        inner()
        print('func1',count)
    func1()
  • 相关阅读:
    guzzle 中间件原理
    K8S-K8S 环境搭建
    K8S-k8s 理念知识
    云计算的概念
    Linux-DHCP 交互的过程
    linux-怎么踢出系统当前已连接的用户
    linux-Centos 搭建http yum源
    linux-硬链接与软连接
    linux-centos网络配置bond
    linux-dd 一个测试文件
  • 原文地址:https://www.cnblogs.com/caoshitong/p/9487890.html
Copyright © 2011-2022 走看看