装饰器

定义:本质是函数,装饰其他函数,即为其他函数添加附加功能的

原则:  1  不能修改被装饰函数的源代码

     2  不能改变被装饰函数的调用方式(对于被装饰函数来说完全透明,不会受影响)

实现装饰器功能的知识储备:

  1  函数即变量

      匿名函数 calc=lambda x:x*3 使用完即回收

  2  高阶函数

    定义:a 把一个函数名当做实参传给另一个函数  (满足装饰器原则1)

         b 返回值中包含函数名 (返回值中包含函数名)

     举例:请见pycharm的练习代码

  3  嵌套函数

    在一个函数体内用def去声明另一个函数,而不是仅仅去调用另一个函数

  4  高阶函数+嵌套函数实现装饰器的功能

    思考:用以上两个知识点,怎么写一个装饰器

    示例:import timedef timer(func):

    def deco(*args,**kwargs):
start_time = time.time()
func(*args,**kwargs)
end_time = time.time()
print("the func run time is %s" % (end_time - start_time), "s")
return deco @timer #= test1=timer(test1) deco=test1 deco(*args,**kwargs)=test1(*args,**kwargs)
def test1():
time.sleep(3)
print("in the test1")
@timer #= test2=timer(test2) deco=test2 deco(*args,**kwargs)=test2(*args,**kwargs)
def test2(name):
time.sleep(3)
print("in the test2,the name is %s" % name) test1()
test2("huhu") 如果装饰器声明需要有一个参数作为变量分类,则装饰器代码的外层再嵌入一层,传参func,装饰器的实参对应的是声明时的值即可。 协程并发 消费者生产者模型实例,详见Pycharm代码 我们已经知道,可直接作用于for循环的数据类型有:
A  list、tuple、dict、set、str
B  generator  包括生成器和带yield的generator function
这些可直接作用于for循环的对象,统称为可迭代对象:Iterable
可以使用Instanse()方法判断一个对象是否是Iterable对象
而生成器,不但可以被for循环,还可以被next()对象不断循环返回下一个值 迭代器
定义:可以被next()调用并不断返回下一个值的对象,我们叫做迭代器:Iterator
生成器都是Iterator对象,而list、tuple、dict、str等都不是Iterator对象
使用iter()可以变为迭代器 小结:
1  凡是可作用于for循环的对象,都是可迭代对象
2  凡是可作用于next()的对象,都是迭代器
3  非迭代器的可迭代对象,都可以通过iter()函数将其变为迭代器对象
4  Python3,本质上for循环的实现,其实本质就是一个迭代器,通过不断调用next()来实现的
  文件的读取,for line in f:也是一种迭代器的实现方式,如果用f.readlines()则生成一个list,占用大量系统资源
  而Python2里,f.xreadlines()和xrange(10)都是一种迭代器,只能用next()方法调用而动态计算生成下一个的值。 内置方法:
abs  取绝对值
all  判断可迭代对象中的每个元素,只要有一个为False,则返回False,否则返回True
any  同上,相反只要有一个为True,则返回True,否则返回False
ascii 列表转字符串
bin  数字转二进制
bool  判断真假
bytearray  字节数组格式,可单字节修改
bytes    字节格式
callable  判断是否可被当做方法调用
chr  返回ascII对应的值
compile  将字符串编译成指定执行格式的代码
complex  复数
dict  字典
dir  看对象有什么方法
divmod  返回商和余数
enumerate  枚举
eval  简单的字符串公式计算得出结果,即为取字符串的引号之间的内容并简化计算。
    复杂的只能用exec计算
