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

Posted guojieying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数——生成器,面向过程编程,三元表达式,生成式,内置函数相关的知识,希望对你有一定的参考价值。

今日内容概要:

一、生成器(掌握)

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

三、三元表达式(重点)

四、生成式(重点)

五、内置函数(掌握)

内容详解:

一、生成器

生成器:就是一种自定义的迭代器,是用来返回多次值
自定义迭代器的好处:节省内存
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

 

以上是关于函数——生成器,面向过程编程,三元表达式,生成式,内置函数的主要内容,如果未能解决你的问题,请参考以下文章

python基础

函数的递归,二分法,三元表达式,列表生成式,字典生成式,匿名函数,内置方法

Python全栈之路Day22

DAY4-函数进阶

Day4 闭包装饰器decorator迭代器与生成器面向过程编程三元表达式列表解析与生成器表达式序列化与反序列化

十一函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数