码迷,mamicode.com
首页 > 其他好文 > 详细

函数(六)——生成器,面向过程编程,三元表达式,生成式,内置函数

时间:2020-06-23 21:10:59      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:mil   items   内置函数   代码   执行函数   iter   hello   取值   内容   

今日内容概要:

一、生成器(掌握)

二、面向过程编程(重点)

三、三元表达式(重点)

四、生成式(重点)

五、内置函数(掌握)

内容详解:

一、生成器

生成器:就是一种自定义的迭代器,是用来返回多次值
自定义迭代器的好处:节省内存
return只能返回一次值,函数就立即结束了
yield
1、可以挂起函数,保存函数的运行状态
2、可以用来返回多次值
如何得到生成器(自定义的迭代器):
函数内但凡存在yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是我们自定义的生成器
def func():
    print(111)
    yield 1, 2
    print(222)
    yield
    print(333)
    yield 3
    print(444)


# 如何得到生成器(自定义的迭代器):
#     函数内但凡存在yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是我们自定义的生成器


g = func()#必须要运行fun()后才会有下面其他执行
print(g) #打印出来<generator object func at 0x00000000022DA890>  generator说明产生一个生成器

g.__iter__()
g.__next__()#迭代器对象运行后打印 111

res1 = next(g)#打印222
print(res1)# 返回yield 的返回值 None

res2 = next(g)#打印333
print(res2)# 返回yield 的返回值3

res3 = next(g)#打印444后报错
# print(res3)

next(g)#报错
示范一:
def my_range(start, stop, step=1):
    while start < stop:
        yield start
        start += step

g=my_range(1,5)
print(next(g))#1
print(next(g))#2
print(next(g))#3
print(next(g))#4
print(next(g))#报错


示范二:
def my_range(start, stop, step=1):
    while start < stop:
        yield start
        start += step
for i in my_range(1,5000):
    print(i)#打印出1到4999不会报错

 

二、面向过程编程

1、编程思想就是编写程序的套路,与具体的技术点无关
2、面向过程
核心是过程二字,过程就是解决问题的步骤,即先干啥、再干啥、后干啥
基于面向过程编程就好比在设计一条条的流水线

优点:将复杂的问题流程化、进而简单化
缺点:所有环节耦合到一起,环环相扣,如果要修改某个环境,有可能会牵一发而动全身,扩展性差
ps:函数编程,不是面向过程编程,因为函数是技术点,二编程与具体技术点无关

三、三元表达式

传统:
def max2(x,y):
    if x > y:
        return x
    else:
        return y


res=max2(1,2)
print(res)
三元表达式:
x=1
y=2

res=x if x > y else y
print(res)
#res=条件成立时返回的值 if 条件 else 条件不成立时的返回值

 

四、生成式

1、列表生成式
传统:
l=[]
for i in range(11):
    if i > 3:
        l.append("x")
print(l)
列表生成式:
l = ["x" for i in range(11) if i > 3]
print(l)
# 示范1:
names = ["egon_nb", "lxx_sb", "猴子_sb", "jason_sb"]
"""
传统:
l=[]
for name in names:
    if name.endswith("sb"):
        l.append(name)
"""
l = [name for name in names if name.endswith("sb")]
print(l)
# 示范2:
names = ["lxx", "猴子", "jason"]
print([name+"_sb" for name in names])
2、字典生成式
dic = {"name": "egon", "age": 18, "gender": "male", "level": 10}

new_dic = {k.upper(): v for k, v in dic.items() if k != "level"}
print(new_dic)#{‘NAME‘: ‘egon‘, ‘AGE‘: 18, ‘GENDER‘: ‘male‘}

new_dic = {k+"_": str(v) for k, v in dic.items() if k != "level"}
print(new_dic)#{‘name_‘: ‘egon‘, ‘age_‘: ‘18‘, ‘gender_‘: ‘male‘}
3、集合生成式
s = {i for i in "hello" if i != "l"}
print(s)#{‘e‘, ‘h‘, ‘o‘}
4、生成器表达式
res = (i for i in range(5))
print(res)#<generator object <genexpr> at 0x000000000230A890>说明生成了一个迭代器

print(next(res))#0
print(next(res))#1
print(next(res))#2
print(next(res))#3
print(next(res))#4
print(next(res))#报错

五、内置函数

1、abs 取绝对值

print(abs(-1))#1
print(abs(1))#1

2、all()

2.1、传入的可迭代对象取出的值,全真则真,一假则假
2.2、如果传入的可迭代对象取不出任何值,默认返回True
print(all([1,1,1,True,"abc"]))#True
print(all([1,"",1,True,"abc"]))#False
print(all([]))#True

3、any()

3.1、传入的可迭代对象取出的值,一真则真,全假才假
3.2、如果传入的可迭代对象取不出任何值,默认返回False
print(any([0,None,False,"",1]))#True
print(any([]))#False

4、callable   

def func():
    pass
print(callable(func))#True
print(callable(len))#True
print(callable(10))#False

print(bin(11))  # 0b1011
print(oct(11))  # 0o13
print(hex(11))  # 0xb

5、chr与ord   ASCII码中英文与数字转换

print(ord("a"))
print(chr(97))

6、divmod 取商和余数

print(divmod(10,3))#(3, 1)

7、enumerate 对应位  取值

#列表
l=[111,222,333]
for i,item in enumerate(l): #i,item=(0,111)  对应位 取值
    print(i,item) # 0 111   1 222  2 333
#字典
for i,item in enumerate({"k1":111,"k2":222}): #i,item=(0,111)  对应位 取值
    print(i,item)  #0 k1  1 k2

 

函数(六)——生成器,面向过程编程,三元表达式,生成式,内置函数

标签:mil   items   内置函数   代码   执行函数   iter   hello   取值   内容   

原文地址:https://www.cnblogs.com/guojieying/p/13184162.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!