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()
  • 相关阅读:
    洛谷 P1508 Likecloud-吃、吃、吃
    Codevs 1158 尼克的任务
    2017.10.6 国庆清北 D6T2 同余方程组
    2017.10.6 国庆清北 D6T1 排序
    2017.10.3 国庆清北 D3T3 解迷游戏
    2017.10.3 国庆清北 D3T2 公交车
    2017.10.3 国庆清北 D3T1 括号序列
    2017.10.4 国庆清北 D4T1 财富
    2017.10.7 国庆清北 D7T2 第k大区间
    2017.10.7 国庆清北 D7T1 计数
  • 原文地址:https://www.cnblogs.com/liuguniang/p/6681503.html
Copyright © 2011-2022 走看看