函数综合应用

函数综合应用

一、三元表达式

dog_name = "laowang"

# if dog_name == 'laowang':
#     print("疯狂🐕")
# else:
#     print("跑了")


print("疯狂🐕") if dog_name == 'laowang' else print("跑了")

二、列表生成式

lt = []
for i in range(10):
    lt.append(i)

print(lt)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

下面只是秀操作,不推荐使用,否则只有你自己看得懂了。

lt = [i for i in range(10)]
print(lt)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

三、字典生成式

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

a 1
b 2
c 3
d 4

dic1 = {k: v for k, v in z}

print(dic1)

{'a': 1, 'b': 2, 'c': 3, 'd': 4}

三、生成器

yield的英文单词意思是生产,在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是会返回一个值。迭代器对象, 具有__iter__, __next__的方法

def func():
    yield 34
    print(4)

    yield 45
    print(89)
    print(45)
    
g = func()
print(g)

<generator object func at 0x10ddb6b48>

生成器的本质就是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。并且从Python 2.5+开始,[PEP 342:通过增强生成器实现协同程序]的实现为生成器加入了更多的特性,这意味着生成器还可以完成更多的工作。

def func():
    yield 34
    print("打印", 4)

    yield 45
    print("打印", 89)
    print("打印", 45)


f = func()
print(f.__next__())
print(f.__next__())

结果:

34
打印 4
45

def func():
    yield 34
    print("打印", 4)

    yield 45
    print("打印", 89)
    print("打印", 45)
    
for i in func():
    print(i)

结果:

34
打印 4
45
打印 89
打印 45

def sub_generator():
    yield 1
    yield 2
    for i in range(3):
        yield i


for i in sub_generator():
    print(i)

1
2
0
1
2

def range(*args, sep=1):
    args = list(args)
    if len(args) == 3:
        sep = args[-1]

    if len(args) == 1:

        count = 0
        while count < args[0]:
            yield count
            count += sep

    elif len(args) >= 2:

        while args[0] < args[1]:
            yield args[0]
            args[0] += sep


for i in range(10, 20, 2):
    print(i)

四、匿名函数

4.1 有名函数

我们之前定的函数都是有名函数,它是基于函数名使用。

def func():
    print('from func')


func()
func()
func()
print(func)

from func
from func
from func
<function func at 0x10518b268>

4.2 匿名函数

匿名函数,他没有绑定名字,使用一次即被收回,加括号既可以运行。

语法:lambda 参数:<代码块>

res = lambda x, y: x + y(1, 2)
print(res)

4.3 与内置函数

匿名函数通常与max()、sorted()、filter()、sorted()方法联用。

salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}

  1. .如果我们想对上述字典中的人,按照薪资从大到小排序,可以使用sorted()方法。

    sorted()工作原理:

    1. 首先将可迭代对象变成迭代器对象
    2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值当做判断依据。
salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000
}

salary_list = list(salary_dict.items())
salary_list.sort(key=lambda x: x[1])
print(salary_list)

[('sean', 2000), ('nick', 3000), ('tank', 5000), ('jason', 100000)]

.如果我们想从上述字典中取出薪资最高的人,我们可以使用max()方法,但是max()默认比较的是字典的key。

  1. 首先将可迭代对象变成迭代器对象
  2. res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000
}

salary_list = list(salary_dict.items())
# 对列表求最大值
print("max:", max(salary_list, key=lambda i: i[1]))

# 对列表求最小值
print("min:", min(salary_list, key=lambda x: x[1]))

max: ('jason', 100000)
min: ('sean', 2000)

3.如果我们想对一个列表中的某个人名做处理,可以使用map()方法。

map()工作原理:

  1. 首先将可迭代对象变成迭代器对象
  2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值作为map()方法的结果之一。
salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000
}

salary_list = list(salary_dict.items())

# map函数
print('map:', list(map(lambda x: x[1]+200, salary_list)))

map: [2200, 3200, 5200, 100200]

4.如果我们想筛选除名字中含有'sb'的名字,我们可以使用filter()方法。

filter()工作原理:

  1. 首先将可迭代对象变成迭代器对象
  2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下。
salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000
}

salary_list = list(salary_dict.items())

# filter函数
print("filter: ", list(filter(lambda x: x[1] < 5000, salary_list)))

filter: [('sean', 2000), ('nick', 3000)]

posted @ 2019-08-14 16:22  RandySun  阅读(259)  评论(0编辑  收藏  举报