迭代器

-------------笃定的知道自己想要什么  努力的追寻(1/2)
# ---------------------------------------------------------------------------------#

# lst = ["a","b","c","d"]
#
# it = lst.__iter__()
# while 1:
# try:
# l = it.__next__()
# print(l)
# except StopIteration:
# print("over!")
# break
# # ---------------------------------------------------------------------------------#
# day11作业及默写
#
# 把今天的内容进行整理.把前面的知识点回顾一遍.今天作业不多.一定把时间利用好
#
# 1, 继续整理函数相关知识点,写博客。
'''
今日主要内容
1. 第一类对象, 函数名的使用

函数名就是变量名, 函数名存储的是函数的内存地址

变量的命名规范:
1. 由数字, 字母, 下划线组成
2. 不能是数字开头, 更不能是纯数字
3. 不能用关键字
4. 不要太长
5. 要有意义
6. 不要用中文
7. 区分大小写
8. 驼峰或者下滑线
2. 闭包
闭包: 在内层函数中引入外层函数的变量
作用:
1. 保护变量不受侵害(javascript)
2. 让一个变量常驻内存
3. 迭代器
dir() 查看变量能够执行的方法(函数)
Iterator: 迭代器, __iter__(), __next__()
Iterable: 可迭代的, __iter__()

for循环的流程:
it = lst.__iter__()
while 1:
try:
el = it.__next__()
for循环的循环体
except StopIteration:
break
从迭代器中获取数据的唯一方法: __next__()

三个特征:
1. 省内存
2. 惰性机制
3. 只能往前. 不能后退
'''


# # ---------------------------------------------------------------------------------#
# 2.
# 写函数, 接收一个参数(此参数类型必须是可迭代对象), 将可迭代对象的每个元素以’_’相连接, 形成新的字符串, 并返回.
# 例如
# 传入的可迭代对象为[1, '老男孩', '武sir']
# 返回的结果为’1_老男孩_武sir’

# def conection(*args):
# for i in args:
# i += i.join("_")
# print(i.strip("_"),end="")
# conection('1', '老男孩', '武sir')


# # ---------------------------------------------------------------------------------#
# 3.
# 相关面试题(先从纸上写好答案,然后在运行):
# 1,有函数定义如下:
#
# def calc(a, b, c, d=1, e=2):
# return (a + b) * (c - d) + e
#
# 请分别写出下列标号代码的输出结果,如果出错请写出Error。
# print(calc(1, 2, 3, 4, 5))
# a1 b2 c3 d4 e5
# 3* (-1) + 5 = 2

# _____
# print(calc(1, 2))
# Error。
# ____
# print(calc(e=4, c=5, a=2, b=3))
# a2 b3 c5 d1 e4
# 5 * 4 + 4 =24
# ___
# print(calc(1, 2, 3))
# a1 b2 c3 d1 e 2
# 3 * 2 +2 = 8
# _____
# print(calc(1, 2, 3, e=4))
# a1 b2 c3 d1 e4
# 3*2+4=10
# ____
# print(calc(1, 2, 3, d=5, 4))
# Error
# _____


# def f(a, s=2):
# return s
# n = f(1, 99)
# print(n)


# # ---------------------------------------------------------------------------------#
# 2,下面代码打印的结果分别是_________, ________, ________.
#

def fuc(val, lst=[]):
lst.append(val)
return lst

lst1 = fuc(10)
lst2 = fuc(123, [])
lst3 = fuc('a')

print('lst1=%s' % lst1) # --> lst1=[10]
print('lst2=%s' % lst2) # --> lst2=[123]
print('lst3=%s' % lst3) # --> lst3=['a']
#









# # ---------------------------------------------------------------------------------#
# 4.
# 打印图形

# [图一]

# *
# ***
# *****
# *******
# *********

# n = 1
# for i in range(5, -1, -1):
# print(i * "_")
# for j in range(1, 10, 2):
# print("*" * j)
# print()

