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]) # 内置方法是对原值排序