zoukankan      html  css  js  c++  java
  • Python之一行代码

    一、三元表达式

    # 三元表达式只支持双分支结构
    
    x,y = 10,20
    print(x if x>5 else y)
    # 满足if后面的条件返回x,否则返回y
    

    二、列表推导式

    # 创建0~9的列表
    
    # 1.for循环方式
    lt = []
    for i in range(10):
        lt.append(i)
    print(lt)
    
    # 2.列表推导式
    lt = [i for i in range(10)]
    print(lt)
    

    三、字典生成式

    # 字典生成式一般与zip(拉链函数-->列表里面包了元组)连用
    z = zip(['a', 'b', 'c', 'd'], [1, 2, 3, 4])  # 压缩方法,Python解释器的内置方法
    
    # 字典生成式
    dic = {k: v for k, v in z}
    print(dic)
    

    四、生成器

    生成器:自定义迭代器,生成器就是迭代器(自己造出来的)

    def func():
        yield 123  # yield会使函数func()变成生成器对象,因此它具有__iter__方法
        print(456)  # yield会停止函数,当运行运行下一次next才会继续运行下面的代码
        yield 789  # 一个yield对应一个next
    
    f = func()  # 生成器
    print(f)  # <generator object func at 0x000001F0E44237D8>
    f_iter = f.__iter__()
    print(f_iter.__next__())
    print(f_iter.__next__())
    print(f_iter.__next__())
    
    # yield的三个特性
    # 1.yield可以把函数变成生成器(自定制的迭代器对象,具有__iter__和__next__方法)
    # 2.yield可以停止函数,在下一次next时再运行yield下面的代码
    # 3.有n个yield生成器就有n个元素,就可以next n次,第n+1次next会报错
    
    # return的特性
    # 1.返回值
    # 2.终止函数
    
    # 用生成器自定义range函数
    def range(*args, step=1):
        args = list(args)
        if len(args) == 1:
            count = 0
            while count < args[0]:
                yield count
                count += step
        elif len(args) == 2:
            while args[0] < args[1]:
                yield args[0]
                args[0] += step
        elif len(args) == 3:
            step = args[2]
            while args[0] < args[1]:
                yield args[0]
                args[0] += step
    

    五、匿名函数

    # def 函数名 ---> 有名函数
    # 匿名函数 ---> 没有名字
    
    # 匿名函数一般不单独使用,和filter()/map()/sorted()/列表的sort()内置方法联用
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000
    }
    salary_list = list(salary_dict.items())
    print(salary_list)  # [('nick', 3000), ('jason', 100000), ('tank', 5000), ('sean', 2000)]
    
    salary_list.sort(key=lambda i: i[1])  # 内置方法是对原值排序
    
  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/17vv/p/11347816.html
Copyright © 2011-2022 走看看