fliter    filter(lambda n:n>5,range(10))
(匿名函数:只支持三元运算等简单函数的写法)
map      map(lambda n:n*2,range(10))
reduce    详见代码
float  浮点
format  格式化
frozenset  不可变集合
getattr   (面向对象时再讲)
gloables  返回当前程序中所有变量的字典 hash  散列值 后台有一种映射关系,将无序数据存成有序映射,便于快速折半查找检索方式的适用,字典的检索就是这种方式
这种映射关系叫做HASH.md5也是一种较复杂的hash算法
比较两个文件是否内容相同,最快的方式是转成md5,然后比较md5,也是用hash方式快速比较 help  方法的帮助
hex  数字转16进制
input
int
isinstance
issubclass
len
locals  本地变量的字典形式
max
min
next  相当于迭代器中的__next__
oct  转8进制
open
ord
pow
range
repr  用字符串表示对象
reversed  反转
round  保留小数
set  集合
setattr  面向对象会讲
slice  切片
sorted  排序
字典按照默认key排序:sorted(a.items())
指定按照value排序:sorted(a.items(),key=lambda x:x[1])
staticmethod
str
sum
super
tuple
type  python数据类型的祖师爷
vars  返回一个对象的属性名
zip  一一对应组合两个列表    zip按数量少的进行对应,map按数量多的进行对应 #import decorator等效于下列方法:
__import__('decorator') json序列化:
Json用于所有开发语言之间的数据对接
默认只支持简单的数据类型的转换 pickle:
可支持所有类型的转换
其转换成二进制,请注意。
dumps()
loads() 注意:永远只Dump一次;只Load一次
每次都分开生成一次的记录文件 软件目录结构规范
/bin
/conf
/core
/doc 作业《购物商城+ATM》太难,以后再做吧~~~

Python3.5 学习四的更多相关文章

  1. 【Mac + Appium + Python3.6学习(四)】之常用的IOS自动化测试API总结

    环境: Appium:1.9.1 Appium-desktop:1.7.1 Xcode:10.0 IOS:iPhone5S(10.3.3) Mac:10.13.6 ①获取手机屏幕size:长.宽 &l ...

  2. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  3. 从零开始学习PYTHON3讲义(四)让程序更友好

    <从零开始PYTHON3>第四讲 先看看上一讲的练习答案. 程序完成的是功能,功能来自于"程序需求"("需求"这个词忘记了什么意思的去复习一下第二讲 ...

  4. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  5. python3.4学习笔记(四) 3.x和2.x的区别,持续更新

    python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...

  6. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

  7. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  8. python3.4学习笔记(三) idle 清屏扩展插件

    python3.4学习笔记(三) idle 清屏扩展插件python idle 清屏问题的解决,使用python idle都会遇到一个常见而又懊恼的问题——要怎么清屏?在stackoverflow看到 ...

  9. python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容

    python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...

随机推荐

  1. spring quartz 配置及说明

    方式一,jobDetail的bean利用MethodInvokingJobDetailFactoryBean 工厂包装 : ()定义一个bean,执行具体的业务操作. <bean id=&quo ...

  2. mysql java.sql.SQLException: Can't call commit when autocommit=true

    java.sql.SQLException: Can't call commit when autocommit=true at com.mysql.jdbc.SQLError.createSQLEx ...

  3. javax.persistence.RollbackException: Error while committing the transaction

    the valid jpa update entity code gives the exception below in the case of  wrong dependency( org.hib ...

  4. Go Packages、Variables、functions

    [Go Packages.Variables.functions] 1.定义包名. 2.引入Package. 3.定义导出的变量.首字母必须大写. 4.函数.Notice that the type ...

  5. PLSQL result set exceeds the maximum size(100M)if necessary,you can explicitly confinue this query

    在PL SQL 里执行一条语句,当反正信息达到2w条时,弹出如下内容:result set exceeds the maximum size(100M)if necessary,you can exp ...

  6. sqlserver流程控制(待续)

    if else: if(1=1) begin--必须1个=号print '111'--begin end 之间必须要有内容end else beginprint '222'end while: DEC ...

  7. 利用WKWebView实现js与OC交互注意事项

    最近在写一些关于wkwebview的一些代码,发现了几点心得,记录一下. 1.js调用OC 我是利用wkwebview进行的开发实现,主要代码有三部分 1.向config注入OC对象 [config. ...

  8. OLI 课程 & Java入学考试的五道题

    Unit  1:: Programming with Java ✔️ 机械.自动.不需要智慧地执行原始的内置指令. 字节码相同,JVM不同(体现平台) ✖️ In modern computers i ...

  9. Multiply Strings大整数乘法

    [抄题]: 以字符串的形式给定两个非负整数 num1 和 num2,返回 num1 和 num2 的乘积. [暴力解法]: 时间分析: 空间分析: [思维问题]: 还要找到结果中第一位不等于0的数再添 ...

  10. c语言静态断言-定义自己的静态断言

    c语言里面可以自己定义静态断言,更加方便的调试代码. 使用静态断言 #include<stdio.h> #include<stdlib.h> #include<asser ...