python高级(补充)

2023-12-27 23:18:24

闭包

闭包的定义:

在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包

通过闭包的定义,我们可以得知闭包的形成条件:

1- 在函数嵌套(函数里面再定义函数)的前提下
2- 内部函数使用了外部函数的变量(还包括外部函数的参数)
3- 外部函数返回了内部函数
2,闭包的作用
闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。

def f1(num):
    def f2(a,b):
        r = num + 100+a+b
        print(r)
    return f2

if __name__ == '__main__':
    a = f1(100)
    a(100,50)
# 就是一个外部方法接收参数,内部方法进行计算,并让外部函数返回内部函数的名字
# 目的就是延长外部参数的生命周期

装饰器

装饰器的定义
就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数。

装饰器的功能特点:
不修改已有函数的源代码
不修改已有函数的调用方式
给已有函数增加额外的功能


# 添加一个登录验证的功能
def check(fn):
    def inner():
        print("请先登录....")
        fn()
    return inner


def comment():
    print("发表评论")

# 使用装饰器来装饰函数
comment = check(comment)
comment()

装饰器的语法糖写法

Python给提供了一个装饰函数更加简单的写法,那就是语法糖,语法糖的书写格式是: @装饰器名字,通过语法糖的方式也可以完成对已有函数的装饰

# 添加一个登录验证的功能
def check(fn):
    print("装饰器函数执行了")
    def inner():
        print("请先登录....")
        fn()
    return inner

# 使用语法糖方式来装饰函数
@check
def comment():
    print("发表评论")

comment()

说明:
@check 等价于 comment = check(comment)
装饰器的执行时间是加载模块时立即执行


# 添加输出日志的功能
def logging(fn):
    def inner(num1, num2):
        print("--正在努力计算--")
        fn(num1, num2)

    return inner

# 使用装饰器装饰函数
@logging
def sum_num(a, b):
    result = a + b
    print(result)


sum_num(1, 2)

with语句

try:
    # 1、以读的方式打开文件
    f = open("1.txt", "r")
    # 2、读取文件内容
    f.write("xxxxx")

except IOError as e:
    print("文件操作出错", e)

finally:
    # 3、关闭文件
    f.close()

# 1、以写的方式打开文件
with open("1.txt", "w") as f:
    # 2、读取文件内容
    f.write("hello world")

深浅拷贝

import copy

num1 =1
print(id(num1))
num1=2
print(id(num1))

num2 = copy.copy(num1)
print(id(num2))

print("以下为不可变类型"*5)
li = [1,2,3]
print(id(li))
li.append(4)
print(id(li))

li2 = copy.copy(li)
print(id(li2))
print(li2)

print("浅拷贝两层"*7)
li3 = [1,2,3,[4,5]]
print(id(li3))
# 第二层打印出来的id值是相同的
print(id(li3[3]))

li2 = copy.copy(li3)
print(id(li3[3]))
print(id(li2))
print(li2)

print("深拷贝"*50)

li4 = [1,2,3,[4,5]]
print(id(li4))
# 第二层打印出来的id值是不同的
print(id(li3[3]))

li5 = copy.deepcopy(li4)
print(id(li5[3]))
print(id(li5))

print("浅拷贝外面可变,里面不可变"*30)
list1 =['qw',12,(1,2)]

print(id(list1))
list1.append(4)
print(id(list1))
print(id(list1[2]))

list12 = copy.deepcopy(list1)
print(id(list12))
print(id(list12[2]))
140723981244064
140723981244096
140723981244096
以下为不可变类型以下为不可变类型以下为不可变类型
2338845806400
2338845806400
2338845810816
[1, 2, 3, 4]
浅拷贝两层浅拷贝两层浅拷贝两层浅拷贝两层
2338845811136
2338845740608
2338845740608
2338845811584
[1, 2, 3, [4, 5]]
深拷贝深拷贝深拷贝深拷贝深拷贝深拷贝深拷贝深拷贝深
2338845811456
2338845740608
2338845805120
2338845811200
浅拷贝外面可变,里面不可变浅拷贝外面可变,里面不可
2338847010496
2338847010496
2338844366720
2338847009920
2338844366720

re模块(正则表达式)

\w

  • 匹配非特殊字符

  • 数字、字母、中文、

  • \W

    • 匹配特殊字符

    • \s

    • 匹配空格、\n、\t

    • 一个长度

  • \S

    • 匹配非空格、非\n、非\t

    • 数字、特殊字符、中文等等都行

在这里插入图片描述

# 导入re模块
import re

# 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)

# 如果上一步匹配到数据的话,可以使用group方法来提取数据
result.group()

请添加图片描述

文章来源:https://blog.csdn.net/yfq_29/article/details/135254828
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。