递归

  • 特性

    • 必须有明确的结束条件;
    • 每进入深一层递归,问题规模比上层应有所减少;
    • 递归效率不高,层次更多会导致栈溢出;
def calc(n):
    print(n)
    if n // 2 > 0:
        return calc(n // 2)
calc(10)

函数式编程

  • 计算机:在计算机层面,CPU执行的是加减乘除以及各种判断和跳转指令代码,因而汇编是最贴近计算机的语言,越接近计算机底层的语言执行效率越高;
  • 计算:指数学意义上的计算,越抽象的计算,离计算机硬件越远,效率越低;
  • 定义:一种抽象程度极高的编程范式,纯粹的函数式编程语言编写的函数没有变量,故对于一个函数,只要输入确定,输出就确定,函数式编程是一种讨论如何编程的方法论,主要思想是把运算过程尽量集成一系列嵌套的函数调用;

高阶函数

  • 定义:把其他函数作为参数的函数叫做高阶函数;
def add(x, y, func):
    return func(x) * func(y)
result = add(4, 8, abs)
print(result)

修饰器

  • 原则:

    • 不能修改被装修函数的源代码;
    • 不能修改被装饰函数的调用方式;
# --*--coding:utf-8--*--
#! /usr/bin/python3
user, passwd = 'k', '12345'
def auth(func):
    def wrapper(*args, **kwargs):
        username = input('username:').strip()
        password = input('passwd:').strip()

        if user == username and passwd == password:
            print('passed')
            func(*args, **kwargs)
        else:
            exit('Invalid username or password.')
    return wrapper

def index():
    print('welcomt to index page')

@auth
def home():
    print('welcome to home page')

@auth
def bbs():
    print('welcomt to bbs page')

index()
home()
bbs()

迭代器与生成器

  • 生成器:generator,列表元素按某种算法推算而出,一边循环一边计算的机制,称为生成器,只有在调用时才产生相应数据;
  • 直接作用域for循环的对象称为可迭代对象,Iterable,使用isinstance()判断一个对象是否为Iterable对象,可用于for循环的数据类型有 以下两类:
    • 集合数据类型:listtupledictsetstr
    • generator,包括生成器和带yield的可迭代对象;
  • 迭代器: 可以别next()函数调用并不断返回下一个值的对象称为迭代器,他们表示一个惰性计算的序列,Iterator
  • 生成对象都是迭代器对象,listdictstr虽然是可迭代对象,但却不是迭代器,使用iter()函数可将他们从迭代对象转换为迭代器;

json和pickle数据序列化

# json序列化与反序列化
import json
info = {
    'name':'k',
    'age':22
    'sex':'男'
}
# 序列化
f = open('test.txt', 'w')
f.write(json.dumps(info))
# 反序列化
f = open('test.txt', 'r')
data = json.loads(f.read())
print(data['sex'])
f.close()
# pickle序列化与反序列化
import pickle
info = {
    'name':'k',
    'age':22
    'sex':'男'
}
# 序列化
f = open('test.txt', 'wb')
f.write(pickle.dumps(info)) #与下一句作用相同
pickle.dump(info, f)
# 反序列化
f = open('test.txt', 'rb')
data = pickle.loads(f.read())
print(data['sex'])
f.close()

欢迎关注微信公众号:村雨1943;创作不易,未经同意,转载请注明出处~

最新文章

  1. UIView--震动效果
  2. IIS URL Rewrite redirect from one Domain to another
  3. 发现前端框架 bui-min.js
  4. jQuery.fn.extend与jQuery.extend
  5. makefile复习时发现的编写makefile规则注意事项
  6. Oracle PL/SQL 找出100以内是3和5的倍数的数 循环语句
  7. C/C++中文的编码和字符串处理
  8. C语言基础学习运算符-基本算术运算符
  9. 7.3.2 Using Backups for Recovery 使用备份用于恢复
  10. SQL Server数据库远程操作
  11. HDU字符串基础题(1020,1039,1062,1088,1161,1200,2017)
  12. CSS House
  13. Linux内核最新的连续内存分配器(CMA)——避免预留大块内存【转】
  14. [Spark][Python][DataFrame][Write]DataFrame写入的例子
  15. CSS实现自适应九宫格布局 大全
  16. C语言编程(多线程)
  17. Petrozavodsk Winter Camp, Day 8, 2014, Rectangle Count
  18. 0基础学习MySQL 之常用数据类型
  19. 【比赛游记】NOIP2017游记
  20. 【Oracle】-【LRU和DBWR】-LRU算法与DBWR中的应用

热门文章

  1. 洛谷P2580 于是他错误的点名开始了 题解
  2. 【LG3783】[SDOI2017]天才黑客
  3. Codeforces1254B2 Send Boxes to Alice (Hard Version)(贪心)
  4. [技术博客]基于动态继承类、WebDriver的浏览器兼容性测试框架搭建
  5. windows获取管理员权限 操作文件
  6. exception: TypeError: Cannot read property '_modulesNamespaceMap' of undefined at getModuleByNamespac
  7. IIS调优--增加并发处理能力
  8. cmd find命令用法
  9. 编写基于TCP的应用程序
  10. MongoDB开发深入之二:索引