Δ汉诺塔例子

# 定义三个全局的列表
la = []
lb = []
lc = [] stepn = 0 def create_hano(n):
'''构建由n个圆盘组成的汉诺塔'''
global la
la = [i for i in range(n, 0, -1)] def move(src, dest):
'''从src柱子上最上面的圆盘移动到dest柱子上'''
dest.append(src.pop())
global stepn
stepn += 1 input() print('柱子A:',la)
print('柱子B:',lb)
print('柱子C:',lc) def start_game(src, tmp, dest, n):
if n == 1:
move(src, dest)
return None
if n < 1:
return -1
start_game(src, dest, tmp, n-1)
start_game(src, tmp, dest, 1)
start_game(tmp, src, dest, n-1) create_hano(4)
print('柱子A:',la)
print('柱子B:',lb)
print('柱子C:',lc)
start_game(la, lb, lc, 4)
print(stepn)
  • 生成器(generator):
  • 迭代器(Iterator):

      next()得到成员的:generator

  • 可迭代(Iterable):

    能用for遍历的:str, list, tuple, dict, set, generator, range
    collections模块中定义的Iterator和Iterable类型

# 从1开始的fib
def fib(n):
a, b = 0, 1
while n > 0:
# print(b)
yield b # 随着生成器调用next方法,得到yield的值
a, b = b, a+b
n -= 1
return 'done' g = fib(10)
print(g)
  • 匿名函数 lambda : 适合函数功能简洁的
f = lambda x : True if x % 2 == 0 else False
print(type(f)) print(f(101)) f = lambda : print('hello world')
f() f = lambda x, y : x * y
print(f(10, 14)) f = lambda x, y=2 : x ** y
print(f(5, 5)) f = lambda x, *arg : print(x, arg)
print(f(1, 2,3,4,5,6))
  • 高阶函数:函数为参
  • map():对多个参数进行同一操作
    def test(n):
    return n ** 3 # g = map(test, (1,2,3,4))
    g = map(lambda x : x**3, (1,2,3,4))
    print(type(g)) print(next(g))
    print(next(g))
    print(next(g)) '''
    for res in g:
    print(res)
    '''
    l = list(g)
    print(l)
    '''
    练习1:
    生成一个由5个10以内随机整型数组成的列表,使用高阶函数map实现将5个整型数分别转换为字符串
    '''
    import random l = [random.randrange(10) for i in range(5)]
    print(l)
    l = list(map(str, l))
    print(l) '''
    练习2:
    将列表中每一个元素都转换为一个标准的标题,首字符大写其它小写
    l = ['hello world', 'Good AFTERNOON', 'morning']
    '''
    l = ['hello world', 'Good AFTERNOON', 'morning']
    l = list(map(lambda x : x.title(), l))
    print(l)
  • filter():过滤
    res = filter(lambda x : x % 2 == 0, [random.randrange(100) for i in range(10)])
    print(list(res))
  • sorted():排序,有key值默认为NONE
    l = ['hello', 'Yes', 'PYTHON', 'world', 'Go']
    res = sorted(l, key=str.lower, reverse=True) # 按小写排序
    print(res)
  • reduce() :两个变量后跟类型  functools
from functools import reduce

def f(x, y):
return x * 10 + y n = reduce(f, (1,5,6,7))
print(type(n), n) n = reduce(lambda x,y : x*y, (1,2,3,4,5,6))
print(n)
'''
实现一个将字符串转换为整型数的函数str2int()
'1432' ----> 1432 不允许调用int函数
'''
def str2int(s):
g = map(lambda x:ord(x)-ord('0'), s)
return reduce(lambda x, y:x*10+y, g) print(str2int('1423'))
  • 装饰器(decorator):修饰函数

 

import datetime
d = datetime.date()
print(d)
'''
# 函数作为返回值
def test():
return str f = test()
print(f(1234)) import functools def decorator(f):
@functools.wraps(f) # 此装饰器作用是将f的函数名赋值给wrapper
def wrapper(*args, **kw):
'''装饰器的内部函数'''
# print(args, kw)
print('hello python')
# print(f.__name__)
return f(*args, **kw)
return wrapper @decorator
def show(name1, name2):
'''验证装饰器功能的小函数'''
print('hello %s and %s' % (name1, name2))
return 100 print(show.__name__)
print(show.__doc__)
res = show('aa', 'bb') # show = decorator(show)
print(res)

  带参数的装饰器

import functools

def log(text, text2):
def decorator(f):
@functools.wraps(f)
def wrapper(*args, **kw):
print('log', text, text2)
print('这个装饰器好吧?')
return f(*args, **kw)
return wrapper
return decorator @log('argument', 'haha')
def now():
print('2018-12-12') now() # now = log('argument')(now)

Python_day6的更多相关文章

  1. python_day6学习笔记

    一.Logger模块 logging.basicConfig函数 可通过具体参数来更改logging模块默认行为,可用参数有 filename: 用指定的文件名创建FiledHandler(后边会具体 ...

随机推荐

  1. SYSAUX表空间清理

    最近zabbix告警某业务sysaux表空间使用率超过95%,使用sql查看sysaux表空间设置了32G,32G的表空间竟然使用了95%.一般来讲除开业务数据存放的表空间,DBA要着重关注SYSTE ...

  2. Flume架构

    Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统: Flume 介绍 Flume是由cloudera软件公司产出的高可用.高可靠.分布式的海量日志收集系 ...

  3. Chrome 插件安装技巧

    参考http://blog.csdn.net/shiyaru1314/article/details/49303317 最近在学习WEBAPI  由于没有界面可以调试,需要安装Chrome中的插件 P ...

  4. 44个Java代码性能优化总结

    https://blog.csdn.net/xiang__liu/article/details/79321639 ---稍后有时间整理

  5. android toolbar效果4

    两个标题的,右边一个按钮 activity_main.xml: <android.support.v7.widget.Toolbar style="style/toolbarStyle ...

  6. C#设计模式(4)——抽象工厂模式(Abstract Factory)

    简单工厂模式: 简单工厂模式的工厂类随着产品类的增加需要增加额外的代码 工厂方法模式: 工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性 但是在实际应用中,一个工厂不止会创建单 ...

  7. orcal 程序自动和手动项

    orcal在电脑开机后,为了可以使用 这两个服务设置为自动(为了使用),其他设置为手动(减少电脑压力):

  8. pyqt---------事件与信号处理

    pyqt:信号与槽的关系 GUI应用程序是事件驱动的. 事件主要由应用程序的用户生成. 但它们也可以通过其他手段产生,例如:网络连接,窗口管理器或定时器. 当我们调用应用程序的exec_()方法时,应 ...

  9. 创建Flask实例对象时的参数和app.run()中的参数

    app=Flask(name,static_folder=“static”,static_url_path="/aaa",template_folder=“templates”) ...

  10. python_10 迭代器和生成器

    迭代器协议: 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stopiteration异常,以终止迭代(只能往后走不能往前退) 2.可迭代对象:实现 ...