zoukankan      html  css  js  c++  java
  • python基础(十)--函数进阶

    嵌套函数

    >>> graphic = '三角形'
    >>> def chang():
        graphic = '正方形'
        def chang1():                            #内部嵌套的函数命名可相同
            graphic = '圆形'
            print('第三层打印',graphic)
        chang1()                                 
        print('第二层打印',graphic)
    >>> chang()
    第三层打印 圆形
    第二层打印 正方形
    >>> print('第一层打印',graphic)
    第一层打印 三角形
    #在各自的命名空间中同名变量不受影响

    匿名函数

    lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

    语法为 lambda [arg1 [,arg2,.....argn]]:expression ,以变量的方式调用 sum = lambda arg1, arg2: arg1 + arg2 

    装饰器

    装饰器的作用:在原先代码不改变的情况扩展功能

     def test(f):
        def inner():
        print('hello')
        f()
        return inner        # 返回内部函数对象,内部不调用,这种现象称为‘‘闭包’’
                
    @test
    def log():
        print('world')    
    
    # @test 相当于执行 log= test(log) 
    
    log()                # 现在的log()相当于inner()
    --------------------
    hello
    world

     装饰器的参数传递

    def test(f):
        def inner(*arg):
        print('hello')
        f(*arg)             #此处f(*arg)是原先login函数的调用
        return inner
    
    @test
    def login(x=None):
        if x == 'xing':
        print('world')
    
    login()           #不传参数,因为inner函数是可选参数,f(*arg)则中则为默认参数x = None
    ---------------
    # hello
    --------------
    login('xing')
    ---------------
    # hello
    # world

    递归函数

    递归函数需设停止递归的条件

    递归代码还有代码的话,递归结束后还会依次执行

    def calc(n):
        print(n )
        n = int(n /2) # 50
        if n > 0:
            calc(n) # 50
        print(n)

    生成器

    a = [x for x in range(10)]
    b = (x for x in range(10))
    print(a)
    print(b)
    -------------------
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    # <generator object <genexpr> at 0x00505070>

    生成器函数

    使用yield关键字

    def g_test():
        while True:
            print('hello')
            n = yield 5           # yield是暂停并return 5
            print(n)
    
    g = g_test()                 # 必选先执行赋值变量操作
    g.__next__()                 # 刚建立的生成器必须先执行此步
    print(g.__next__())
    g.send('world')              # send方法可发送值给n
    ------------------------
    hello           
    
    None           # 执行完第一个__next__(),n并未赋值,print(n)为None
    hello             
    5                  # yield 5 返回了5 ,print()出来了
    
    world
    hello                                    
  • 相关阅读:
    02-09 对数线性回归(波士顿房价预测)
    02-02 感知机原始形式(鸢尾花分类)
    02-19 k近邻算法(鸢尾花分类)
    02-21 决策树ID3算法
    A-02 梯度下降法
    09-01 Tensorflow1基本使用
    02-34 非线性支持向量机(鸢尾花分类)+自定义数据分类
    [Python]网络爬虫(四):Opener与Handler的介绍和实例应用(转)
    Eclipse+PyDev 安装和配置(转)
    [Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容(转)
  • 原文地址:https://www.cnblogs.com/lalaxing/p/11322535.html
Copyright © 2011-2022 走看看