递归

  • 特性

    • 必须有明确的结束条件;
    • 每进入深一层递归,问题规模比上层应有所减少;
    • 递归效率不高,层次更多会导致栈溢出;
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;创作不易,未经同意,转载请注明出处~

Python知识点总结篇(四)的更多相关文章

  1. Python知识点总结篇(五)

    软件目录结构规范 目标: 提高可读性: 提高可维护性: 常见结构 Demo/ |-- bin/ #存放项目的一些可执行文件 | |-- demo #可执行程序,启动demo调main.py | |-- ...

  2. Python知识点总结篇(三)

    文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量: 通过句柄对文件进行操作: 关闭文件: with:自动关闭文件: with open('log', 'r') as f: ... 文件 ...

  3. Python知识点总结篇(一)

    Python基础 变量 变量类型: 1.数字型 整形:int: 浮点型:float: 布尔型:bool,True和False: 复数型:complex: 2.非数字型 字符串: 列表: 元祖: 字典: ...

  4. Python知识点总结篇(二)

    列表 列表:一个值,包含多个字构成的序列,用[ ]括起来,[]是一个空列表,不包含任何值,类似于空字符串,负数下标表示从后边开始,-1表示列表最后一个下标,它是一种可变的数据类型,值可以添加.删除或改 ...

  5. Python之路(第四十六篇)多种方法实现python线程池(threadpool模块\multiprocessing.dummy模块\concurrent.futures模块)

    一.线程池 很久(python2.6)之前python没有官方的线程池模块,只有第三方的threadpool模块, 之后再python2.6加入了multiprocessing.dummy 作为可以使 ...

  6. 第六篇:Python函数进阶篇

    在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点:  一.Python的迭代器 ...

  7. Python知识点汇总

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  8. 《python开发技术详解》|百度网盘免费下载|Python开发入门篇

    <python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby  内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...

  9. 机器学习算法与Python实践之(四)支持向量机(SVM)实现

    机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 zouxy09@qq.com http://blog.csdn.net/ ...

随机推荐

  1. 第03组 Alpha冲刺(4/4)

    队名:不等式方程组 组长博客 作业博客 团队项目进度 组员一:张逸杰(组长) 过去两天完成的任务: 文字/口头描述: 制定了初步的项目计划,并开始学习一些推荐.搜索类算法 GitHub签入纪录: 暂无 ...

  2. javaweb利用filter拦截未授权请求

    项目上有个小需求,要限制访问者的IP,屏蔽未授权的请求.该场景使用过滤器来做再合适不过了. SecurityFilter.java: public class SecurityFilter imple ...

  3. [原创]浅谈对任务分解法WBS应用

    [原创]浅谈对任务分解法WBS应用 1.WBS是什么? 即Work Breakdown Structure如何进行WBS分解:目标→任务→工作→活动 2.WBS分解的原则:将主体目标逐步细化分解,最底 ...

  4. java 多页pdf转化为多张图片

    相关jar包: <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian ...

  5. 对IT战略的认识

    提到战略,我不由想起了战术这个名词.按照我的理解,战术属于短期内的计划,是战略的组成部分,是实施次战略的短期工作计划或行动步骤:而战略是用来帮助我们赢取目标的行动计划(例如为获得更多的潜在客户而制定的 ...

  6. linux中nohup 与 & 的区别

    Linux/Unix下,通常只有守护进程可在脱离终端的情况下能继续执行,而普通进程在关闭终端时会因收到SIGHUP信号(挂起信号)而退出.当终端退出后,由该终端启动的后台程序自动退出. 若想命令在后台 ...

  7. bitcoinjs-lib 哈希交易之多笔交易合并。

    转账的时候需要手动寻找每一笔未花费记录实在太费时. 比特币转账需要提取或合并所有未花费的交易中的比特币,才能实现交易. import * as bitcoin from 'bitcoinjs-lib' ...

  8. pg中与超时设置有关的参数

    statement_timeout控制语句执行时长,单位是ms.超过设定值,该语句将被中止.不推荐在postgresql.conf中设置,因为会影响所有的会话,如非要设置,应该设置一个较大值. loc ...

  9. config:fail,Error: 系统错误,错误码:63002,invalid signature [20191104 17:18:1

    需要检查下后端有没有缓存到redis.这个很重要不然也会报这个错

  10. pycharm把制表符(tab)转换为空格(PEP8)

    pycharm把制表符转换为4个空格 pycharm显示空格