• 函数基础2


    命名空间与作用域
    全局作用域:
    内置名称空间 builtins
    全局名称空间 文件中没有缩进的定义的名称 在这个文件的任何位置都可以使用
    局部作用域:
    局部名称空间 局部----------》全局-----------》内置

    命名空间的查询:globals()
    locals()

    函数嵌套: 嵌套调用
    嵌套定义 函数定义时仅显示语法错误
    函数对象
    函数是第一类对象:
    可以被当做变量来传递
    可以被当做参数
    可以被当做返回值
    可以被当做容器的一个元素
    闭包:内部定义的函数,且包含对外部作用域名字的引用而不是全局作用域名字的引用
    作用:闭包包含它的内存地址和自身引用的参数(自带干粮)
    应用场景:专门爬某一网站的爬虫
    # print(f.__closure__) # 查看闭包f2的内存地址和它引用的外部参数的个数
    # print(f.__closure__[0].cell_contents) # 查看f2引用的外部参数的值

    #嵌套定义
    x = 9999999999
    def f1():
    #x = 1
    print('----------------',x)
    def f2():
    x = 2
    print('------------',x)
    def f3():
    x= 3
    print('------',x)
    f3()
    f2()
    f1()


    #嵌套调用
    def my_max(x,y):
    res = x if x > y else y
    return res

    def my_max1(a,b,c,d):
    res1 = my_max(a,b)
    res2 = my_max(res1,c)
    res3 = my_max(res2,d)
    return res3
    print(my_max1(1,20,3,4))

    def foo():
    print('from foo')
    return 'aaa'
    print(foo) # 打印函数内存地址

    print(foo()) #打印函数运行结果和返回值

    #函数可以被赋值
    f = foo
    print(f)
    f()
    #把函数当成参数传递
    def bar(func):
    print('from bar')
    func()

    bar(foo)
    #把函数当成返回值
    def bar(func):

    return func
    bar(foo)
    f = (bar(foo))
    f()
    print(bar)

    #把函数当做容器的一个元素
    def add():
    print('-------------------add')
    def search():
    print('--------------------search')
    cmd_dic={
    'add':add,
    'search':search
    }
    def tell_msg():
    msg = """
    **********
    search:查找
    add:增加
    ***********
    """
    print(msg)
    def main():
    tell_msg()
    m = input('please input your choice:')
    cmd_dic[m]()

    main()
    #闭包
    x =1
    def f1(x):
    def f2():
    print(x)

    return f2
    f = f1(999999999999)
    f()
    print(f.__closure__) # 查看闭包f2的内存地址和它引用的外部参数的个数
    print(f.__closure__[0].cell_contents) # 查看f2引用的外部参数的值
    #闭包的应用
    #爬虫
    from urllib.request import urlopen
    def get(url):
    return urlopen(url).read()

    print(get('http://www.baidu.com'))

    #专门爬python
    from urllib.request import urlopen

    def get(url):
    def f2():
    n = urlopen(url).read()
    print(n)
    return f2
    f = get('http://www.baidu.com')
    f()
  • 相关阅读:
    es6+最佳入门实践(11)
    es6+最佳入门实践(10)
    es6+最佳入门实践(9)
    es6+最佳入门实践(8)
    es6+最佳入门实践(7)
    cookie、session、sessionid 与jsessionid之间的关系
    百面数据挖掘工程师-题库(1)
    远程桌面最新漏洞CVE-2019-0708 POC利用复现
    jQuery基础
    JavaScript 基础
  • 原文地址:https://www.cnblogs.com/liuguniang/p/6681503.html
Copyright © 2020-2023  润新知