for 语句
python中的 for 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代
在python中如果在迭代过程中修改迭代序列,这是不安全的(只有在使用链表这样的可变序列时才会有这样的情况)
我们可以迭代它的副本,然后修改它的数据
如
words=["liu","ming","zhe"]
for w in words[:]:
if w=="liu":
words.insert(0,w)
print(words)
使用for循环获得一个列表,该列表就是for循环的迭代序列
# 这句话是使用x来作为列表的元素,然后x的值是从for循环中获取的
list1=[x for x in range(10)]
print(list1)
range()函数
range(10)是生成了一个包含十个值的链表
不同方面 range() 函数返回的对象表现为它是一个列表,但事实上它并不是。当你迭代它时,它是一个能够像期望的序列返回连续项的对象;但为了节省空间,它并不真正构造列表。
# 使用range来得到一个从1开始步长为2,到10结束的列表
print(list(range(1,10,2))
获得迭代索引我们可以使用range()和len()
a=["阿花","阿强","阿明","阿三","阿帅"]
# 获取迭代序列
i=0
for x in range(len(a)):
print(i,x)
i+=1
更加简便的方式是使用enumerate()
a=["阿花","阿强","阿明","阿三","阿帅"]
# enumerate的返回值不是一个列表而是一个可迭代的对象,我们需要使用list方法来将其转换为一个列表
print(list(enumerate(a,1)))
break,continue和循环中的else
for i in range(10):
if i==5:
print("即将跳出循环")
# 如果没有break则在循环结束后会执行else语句
break
if i==2:
print("")
continue
print('这是{0}'.format(i))
else:
print("循环执行完成")
函数
def fib(num):
a=0
b=1
list1=[]
for i in range(num):
list1.append(a)
# append速度比较快,在给链表添加数据时我们推荐使用
c=b
b=a+b
a=c
return list1
# 返回的是一个可迭代对象
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
# print b
a, b = b, a + b
n = n + 1
print(list(fab(9)))
深入函数定义
- 默认参数值,
# 该函数在调用时可以用ask_ok("haha")或者是ask_ok("y",2)或者是ask_ok("y",5,"hello")
def ask_ok(ask,time=4,replay="what you say?"):
for i in range(4):
if ask==None:
ask=input("请说话:")
if ask=='y':
print("yes")
break
ask=Null
# 默认值在函数定义作用域被解析
i =5
def func(arg=i):
print(arg)
i=6
func()# 输出为5
# 默认值只在函数定义的时候被解析一次,在调用的时候不会每次都取默认值
def func(a,arg=[]):
arg.apprend(a)
print(arg)
func(1)# 输出[1]
func(2)# 输出[1,2]
func(3)# 输出[1,2,3]
2.