Day19_名称空间和作用域_函数的嵌套_函数第一类对象的使用_闭包函数

一. 上节课复习

  1. 为何要使用函数

    1. 解决代码重用问题
    2. 统一维护
    3. 程序的组织结构清晰,可读性强
  2. 定义函数
    1. !!!先定义后使用

      def funcname(arg1,arg2,....)            #funcname = 函数体
      '''描述信息'''
         函数体
         return value  
    2. 定义无参函数
      定义有参函数
      定义空函数
  3. 调用函数
    1. 语句形式:foo()
    2. 表达式形式:foo(1,2)
    3. 函数调用作为另外一个函数的参数:print(foo(1,2))
  4. 函数返回值
    1. 不写return--->None
    2. return 一个值--->这个值
    3. return 多个值--->由这多个值组成的元组
  5. 函数的参数
    1. 形参
    2. 实参数
    3. 从实参的角度:
      • 按位置传值 foo(1,2)
      • 按关键字传值 foo(y=1,x=2)
      • 混合传值 foo(1,y=2)
    4. 从形参角度:
      • 位置参数 def foo(x,y,z)
      • 默认参数 def foo(x,y=1)
      • 什么时候用:
        • 在调用函数时,每次调用传入的值都在变化,使用位置参数,变化较小使用默认参数
      • 二者的位置排列:
        • 位置参数必须在默认参数的左边
      • 二者的特性:
        • 位置参数 必须传值,默认参数可传可不传
    5. *args:
      def foo (x,\*args)
      foo(1,2,3,4,5)  

      ** kwargs:

      def foo (x,**kwargs)
      foo(1,y=2,z=3)  

二. 名称空间和作用域

  1. 名称空间

    1. 内置名称空间
    2. 全局名称空间
    3. 局部名称空间
  2. 作用域
    1. 全局作用域
    2. 局部作用域
  3. 名称空间的查询
    1. globals:查询全局名称空间的名字
    2. locals:查询局部名称空间的名字

三. 函数的嵌套及静态作用域

  1. 嵌套调用
  2. 嵌套定义 !!!函数嵌套时的执行顺序
    def f1():
    x = 1
    print('----->f1 ',x)
    def f2():
        x = 2
        print('---->f2 ',x)
        def f3():
            x = 3
            print('--->f3 ',x)
        f3()
    f2()
    f1()        >>>----->f1  1;---->f2  2;--->f3  3

四.函数是第一类对象的概念

  1. 函数可以被赋值

    def foo():
        print('foo')
    
    print(foo)
    
    f = foo
    print(f)
  2. 把函数当成参数传递
    def foo():
        print('foo')
    
    def bar(func):        >>><function foo at 0x00000000003E3F28>;foo
        print(func)
        func()
    
    bar(foo)
  3. 把函数当成返回值
    def foo():
        print('foo')
    
    def bar(func):
        print(func)
        return func
    
    f = bar(foo)
    print(f)
  4. 把函数当成容器类型的元素去用
    def add():
        print('==========function add')
    
    def    delete():
        print('==========function delete')
    
    def search():
        print('==========function search')
    def change():
        print('==========function change')
    
    def tell_msg():
        msg = '''
        delete:删除
        add:添加
        search:查询
        change:更改
        '''
        print(msg)
    
    cmd_list = {
        'add':add,
        'delete':delete,
        'search':search,
        'change':change
    }
    
    while True:
        tell_msg()
        choice = input('please input your choice: ').strip()
        cmd_list[choice]()

五.闭包

  1. 闭包函数概念:

    • 首先是内部定义的函数,该函数对外部作用域而不是全局作用域名字的引用
    x =1
    
    def f1():
        x = 1000
        def f2():
            print(x)
        return f2
    
    f = f1()
    f()
    print(f.__closure__[0])
    print(f.__closure__[0].cell_contents)
    
    >>><1000
    >>><cell at 0x0000000002177498: int object at 0x0000000001DC9EF0>
    >>>1000
    from urllib.request import urlopen
    def f1(url):
        def f2():
            print(urlopen(url).read())
        return f2
    
    baidu = f1('http://www.baidu.com')        #爬网页
    baidu()