n = 8
for i in range(1,n+1):
print(' '*(n-i)+(2*i-1)*"*")
#


# for i in reversed(range(1,6)):
# for j in range(5-i):
# print(j*'')
# print((2*i-1)*'*')
#
#
# for i in range(10):
# for j in range(0,i):
# print(end=" ")
#
# for j in range(i,10):
# print("*", end=" ")
#
# print()
# --------------*******--------------
# [图二]

# *********
# *******
# *****
# ***
# *

# n = 18
# for i in range(1, n + 1):
# print(' ' * (i - 1) + (n - 2*i+1) * "*" + ' ' * (i - 1))
# --------------*******--------------


# [图三]

# *
# ***
# *****
# *******
# *********
# *******
# *****
# ***
# *
# --------------*******--------------


# [图四]

# *********
# *******
# *****
# ***
# *
# ***
# *****
# *******
# *********
# --------------*******--------------


# # ---------------------------------------------------------------------------------#
# 5. 求1 - 100内所有的质数的和(升级题)

# sum = 0
# i = 2
# for i in range(2, 100):
# j = 2
# for j in range(2, i):
# if (i % j == 0):
# break
# else:
# # lst.append(i)
# sum += i
# print(sum)
# # ---------------------------------------------------------------------------------#
# 6.--------------------------打印菱形
#
# for i in range(-4,5):
# if i <0:
# sp=-i
# else:
# sp=i
# print(' '*sp+'$'*(9-sp*2))


# 7.--------------------------打印对顶三角形

# for i in range(-3,4):
# if i <0:
# sp=-i*2+1
# kp=' '*(i+3)
# else:
# sp=i*2+1
# kp=' '*(3-i)
#
# print(kp+'*'*sp)

# 8.--------------------------打印闪电
# for i in range(-3,4):
# if i <0:
# sp=i+4
# kp=-i*' '
# elif i == 0:
# sp=7
# kp=''
# else:
# sp=4-i
# kp=' '*3
# print(kp+'*'*sp)

# ========================================================================
# 打印菱形
# *
# ***
# *****
# *******
# *********
# *******
# *****
# ***
# *
# 方法(一)
# l = int(input('-->'))
# for i in range(-l // 2, l // 2 + 1):
# if i < 0:
# print(' ' * (-i) + '@' * (l + 2 * i)) #有疑问:打印奇数行可以 打印偶数行不好看
# else: # i>=0 的时候
# print(' ' * i + '@' * (l - 2 * i))

# 方法(二)

# for i in range(7):
# i = i + 1
# if i <= 4:
# x = 4 - i
# else:
# x = i - 4
# y = 7 - 2 * x
# print(' ' * x + '*' * y + ' ' * x)

# [抽取规律代码]
# n = 11
# m = int((n+1)/2)
# print(m)
# for i in range(n):
# i = i + 1
# if i <= m:
# x = m - i
# else:
# x = i - m
# y = n - 2 * x
# print(' ' * x + '*' * y + ' ' * x)
#
# # [举例代码]
# for i in range(9):
# i = i + 1
# if i <= 5:
# x = 5 - i
# else:
# x = i - 5
# y = n - 2 * x
# print(' ' * x + '*' * y + ' ' * x)

# 方法(三)

# 用abs绝对值算法

# n = 6
# for i in range(-n, n+1):
# print(' ' * abs(i) + '*' * ((2*n+1) - 2 * abs(i)))

# 官方老师的方法
# for i in range(-3, 4):
# if i<0:
# prespace=-i
# else:
# prespace=i
# print(' '*prespace + '*'*(7-prespace*2))


# (用三元表达式描述)
# for i in range(-3, 4):
# prespace = -i if i < 0 else i
# print(' ' * prespace + '*' * (7 - prespace * 2))
# ========================================================================


# 明日默写内容:
# 1,什么是闭包。
# 2,迭代器的特点。
# 3,用while循环模拟for循环(写具体代码)。
原文地址:https://www.cnblogs.com/dealdwong2018/p/9891328.html