生成器、表达式及函数内置

时间:2019-11-14
本文章向大家介绍生成器、表达式及函数内置,主要包括生成器、表达式及函数内置使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

生成器

1.什么是生成器? 生成的工具。 生成器是一个 "自定义" 的迭代器, 本质上是一个迭代器。

2.如何实现生成器 但凡在函数内部定义了的yield, 调用函数时,函数体代码不会执行, 会返回一个结果,该结果就是一个生成器。

yield: 每一次yield都会往生成器对象中添加一个值。 - yield只能在函数内部定义 - yield可以保存函数的暂停状态

yield与return: 相同点: 返回值的个数都是无限制的。

不同点: return只能返回一次值,yield可以返回多个值

迭代器对象 python内置生成的迭代器

iter_list = list1.__ iter __()

#自定义的迭代器

def func():

print('from func')

yield 'tank'

res = func()

#当我们通过__ next __取值时,才会执行函数体代码。

print(res.__ next __())

循环10次

for i in range(1,11):

​    print(i)        #1~~10

python2: range(1,5) --->[1, 2, 3, 4]

python3:range(1,5) --->range对象--->生成器 ---->迭代器

res = range(1,5)

print(res)
 #自定义range功能,创建一个自定义的生成器

 #(1, 3) #start --> 1 , end --->5 , move = 2

 def my_range(start,end,move = 1):
while start < end
yield start

 ​       start += move

面向过程编程

面向过程编程是一门编程思想。

面向 过程 编程: 核心是 '过程' 二字,过程 指的是一种解决问题的步骤,即先干什么再干什么 基于该编程思想编写程序,就好比在设计一条工厂流水线,一种机械式的思维方式。

优点:

将复杂的问题流程化,进而简单化

缺点:

若修改当前程序设计的某一部分,会导致其他部分同时需要修改,扩展性差。

三元表达式

三元表达式:

可以将if...else...分支变成一行。

语法:

条件成立返回左边的值 if 判断条件else 条件不成立返回右边的值

if 判断条件:

​    执行

else:

​    执行



求两个值的大小

通过if...else语法

def max(num1,num2):

​    if num1 > num2:

​        return num1

​    else:

​        return num2

res = max(100,20)

print(res)

> 100

三元表达式

def max1(num1,num2):
    res = num1    if num1 > num2 else num2
    return res
res = max1(num1,num2)
print(res)

列表生成式:

可以一行实现生成列表。 语法: list = [取出的每一个值、任意值 for 可迭代对象中取出的每一个值 in 可迭代对象]

for的右边是循环次数,并且可以取出可迭代对象中每一个值

for的左边可以为当前列表添加值

list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象]

list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]

将list中的值,依次取出,添加到new_list中
list = [1, 2, 3, 4]
new_list = []
for line in list1:
    new_list.append(line)
print(new_list)

#普通方式
new_list = []
for line in range(1,101):
    new_list.append(line)
print(new_list)

#列表生成器
list = [f'1{line}' for line in range(1,101)]
print(list)

生成器生成式

  列表生成式: 若数据量小时采用 [line for line in range(1, 6)] ---> [1, 2, 3, 4, 5]

   优点:

     可以依赖于索引取值,取值方便

   缺点:

     浪费资源

  • 生成器生成式: 若数据量过大时采用 () ---> 返回生成器 (line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)

  优点:

    节省资源

  缺点:

     取值不方便

# 生成一个有1000个值的生成器
g = (line for line in range(1, 1000001))
# <generator object <genexpr> at 0x00000203262318E0>
print(g)

# 列表生成式实现
list1 = [line for line in range(1, 1000001)]
print(list1)

内置函数

range()

print()

len()

#python内部提供的内置方法

max,min,sorted,map,filter

sorted:对可迭代对象进行排序

 

max求最大值 max(可迭代对象)

list = [1, 2, 3, 4, 5]

max内部会将list中的值通过for取出每一个值,并且进行判断

print(max(list))

dict1 = {
    'tank': 1000,
    'egon': 500,
    'sean': 200,
    'jason': 500
}

# 获取dict1中薪资最大的人的名字
# 字符串的比较: ASCII
print(max(dict1, key=lambda x: dict1[x]))


# 获取dict1中薪资最小的人的名字
print(min(dict1, key=lambda x:dict1[x]))
##### sorted: 默认升序(从小到大) reverse:反转 reverse默认是False

list1 = [10, 2, 3, 4, 5]
print(sorted(list1))

##### reverse=True--> 降序

print(sorted(list1, reverse=True))

匿名函数

  无名字的函数

    :左边是参数, 右边是返回值

  lambda :

    PS: 原因,因为没有名字,函数的调用 函数名 + () 匿名函数需要一次性使用。

     注意: 匿名函数单独使用毫无意义,它必须配合 “内置函数” 一起使用的才有意义

有名函数

def func():
    return 1
print(func())  # func函数对象 + ()
print(func())

匿名函数

def  ():
    pass

()  #  + ()
lambda 匿名(): return 1
func = lambda : 1
print(func())
func = lambda : 1
print()

原文地址:https://www.cnblogs.com/lvguchujiu/p/11857872.html