迭代器、三元、列表推导式、字典生成式、生成器生成式、递归

一、迭代器

迭代器提供了不依赖索引取值的手段

1.可迭代对象

s = 'abc'
s.__iter__()

lt = [1, 2, 3]
lt.__iter__()

tup = (1,)
tup.__iter__()

dic = {'a': 1}
dic.__iter__()

se = {1}
se.__iter__()

fw = open('test.txt', 'a+', encoding='utf8')
fw.seek(0, 0)
fw.__iter__()

可迭代对象 Iterable :含有__iter__方法叫做可迭代对象--> 除了数字类型都是可迭代对象 --> 可迭代对象使用__iter__变成迭代器

迭代器对象 Iterator: 含有__iter__和__next__方法叫做迭代器对象 --> 只有文件是迭代器对象 --> 迭代器使用__iter__依然是迭代器

可迭代对象不一定是迭代器对象,迭代器对象一定是可迭代对象

 

for 循环原理:for循环本质就是一个while循环,只不过是一个一定可控的while循环

 

dic_iter = dic.__iter__()  #变成迭代器
while True:
    try:
        print(dic_iter.__next__()) #超过迭代个数的会报错
    except StopIteration:
        break

模板:

def for1 (iterable):
    iterator = iterable.__iter__()
    while True:
        try:
            print(iterator.__next__())
        except StopIteration:
            break

for1(1,2,3)


二、三元表达式

x = 10 
y = 20 
if x>y:
    print (x)
else:
    print (y)

三元表达式:
print (x) if x>y else print(y)


三、列表推导式

It = []
for i in range(1,10):
    It.append(i)
print(It)

列表推导式:
It = [i for i in range(1,10)]
print(It)

列表推导式里面的i 可以进行运算
It = [i*2 for i in range(1,10)]


四、字典生成式

zip:相当于是拉链,是迭代器类型

res = zip([1,2,3],[4,2,3,4,2,3,4,2,3],'abcadsfasdfasdf')
print(res.__next__())
print(res.__next__())
print(res.__next__())
打印结果为:(1, 4, 'a')
          (2, 2, 'b')
          (3, 3, 'c')


 

res = zip([1,2,3],[4,2,3,4,2,3,4,2,3])
dic = {k:v*2 for k,v in res}
print(dic)
打印结果为:{1: 8, 2: 4, 3: 6}


六、生成器

generator 本质是一个迭代器 ---> 生成器: 本质就是迭代器,生成器就是一个自定义的迭代器

生成器:含有yield 关键字的的函数叫做生成器

 yield的特征:

1.暂停函数

2相当于通过next取值

def ge():
    yield 3 #一个yield相当于一个next;同时暂停函数,不往下运行
    yield 4
# print(ge())  # ge()得到一个生成器 --> 生成器本质是迭代器

g = ge()  # 得到一个生成器

# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
def rane(start):
    count = 0
    while count<start:
        yield count
        count +=1
    
for i in range(3):
    print(i)
打印结果为:  
0 
1 
2 

 7、递归

每一次递归,会不会结束函数?不会,并且每一次递归都会开辟内存空间,如果一直开辟内存就炸掉了,所以最多递归1000次,所以真正的递归必须要有退出条件
 

递归:

1.函数a内部直接调用函数a本身

2.必须要有退出条件

3.递归必须要有规律

 

count = 1
def fun():
    global count
    count+=1
    print(count)    
    if count==5:
       return
    fun()
    
fun()
打印结果为:  
2 
3 
4 
5 

案例:玉阳 20岁 ; 后面的同学大2岁,后面的后面的同学比后面的同学大2岁; 求第6位同学的年龄

 

def age(x):
    if x ==0:
        return 20
    x-=1
    return age(x)+2
   
res = age(6)
print(res)

 

 age = 20
 def age_num(x):
  global age
  age +=2
  x-=1
  if x ==0:
    print(age)
    return
  age_num(x)

age_num(6)

 

count = 0
age = 20
def age_num(x):
    global age 
    age +=2
    global count
    count +=1
    if count ==6:
        print(age)
        return 
    age_num(x)

age_num(6)

 

 

 

 

posted on 2019-09-24 19:42  啥是py  阅读(147)  评论(0编辑  收藏  举报

导航