python之路--day10-闭包函数

1.命名关键字参数

  格式:在*后面的参数都是命名关键字参数

  特点:

    1.必须被传值

    2.约束函数的调用者必须按照key=value的形式传值

    3.约束函数的调用者必须用我们指定的key名

 1 def auth(*args,**kwargs):
 2     """
 3     使用方式auth(name="egon",pwd="123")
 4     :param args:
 5     :param kwargs:
 6     :return:
 7     """
 8     # print(args,kwargs)
 9     if len(args) !=0:
10         print(‘必须用关键字的形式传参‘)
11         return
12     if ‘name‘ not in kwargs:
13         print(‘必须用指定的key名name‘)
14         return
15     if ‘pwd‘ not in kwargs:
16         print(‘必须用指定的key名pwd‘)
17         return
18
19     name=kwargs[‘name‘]
20     pwd=kwargs[‘pwd‘]
21     print(name,pwd)

2.函数嵌套

  1.函数的嵌套调用:在函数内又调用了其他函数

  

def max(x,y):
    if x>y:
        reryrn x
    else:
        return y
def max3(x,y,z):
    res1 = max2(x,y)
    res2 = max2(rea1,z)
    return res2
print(max3(11,199,2))

  2,函数的嵌套定义:在函数内又定义了其他函数

def func1():
    print(‘from func1‘)
    def func2(): #func2=内存地址
         print(‘from func2‘)

func1()
def f1():
    print(‘f1‘)
    def f2():
        print(‘f2‘)
        def f3():
            print(‘f3‘)
        f3()
    f2()
f1()

‘‘‘
f1
f2
f3
‘‘‘

3.名称空间和作用域

  1.名称空间:存放名字和值绑定关系的地方

  1.2.名称空间分类: 

    1.2.1内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效

    1.2.2全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者在文件删除的时候失效

    1.2.3局部名称空间:存放函数内定义的名字(函数的参数以及函数内名字都存放在局部变量空间)---在函数调用时临时生效,函数结束则失效

    加载顺序:内置名称空间-----全局名称空间---局部名称空间

      查找名字:局部名称空间-----全局名称空间-----内置名称空间

  2:作用域

  1.全局变量域:包含的是内置名称空间与全局名称空间的名字

  特点:

      在任何位置都能访问到

      该范围内的名字会伴随程序整个生命周期

  2.局部作用域:包含的是局部名称空间的名字

   特点:

       只能在函数内使用

      调用函数是生效,调用结束失效

4,函数对象

  1,函数可以被引用

def bar():
    print(‘from bar‘)

f =bar
f()

  2,可以当作参数传入

 

def bar():
        print(’from bar‘)

def wrapper(func):
        func()
wrapper(bar)

  3,可以当作函数的返回值

def bar():
    print(’from bar‘)
def foo(func):
    return func

f = foo(bar)
f()

  4,可以当作容器类型的元素

def get():
     print(‘from get‘)

def put():
     print(‘from put‘)

l=[get,put]

print(l)

l[0]()
def auth():
    print(‘登陆。。。。。‘)

def reigster():
    print(‘注册。。。。。‘)

def search():
    print(‘查看。。。。‘)

def transfer():
    print(‘转账。。。。‘)

def pay():
    print(‘支付。。。。‘)

dic={
    ‘1‘:auth,
    ‘2‘:reigster,
    ‘3‘:search,
    ‘4‘:transfer,
    ‘5‘:pay
}

def interactive():
    while True:
        print("""
        1 认证
        2 注册
        3 查看
        4 转账
        5 支付
        """)
        choice=input(‘>>: ‘).strip()
        if choice in dic:
            dic[choice]()
        else:
            print(‘非法操作‘)

interactive()

5,闭包函数

  定义在函数内部的函数,并且该函数包含对外部函数作用域中名字的引用,该函数就成为闭包函数

 def outter():
     name=‘egon‘
     def inner():
         print(‘my name is %s‘ %name)

     return inner

inner()被称为闭包函数。inner()定义在函数outter外部,outter函数的作用域内部变量name,在inner内被引用

原文地址:https://www.cnblogs.com/guodengjian/p/8665479.html

时间: 2024-10-31 13:32:47

python之路--day10-闭包函数的相关文章

python之路--装饰器函数

(一)装饰器的形成过程 装饰器的本质是闭包函数的一种应用,装饰器是用来装饰函数的,在不修改原函数及其调用方式的情况下对原函数功能进行拓展. #简单的无参函数装饰器 import time def timmer(func): def inner(): start = time.time() func() end = time.time() print(end -start) return inner @timmer#语法糖 def hahaha(): time.sleep(2)#停止时间的一种用法

python之路——内置函数与匿名函数

内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的.那今天我们就一起来认识一下python的内置函数.这么多函数,我们该从何学起呢? 上面就是内置函数的表,68个函数都在这儿了.这个表的顺序是按照首字母的排列顺序来的,你会发现都混乱的堆在一起.比如,oct和bin和hex都

python 之路 day10 函数

一:深浅拷贝 :  s = [ [1,2] ,3  ,4  ]       s1 = s.copy()  ,   s1[0][0] = 8 ,  print (s) ,print (s1),   两个的结果都为 [   [8,1] ,  3 ,4  ]   首先是因为列表是可以修改的,再一个跟指针有关系,具体图如下: 浅拷贝(shallow copy) 只会拷贝第一层,如上面的 3,4 ,因为只有一个指针指向 深拷贝(deep copy): 全部克隆  需要模块, import copy 二 :

python编程中的闭包函数

什么是闭包? 简单说,闭包就是根据不同的配置信息得到不同的结果 再来看看专业的解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外.所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体. 看概念总是让人摸不着头脑,看几个python小例子就会了 例1 def make_adder(addend):     def adder(augend):      

Python之路----------内置函数

1.abs(x)绝对值 1 #coding=utf-8 2 a = 1 3 b = -2 4 print(abs(a)) 5 print(abs(b)) 2.all(iterable)可迭代对象里面所有内容为真返回真,空列表返回真 1 #非0就是真 2 l = [1, 2, 3, 4, 5, 6, -1, -2, 'a'] 3 print(all(l))#True 4 l = [1, 2, 3, 4, 5, 6, 0, -2, 'a'] 5 print(all(l))#False 6 l = [

python之路-Day10

操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数

python之路 内置函数,装饰器

一.内置函数 #绝对值 abs() #所有值都为真才为真 all() #只要有一个值为真就为真 any() #10进制转成二进制 bin() #10进制转成八进制 oct() #10进制转成十六进制 hex() #布尔值 bool() #字符转换成字节 bytes() #字节转换成字符 str() #对文件的操作 open() #基本流程 #打开文件 op_file=open("file name","rwb+") #操作文件 op_file.operation()

Python之路20-高阶函数

#高阶函数 #变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收 #另一个函数作为参数,这种函数成为高阶函数 def add(x,y,f):     return f(x) + f(y) res = add (-1,2,abs) print (res)

Python之路24-内置函数、匿名函数

内置函数 #内置函数 #取绝对值 abs() #可迭代对象中元素都为真返回true,不为真返回false all() #可迭代对象中元素任意一个为真返回true,不为真返回false any() #把一个对象的文字的表现形式打印出来,类型是字符串 ascii() #十进制转二进制 bin() #判断真假 bool() #可变的二进制 a = bytes("abcde",encoding="tuf-8") b = bytearray("abcde"