Hr_chram

导航

 

1、函数对象

比如说定义一个对象

def func():  #func = 内存地址

  pass

print(func)  #结果<function func at 0x00000226A64DB160>

func()  #函数名()是函数的调用

func  #就是一个变量名

 

2、函数的嵌套定义

def outter():
    def warpper():
        pass
    pass

3、名称空间与作用域

名称空间两大点

(1)名字的访问顺序:LEGB

L:代表当前所在的位置,函数内所在的位置

E:外层函数和全局之间的位置

G:全局

B:内置

(2)名称空间的嵌套定义关系是函数定义阶段扫描语法生成的,与调用位置无关

 

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

    特点:全局存活,全局有效

局部作用域:局部名称空间

    特点:临时存活,局部有效

 

global关键字:用在局部,修改全局的不可变类型的值

  ps:难道就不能修改可变类型的值吗?

  可变类型直接改就ok了。不用globa关键字

废话少说,上号!

案例1
dic = {'username':None}

def login():
  #dic = 123    #结果:开头是啥样,结果就啥样
    dic['username'] = 'likk'
login()
print(dic)    #结果{'username': None}
案例2
x = 100
def login():
    global x
    x = 200
login()
peint(x)    #结果是200  你不信CTRL+V!!

 

关键字nonlocal
def f1():
    x = 100
    def f2():
        #global x    #结果:开始x等于多少,现在也等于多少 x=100
        nonlocal x
        x = 200
    f2()
    print(x)
f1()

两个案例的结果再一起发布一下,别再说我懒啦!

案例1 {'username': None}
案例2 200

 

*与**

*在形参中:会接收溢出的位置实参,然后将其存成元组,然后赋值给紧跟其后的变量名

**在形参中:**会接收溢出的关键字实参,然后将其存成字典,然后赋值给紧跟其后的变量名

 

*在实参中:*后跟的必须是一个可以被for循环遍历的类型,*会将实参打散成位置实参

**在实参中:**后跟的必须是一个字典,**会将实参打散成关键字实参

b话少说,上号!

dic = {'x':1,'y':2,'k':'lik'}
def index(*args,**kwargs):
    print(*args)
    print(**kwargs)

def outter(*args,**kwargs):
    index(*args,**kwargs)
outter((1,2,3,4,5),dic)

 

结果

(1, 2, 3, 4, 5) {'x': 1, 'y': 2, 'k': 'lik'}

 

posted on 2021-03-29 18:22  遮光镜  阅读(49)  评论(0编辑  收藏  举报