递归,yield,参数槽

#1、 
records = [(‘f‘,1,2,4),(‘k‘,3,4,5),(‘z‘,‘e‘,‘d‘)]

for key,value,*val in records:
#可迭代对象,解构
    if key == ‘f‘:

        f(val)

        print(‘val:{0},{1}‘.format(*val))

    print(‘key:{0},value:{1}‘.format(key,value))
#2、参数槽
#以*分隔,{非命名参数,命名参数} 
#不可使用可变位置参数 
#可变关键字参数必须在命名参数之后 
def func(a,b,c=3,*,f=5,k=3,j,**kw):

    print(a)

    print(b)

    print(c)

    print(f)

    print(k)

    print(j)

    print(kw) 
 
func(9,4,f=4,j=7,s=8)

9
4
3
4
3
7
{‘s‘: 8}
#3、递归
lst = []
#十进制转换二进制
def to_binary(n):

    r = n % 2

    if n >= 2:

        to_binary(n/2)

    lst.append(int(r))

to_binary(10)

print(lst)

[1, 0, 1, 0]
#4、生成器(斐波那契数列)
def fib():
    a,b = 0,1
    while True:
        a,b = b,a+b# 解包,封包
        yield b
        
gen=fib()
def func(x):
    for i in range(x):
        print(next(gen))
时间: 2024-10-12 09:52:31

递归,yield,参数槽的相关文章

利用生成器yield 递归解决八王后问题

八王后问题: 要在一个8*8的国际象棋棋盘里,放下8个王后,请问如何放置. 由于在国际象棋中,王后的杀戮区域是直线,和斜线,不论距离:如下图 所以要放置下8个王后,就必须把她们放在各自的杀戮区域之外.显然,每一行只能有且必须有一个王后. 构思代码: 1.棋盘 我们可以考虑,把棋盘用一个元组, state = (pos1,pos2,pos3....pos8) state中,元素的序号代表了棋盘的行 ; 元素的值(posn),则代表了王后在该行的位置. state 的初始状态是(none,none,

2015-03-15---二叉树递归(非递归)实现先序、中序、后序遍历(附代码)

今天说好的不碰代码的,后来还是没忍住,学了学数据结构和算法,就先讲讲先序中序和后序遍历吧,我还写了代码,一套递归方式实现遍历二叉树,还有两套非递归方式遍历二叉树, 从简单的开始,因为二叉树的所有操作都是要求在能够遍历的基础上啊. 学过数据结构的肯定都明白遍历顺序, 先序遍历就是先自己,然后左子树,然后右子树, 中序遍历就是先左子树,然后自己,然后右子树 后序遍历就是先左子树,然后右子树,然后自己 比如上图这个很简单的二叉树: 先序遍历:1 2 4 5 3 6 7 中序遍历:4 2 5 1 6 3

函数和函数参数

函数 函数是对程序逻辑进行结构化或过程化的一直编程方法.能将整块代码巧妙的隔离成易于管理的小块,把重复代码放到函数中而不是进行大量的拷贝--这样既能节省空间,也有助于保持一致性,因为你只需要改变单个的拷贝而无须去寻找再修改大量复制代码的拷贝. 创建函数 def语句 函数是用def语句来创建的,语法如下: def function_name(params): pass In [1]: def add(x,y): ...: print('{} + {} = {}'.format(x,y,x+y))

泛化之美--C++11可变模版参数的妙用

1概述 C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数.任意类型的参数.相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进.然而由于可变模版参数比较抽象,使用起来需要一定的技巧,所以它也是C++11中最难理解和掌握的特性之一.虽然掌握可变模版参数有一定难度,但是它却是C++11中最有意思的一个特性,本文希望带领读者由浅入深的认识和掌握这一特性

递归分治策略

在前面的随笔中其实谈到了一些递归分治的算法,也以为自己写上去了,今天在看到没有写.下面就来补上. 递归分治是算法中比较重要的思想.在之前也聊到了递归和递推的区别.递归这里就不再详细讲述了.下面讲一讲分治.分治其实很简单,就是将一个比较大的问题分解为很多的小问题,解决小问题的最优解比解决大问题的最优解要简单的多,很多的小问题的最优解就组成了大问题的最优解.从这里也可以发现,递归和分治在一起用的话会比较好,同时也是容易想到的. 下面讲一讲递归的一些我会的东西,递归就是间接和直接调用自身的算法.比如斐

N皇后问题(递归回溯)

今天讲了N后问题,现在来复习一下. N后问题就是在N*N格的棋盘上面放置彼此不受攻击的n个皇后.这里的皇后指的是国际象棋中的皇后,按照国际象棋的规则,皇后可以攻击当前行和当前列还有同一斜线的棋子.简单来说,就是n个皇后的位置不可以在同一行,同一列,同一斜线.因为这几天学习的是回溯算法,很简单的想到了回溯.这个问题也是经典的回溯算法习题之一. 下面来想一下问题所包含的条件,明显的条件就是棋盘是n*n,而且很简单就想到n个皇后不可以在同一列,就是每一列都会有一个皇后.下面就是隐式的条件了,同一行和同

Python函数参数全面介绍

本文主要介绍Python的函数参数,各种形式的参数.建议动手试试,可以加深理解. 函数参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂的逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 默认参数 默

递归该怎么写(一)

递归定义 递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用. 我们现在开始来举例子,然后总结如何写好递归程序.(这种针对可以找出数学表达式的递归程序,对于写不出数学表达式的或者不好找的会在之后的博客中补充) 例子1: n的阶乘. 我们先来写出数学表达式 代码部分: 1 __author__ = "WSX" 2 3 def f(n): 4 if n == 1: 5 return 1 6 else: 7 return f(n-1) * n

ES6 新增的关键字 yield

yield是ES6的新关键字使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者.它可以被认为是一个基于生成器的版本的return关键字.  yield关键字实际返回一个IteratorResult对象,它有两个属性,value和done.value属性是对yield表达式求值的结果,而done是false,表示生成器函数尚未完全完成.一旦遇到 yield 表达式,生成器的代码将被暂停运行,直到生 成器的 next() 方法被调用.每次调用生成器的next()方法时,生成器