码迷,mamicode.com
首页 > 编程语言 > 详细

python学习第十章

时间:2018-06-14 18:29:37      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:return   IV   size   bsp   efault   运行   应该   列表   传参   

关于问题的注意事项

nonlocal 的问题

nonlocal的变量范围问题,可以获取上层函数的变量,如果上层函数没有这个变量,那么会到上上层找,但不会到全局找.

示例如下:

def fun():
    a = 1
    def fun2():
        a = 2
        def fun3():
            nonlocal a
            print(a)
        fun3()
    fun2()
fun()

"""
运行结果
不注释a=2时话是2,注释后是1
"""

关于全局作用域和局部作用域的问题

示例:

def fun():
    a = 1
    def fun2():
        a += 1
        print(a)
    fun2()
fun()
"""
这里会报错的,因为如果在局部一但赋值操作,python解释器就会认为是局部变量,局部变量的话,需要先赋值
"""

关于dic增加的j时dic.setdefault("key","value")

这个dic.setdefault("key","value")有增另键值对的功能 ,这里需要注意到的是,这个会有返回.返回的值是value的值.

由于setdefault这个值,当字典中存在这个key时,这次的增加是无效的,但是这个会返回现在字典中这个key的value值.如果不存在key会返回setdefault设置的value值.

示例如下:

dic = {}
dic.setdefault("key","value")
print(dic)

"""
这个是增加字典的键值

"""

 

关于**kwargs 这个值,不能传入**{3:4}这样的值,因为传参相当于变量,变量不能接受纯数字当变量的.

示例:

def func(**kwargs):
    print(kwargs)
    
def(**{"a":2,"b":3},**{3:4})

 

关于函数默认赋值的深坑

def func(a,lst = []):

  lst.append(a)

  return lst

如下问题:

lst1 = func("10")

lst2 = func("20",[])

lst3 = func("30")

最后print(lst1,lst2,lst3)

下面是运行结果

[‘10‘, ‘30‘] [‘20‘] [‘10‘, ‘30‘]

原因是当形参传入可变值时,python解释器会分配一个对像,这个对像是不变的,当多次调这个函数时,指向的是同一个地址.所以函数默认传参应该尽量传入可hash的,也就是不可变类型的.

 

 

上面是补充,补充完毕

本节主要内容: 1. 函数名的运?, 第?类对象 2. 闭包 3. 装饰器初识

 1. 函数名的运?, 第?类对象 

函数名是一个变量,但它是一个特殊的变量加个()是可以执行的变量

函数名有 以下特性:

1)函数名是一个内存地址,

示例:

def fun():
    print(100)
print(fun)

上面的代码是打印函数的内存地址.

2)函数名可以赋值给其他变量

示例:

示例是把函数名赋值给b,然后b执行了这个函数

def fun():
    print(100)

b = fun
b()

 

3)函数名可以当做容器类的元素

函数名可以当做其他容器类的无素,容器类如,列表,字典等

示例:

def fun1():
    print("1")
def fun2():
    print("2")
def fun3():
    print("3")
lst = [fun1,fun2,fun3]
for e in lst:
    print(e)

"""
变量名只是内存地址,循环调用的话,只是显示了内存地址
"""

 

4.函数名可以当做函数的参数

示例:

def fun():
    print("呵呵")
def fun1(fn):
    fn()
fun1(fun)

5. 函数名可以作为函数的返回值

示例:

def fun():
    def inner():
        print("123")   
    return inner
f = fun()
f()
"""
函数的返回
"""

?. 闭包

 

python学习第十章

标签:return   IV   size   bsp   efault   运行   应该   列表   传参   

原文地址:https://www.cnblogs.com/ahliucong/p/9183274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!