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

6.3 迭代 递归

时间:2019-06-03 21:33:07      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:推荐   test   while   encoding   odi   可迭代对象   三元   name   span   

迭代器

count = 0
while True:
   if count ==101:
       break
   print(count)
   count += 1
   

python中一切皆对象

height = 180
salary = 3.2
name = ‘nick‘
hobby_list1 = [‘run‘,‘read‘]
hobby_tup = (‘run‘,‘read‘)
info_dict1 = {‘name‘:‘nick‘,‘weight‘:140}
hobby_set = {‘read‘,‘run‘,‘run‘}
?
def func():
   pass
?
# w和a模式都会自动生成文件
f = open(‘test.txt‘,‘w‘,encoding=‘utf8‘)

可迭代对象:只要拥有iter方法的对象就是可迭代对象

height.__iter__
salary.__iter__
func.__iter__
name.__iter__()
hobby_list.__iter__()
hobby_set.__iter__()
hobby_tup.__iter__()
info_dict.__iter__()
f.__iter__()

字符串、列表、元祖、字典、集合、文件都是可迭代对象

hobby_list = [‘run‘,‘read‘]
hobby_list_iter = hobby_list.__iter__()  # 把列表变成可迭代对象
# print(hobby_list_iter.__next__())
# print(hobby_list_iter.__next__())
# print(hobby_list_iter.__next__())
?
# for k in info_dict:
#     print(k)
info_dict = {‘name‘:‘nick‘,‘weight‘:140}
info_dict_iter = info_dict.__iter__()
# print(info_dict_iter.__next__())
# print(info_dict_iter.__next__())
# print(info_dict_iter.__next__())

next其实是在遍历和迭代对象的元素,一旦遍历完报错

迭代器对象:拥有 iter _ 方法,可迭代对象拥有next_方法的才是迭代器对象,文件本身就是迭代器对象

hobby_list2 = [‘run‘,‘read‘]
# count = 0
# while True:
#     print(hobby_list2[count])
#
#     count += 1
#
#     if count == len(hobby_list2):
#         break
?
# for循环不依赖索引取值
?
# 这一段代码如果用c写,就是for循环的原理
hobby_list2 = [‘run‘,‘read‘]
hobby_list2_iter = hobby_list2.__iter__()
while True:
   try:
       print(hobby_list2_iter.__next__())
   except:
       break
?
for i in hobby_list2:  # hobby_list2,把hobby_list2转化为可迭代对象
   print(i)
?
?
?
print(hobby_list2) # 一筐鸡蛋
print(hobby_list2.__iter__()) # 相比较列表,它节省内存空间,老母鸡
?
print(hobby_list2_iter)
print(hobby_list2_iter.__iter__().__iter__().__iter__())  # 迭代器对象使用iter方法后是迭代器对象本身

可迭代对象:拥有iter方法的对象就是可迭代对象,推到:可迭代对象不一定是迭代器对象

迭代器对象:拥有iter方法的和next方法的就是迭代器对象,推导:迭代器对象一定是可迭代对象

文件即可迭代对象,又是迭代器对象

 

三元表达式(三目表达式)

dog_name = ‘xiaogou‘
?
if dog_name ==‘fenggou‘:
   print(‘远离他‘)
else:
   print(‘盘他‘)
   
#不推荐使用
print(‘远离他‘) if dog_name ==‘fenggou‘ else print(‘盘他‘)
?
# 列表推导式
# lis = []
#
# for i in range(100):
#     lis.append(i)
#
# print(lis)
?
# lis = [i*2 for i in range(100)]
# print(lis)
# 千万不要写这样的东西,否则真的会被骂傻逼
lis1 = [i * 2 if i > 50 else i for i in range(100)]
print(lis1)

字典生产式

?
lis = [i for i in range(10)]
print(lis)
?
dic2= dict.fromkeys([1,2,3,4],2)
print(dic2)
dic = {i:i**2 for i in range(10)}
for i in dic.items():
   print(i)
?
拉链函数
res = zip(‘abcd‘,[1,2,3,4])
dic = dict()
for k,v in res:
   dic[k] = v
?
print(dic)
?
print({k:v for k,v in zip(‘abcd‘,[1,2,3,4])})
?
?

递归

def f2():
   print(‘from f2‘)
   
# 递归: 函数掉函数自己,类似于循环,但是这个循环必须有结束条件
import time
def f1(x): # x=0
   print(x) # 0 1
   # time.sleep(1)
   x += 1 # 1 2
   if x ==101:
       return
   f1(x) # x=1
   
   
def f2():
   f1()
f1(0)
?
def guess_age(age,count):
   age -= 2
   count -= 1
   if count ==1:
       print(age)
       return
   guess_age(age,count)
   
   
guess_age(38,5)
def guess_age(count): #age ==38 count =5
   #age -=2 #36.34.32.30
   count -= 1
   if count ==1:
       # print(age)
       return 26
   return guess_age(count) +2
?
?
res = guess_age(5)
print(res)
def guess_age(count):# 5
   count -= 1# 4
   if count ==1:
       return 26
   return guess_age(count) +2# guess_age(4) + 2 # guess_age(3) + 2 # guess_age(2) + 2
# guess_age(5) = guess_age(4) + 2 = (guess_age(3) + 2) + 2 = ((guess_age(2) + 2) + 2) + 2 = 26 + 2 + 2 + 2 = 32
# 26 + 2 =guess_age(3)=28 # 28+2=guess_age(4) = 30 # 30 + 2
res = guess_age(5)
print(res)

 

6.3 迭代 递归

标签:推荐   test   while   encoding   odi   可迭代对象   三元   name   span   

原文地址:https://www.cnblogs.com/zrx19960128/p/10970137.html

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