时间: 2024-10-09 08:39:14

Day19_名称空间和作用域_函数的嵌套_函数第一类对象的使用_闭包函数的相关文章

第十一天 函数名的使用以及第一类对象, 闭包, 迭代器

本节主要内容: 1.函数名的使用以及第一类对象 2.闭包 3.迭代器 一.函数名的运用 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量 1.函数名的内存地址: 2.函数名可以赋值给其他变量 3.函数名可以当作容器类的元素(作为list元素) 4.函数名可以当作函数的 5.函数名可以作为函数的返回值 二.闭包 什么是闭包: 闭包就是内层函数, 对外层函数(非全局)的变量的引用. 叫闭包 在内存函数中调用了外层函数的变量,叫闭包.可以让一个局部变量常驻内存 使用__closur

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

python学习笔记第五节(函数,名称空间,作用域)

python2中 默认存为unicode需要再字符串前加u 循环打印每一行 循环打印整个文件内容方式二下面这种同一时间取一行 先定义后执行 函数定义的时候,只检测语法错误,不执行 函数返回值,默认是元组模式return 只能返回一次 形参与实参 形参就是变量名实参就是值 打破顺序限制 经常变化的值用位置形参,值通常不变的用默认参数.默认参数通常定义成不可变类型.默认参数只在定义时被赋值一次. 可变长参数就是* 关键字参数(关键字参数指的是实参当中指定y=2,z=3等等) *等同于位置参数 函数内

python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): return x**2 y=func(10) print(y) def foo(): return None res=foo() print(res) def foo(): return{'a':1} res=foo() print(res['a']) def foo(): return {'a':1},1,'a',[1,2] res=foo() p

11、函数对象、函数的嵌套、名称空间与作用域

一.函数对象 函数对象,函数是第一类对象,即函数可以当做数据传递 具体特点: 1.可以被引用: 1 def foo(): 2 print('from foo') 3 4 func=foo 5 6 print(foo) 7 print(func) 8 func() 2.可以当作参数传递 1 def foo(): 2 print('from foo') 3 4 def bar(func): 5 print(func) 6 func() 7 8 bar(foo) 3.返回值可以是函数 1 def fo

函数对象,函数的嵌套,名称空间与作用域,闭包,装饰器,迭代器,内置函数

一,函数对象 函数对象:函数是第一类对象,即函数可以当做数据传递 1,可以被引用 2,可以做参数的传递 3,返回值可以是函数 4,可以当作容器类型的元素 二,函数嵌套 1,函数的嵌套调用 2,函数的嵌套定义 三,名称空间与作用域 名称空间:存放名字的地方叫名称空间,存放这些值与名字的绑定关系 查看内置名称的两种方法: 三种名称空间 1,内置名称空间:随着python解释器的启动而产生 2,全局名称空间:文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入该空间 3,局部名称空间:调用函

python_day04 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式

本节课重要知识点内容如下: 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式 1.函数嵌套 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数 def bar(): print('from nbar')def foo(): print('from foo') bar()foo()def max2(x,y): if x > y: return x else: return ydef max4(a,

函数对象、函数嵌套、名称空间与作用域、装饰器

一 函数对象 1.函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 2.利用该特性,优雅的取代多分支的if def foo(): print('foo') def bar(): print('bar') dic={ 'foo':foo, 'bar':bar, } while True: choice=input('>>: ').strip() if choice in dic: dic[choice]()

python基础之====函数对象、函数嵌套、名称空间与作用域、装饰器

阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if def foo(): print('foo') def bar(): print('bar') dic={ 'foo':foo, 'bar':bar, } while True: choice=input(