首页 > 编程语言 > 详细

python学习笔记10

时间:2020-03-27 15:19:22      阅读:71      评论:0      收藏:0      [点我收藏+]

python学习笔记10

一、闭包

内层函数对外层函数中非全局变量的引用,就会形成闭包。被引用的非全局变量称为自由变量,这个自由变量会与内层函数产生一个绑定关系。自由变量不会再内存中消失。

# 闭包只能存在于嵌套函数中
def make_average():
    # 以下部分就是一个闭包
    li_1 = []
    def average(num):
        li_1.append(num)
        return sum(li_1)/len(li_1)    
    return average

avg = make_average()
print(avg(100)) # 100.0
print(avg(200)) # 150.0

二、装饰器

开放封闭原则:对代码的拓展开放,对源码的修改封闭

装饰器:完全遵循开放封闭原则。在不改变原函数的代码以及调用方式的前提下,为其增加额外的新功能的函数

# 装饰器是一个函数
# 示例,给函数运行加一个运行时间显示
import time

def timmer(f):
    def inner():
        start_time = time.time() # 记录初始时间
        # 如果被修饰函数没有返回值,只需写f(),且inner函数不需要返回值
        r = f() # 运行函数
        end_time = time.time() # 记录结束时间
        print(end_time-start_time) # 返回函数运行时间
        return r # 这里返回的被修饰函数的返回值
    return inner
@timmer # 在需要装饰的函数前写‘@‘+装饰器
def func_1():
    print(‘下一行显示函数运行时间‘)
    time.sleep(1) # 让函数停止运行1秒,即运行时间加1秒
    return 666
res = func_1()
print(res)
# 下一行显示函数运行时间
# 1.000281572341919

# 可以看出func_1的返回值没有出现

上述装饰过程可以由以下代码实现:

import time

def timmer(f):
    def inner():
        start_time = time.time() # 记录初始时间
        r = f() # 运行函数
        end_time = time.time() # 记录结束时间
        print(end_time-start_time) # 返回函数运行时间
        return r
    return inner

def func_1():
    print(‘下一行显示函数运行时间‘)
    time.sleep(1) # 让函数停止运行1秒,即运行时间加1秒
    return 666

func_1 = timmer(func_1) # 这一行命令作用跟装饰器效果一样
res = func_1()
print(res)

? 可以看出,第一种装饰器使用方法简洁明了,实际上这正是python对装饰器进行的一个优化。上述修饰器的情况还是很简单的情形,真正的修饰器还需要考虑被修饰函数传入参数等情况。

三、自定义模块

模块是什么?其实本质上模块就是.py文件,它是封装语句的最小单位。而自定义模块实质上就是自己定义.py文件,其中可以包含:变量定义,可执行语句,for循环,函数定义等,这些统称为模块的成员。

模块的运行方式:

  • 脚本方式:直接用解释器执行。
  • 模块方式:被其他的模块import导入,为导入它的模块提供资源(变量,函数定义,类定义等)。自定义模块被其他模块导入时,其中的可执行语句会立即执行。

__name__属性的使用方式:在脚本方式运行时__name__=__main__,在模块方式运行时,__name__=被导入模块名称

系统模块导入的路径:

  • 内存中:如果之前成功导入过某个模块,直接使用已经存在的模块
  • 内置路径中:安装路径下:Lib,sit-packages
  • PYTHONPATH:import时寻找模块的路径
  • sys.path:一个路径的列表

如果在上述三个路径都找不到指定模块,程序就会报错。

python学习笔记10

原文:https://www.cnblogs.com/20-03-14/p/12580932.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!