一个小白的python学习笔记05

迭代器与生成器

迭代器:
迭代是是访问集合元素的一种方式,它可以记住遍历对象的位置。迭代器对象是从集合的第一个元素开始访问,直到所有的元素被访问完结束。(迭代器只能往前不会后退)

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
print (next(it))   # 输出迭代器的下一个元素;结果为1
print (next(it))  #结果为2
for i in it:
    print (i, end=" ")  #结果为1 2 3 4

生成器:
生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
使用了 yield 的函数被称为生成器(generator),在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。
yield 实现斐波那契数列:

import sys
def fib(x):
    n, a, b = 0, 0, 1
    while n < x:
        yield a
        a, b = b, a + b
        n = n + 1
f=fib(10)
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()
结果为:
0 1 1 2 3 5 8 13 21 34 55

函数的理解
函数作用是程序有良好的扩展性、复用性;
同样的功能要是用3次以上的话就建议使用函数,将相同功能的代码封装到函数中,使用时仅调用函数即可

  1. 调用函数:Python内置了很多有用的函数,我们可以直接调用。在要调用一个函数时,需要知道函数的名称和参数;
  2. 自定义函数:在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后在缩进块中编写函数体,函数的返回值用return语句返回
    格式如下:
def 函数名(参数):
    函数体

以自定义一个求1+2+3+…+n的sums函数为例:

i=1
results=0
def	sums(n):
	if(i<=n):
		results +=i
		i +=1
	return results

print(sums(10))     #调用自定义函数并打印其结果
结果为:
55
  1. 函数的参数:普通参数,默认参数,动态参数
    普通参数在定义参数的时候定义了几个参数,你在调用的时候必须给他几个参数,否则就报错!
    默认参数:在你没有给他指定参数的时候他就会使用默认的参数!(默认参数需要放在参数列表最后)
def	person(name,age=18):
	print("姓名:",name)
	print("年龄:",age)
xiaoming=person('xiaoming') 
结果为:
姓名:xiaoming
年龄:18
lifang=person('lifang',age=16)
结果为:
姓名:lifang
年龄:16

动态参数:传入的参数个数是可变的,动态扩展的;

def	obj(key1,*args_tuple):
	执行代码

加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数;(如果在函数调用时没有指定参数,它就是一个空元组)
加了两个星号 ** 的参数会以字典的形式导入;

  1. 匿名函数:不再使用 def 语句这样标准的形式定义一个函数,而使用 lambda 来创建匿名函数;lambda的主体是一个表达式,仅仅能在lambda表达式中封装有限的逻辑进去
#匿名函数应用
add1=lambda x,y:x+y
print(add1(7,9))   #结果为:16
  1. 函数的作用域:在函数里定义的变量不能被外面使用,但是外部全局定义的全局变量在函数内是可以使用的。

递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数;
汉诺塔的移动可以用递归函数非常简单地实现:

 """
  规则:
     1.每次只能移动一个盘子
     2.任何时候大盘子在小盘子的下边
  方法:
     1.n=1时,A——》C
     2.n=2时,
           A——》B,
           A——》C,
           B——》C
    3,n=n时,
          n-1:A—C—》B
          .... A——》C
               B——》C
"""
def hanuot(n,a,b,c):
    if  n<=0:
        return
    if  n==1:
        print(a,"--->>",c)
        return
    if  n==2:
        print(a,"-->>",b)
        print(a,"-->>",c)
        print(b,"-->>",c)
        return
    hanuot(n-1,a,c,b)
    print(a,"-->>",c)
    hanuot(n-1,b,a,c)


a="A"
b="B"
c="C"
n=input("请输入正整数:")
hanuot(int(n),a,b,c)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值