Python知识点总结篇(四)
递归
- 特性
- 必须有明确的结束条件;
 - 每进入深一层递归,问题规模比上层应有所减少;
 - 递归效率不高,层次更多会导致栈溢出;
 
 
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循环的数据类型有 以下两类:- 集合数据类型:
list、tuple、dict、set、str等 generator,包括生成器和带yield的可迭代对象;
 - 集合数据类型:
 - 迭代器: 可以别
next()函数调用并不断返回下一个值的对象称为迭代器,他们表示一个惰性计算的序列,Iterator; - 生成对象都是迭代器对象,
list、dict、str虽然是可迭代对象,但却不是迭代器,使用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知识点总结篇(四)的更多相关文章
- Python知识点总结篇(五)
		
软件目录结构规范 目标: 提高可读性: 提高可维护性: 常见结构 Demo/ |-- bin/ #存放项目的一些可执行文件 | |-- demo #可执行程序,启动demo调main.py | |-- ...
 - Python知识点总结篇(三)
		
文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量: 通过句柄对文件进行操作: 关闭文件: with:自动关闭文件: with open('log', 'r') as f: ... 文件 ...
 - Python知识点总结篇(一)
		
Python基础 变量 变量类型: 1.数字型 整形:int: 浮点型:float: 布尔型:bool,True和False: 复数型:complex: 2.非数字型 字符串: 列表: 元祖: 字典: ...
 - Python知识点总结篇(二)
		
列表 列表:一个值,包含多个字构成的序列,用[ ]括起来,[]是一个空列表,不包含任何值,类似于空字符串,负数下标表示从后边开始,-1表示列表最后一个下标,它是一种可变的数据类型,值可以添加.删除或改 ...
 - Python之路(第四十六篇)多种方法实现python线程池(threadpool模块\multiprocessing.dummy模块\concurrent.futures模块)
		
一.线程池 很久(python2.6)之前python没有官方的线程池模块,只有第三方的threadpool模块, 之后再python2.6加入了multiprocessing.dummy 作为可以使 ...
 - 第六篇:Python函数进阶篇
		
在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点: 一.Python的迭代器 ...
 - Python知识点汇总
		
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
 - 《python开发技术详解》|百度网盘免费下载|Python开发入门篇
		
<python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby 内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...
 - 机器学习算法与Python实践之(四)支持向量机(SVM)实现
		
机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 zouxy09@qq.com http://blog.csdn.net/ ...
 
随机推荐
- typedi 强大的javascript以及typescript 依赖注入框架
			
typedi 是typestack团队提供的依赖注入解决方案,对于typescript 我们可以使用注解的开发方式,官方的文档也比较详细 javascript 使用 基于函数的服务注入 var Ser ...
 - ksh与bash的异同
			
(1) 在ksh是,数组的index只能从0到1023,而bash中没有这样的限制. (2) ksh与bash初始化数组的语法不同: 如下所示 icymoon# ksh icymoon# set -A ...
 - 总结TCP与UDP的区别
			
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认.窗口.重传.拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源. TCP的缺 ...
 - centOS7开启ssh免密登陆
			
一.登陆服务器生成ssh-key 二.把ssh-key复制到被登陆机器上 三.设置权限 root# .ssh 文件夹权限 root# .ssh/authorized_keys 文件权限 四.测试是否正 ...
 - HTML5中的Web Worker技术
			
为了让后台程序更好的执行,在HTML5中设计了Web Worker技术.Web Worker的产生主要是考虑到在HTML4中JavaScript Web程序都是以单线程的方式执行的,一旦前面的脚本花费 ...
 - RequireJS - 快速指南
			
原文: https://www.tutorialspoint.com/requirejs/requirejs_quick_guide.htm RequireJS - 概述 RequireJS是一个Ja ...
 - Linux虚拟机:发布WebService接口出现异常,无法访问接口
			
Linux虚拟机:发布WebService接口出现异常,无法访问接口 今天在部署WebService工程的时候遇到的问题: 在Linux虚拟机上部署一个tomcat同时在tomcat下放置2个工程,其 ...
 - VS2015 创建C++动态库及使用
			
转载:https://blog.csdn.net/w_x_myself/article/details/82252646 1.dll的特点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代 ...
 - k8s记录-docker导入导出改标签
			
docker save <repository>:<tag> -o <repository>.tar docker save mysql:latest -o m ...
 - (转载)极大似然估计&最大后验概率估计
			
前言 不知看过多少次极大似然估计与最大后验概率估计的区别,但还是傻傻分不清楚.或是当时道行太浅,或是当时积累不够. 这次重游机器学习之路,看到李航老师<统计学习方法>中第一章关于经验风险最 ...