zoukankan      html  css  js  c++  java
  • 函数基础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()
  • 相关阅读:
    iOS- Swift:使用FMDB进行数据库操作(线程安全:增删改查)
    iOS- Swift:如何使用iOS8中的UIAlertController
    iOS- Swift和Object-C的混合编程
    iOS- 再谈ARC里内存问题,ARC里数组、对象内存得不到释放?
    iOS- 如何建立索引实现本地文本搜索引擎,允许容错搜索?
    iOS- 全方位解析.crash文件崩溃报告
    iOS- 关于AVAudioSession的使用——后台播放音乐
    iOS- Autolayout自动布局
    iOS- 详解如何使用ZBarSDK集成扫描二维码/条形码,点我!
    419. Roman to Integer【medium】
  • 原文地址:https://www.cnblogs.com/liuguniang/p/6681503.html
Copyright © 2011-2022 走看看