1.4、Python基础

编程入门 行业动态 更新时间:2024-10-27 14:24:50

1.4、Python<a href=https://www.elefans.com/category/jswz/34/1770030.html style=基础"/>

1.4、Python基础

1.3、Python基础

  • 1、闭包
  • 2、装饰器-语法糖写法
  • 3、Python中的反射

1、闭包

闭包就是外部函数中定义一个内部函数,内部函数引用外部函数中的变量,外部函数的返回值是内部函数
def Student():name = "susu"age = 21print(f"{name}{age}了")def School():adress = "河北"banji = 204print(name + "在" + adress + "上学")return SchoolStudent()()

2、装饰器-语法糖写法

能够在不改变原有函数的基础上,在原来的基础上添加额外的功能的代码,就叫做装饰器。

对于装饰器的定义,基于函数闭包的形式来实现,即可以将某一个函数作为参数传递给另一个函数,在这另一个函数中去为函数添加功能。

下面是使用闭包实现装饰器:
import time# 定义一个装饰函数,函数的参数是一个函数
def deco(func):# 定义一个内部函数,实现具体的功能def wrapper():startTime = time.time()func()endTime = time.time()msecs = (endTime - startTime) * 1000print("原函数获得的拓展功能,原始函数func_a运行耗时:%d ms" % msecs)# 装饰函数的返回值是内部函数的执行结果return wrapperdef func_a():print("hello")time.sleep(1)print("world")if __name__ == '__main__':deco(func_a)()
下面是使用闭包实现装饰器(语法糖的写法):
import time# 定义一个装饰函数,函数的参数是一个函数
def deco(func):# 定义一个内部函数,实现具体的功能def wrapper():startTime = time.time()func()endTime = time.time()msecs = (endTime - startTime) * 1000print("原函数获得的拓展功能,原始函数func_a运行耗时:%d ms" % msecs)# 装饰函数的返回值是内部函数的执行结果return wrapper@deco
def func_a():print("hello")time.sleep(1)print("world")if __name__ == '__main__':func_a()
装饰器,传多个参数的写法:
import time# 定义一个装饰函数,函数的参数是一个函数
def deco(func):# 定义一个内部函数,实现具体的功能,# 原始函数带有不定参数,该处传入不定参数到该内部函数def wrapper(*args, **kwargs):startTime = time.time()func(*args, **kwargs)endTime = time.time()msecs = (endTime - startTime) * 1000print("原函数获得的拓展功能,原始函数func_a运行耗时:%d ms" % msecs)# 装饰函数的返回值是内部函数的执行结果return wrapper# 使用@符号拓展函数功能,func_a就具有了deco函数的功能
# 先传入2个参数
@deco
def func_a(a, b):print("带有不定参数2个的装饰器演示:")time.sleep(1)print("传入的不定参数求和:%d" % (a + b))# 传入3个参数
@deco
def func_b(a, b, c):print("带有不定参数3个的装饰器演示:")time.sleep(1)print("传入的不定参数求和:%d" % (a + b + c))if __name__ == '__main__':func_a(1, 2)func_b(1, 2, 3)

3、Python中的反射

class A(object):def __init__(self):self.name = "sath"def get(self):print("get")a = A()
# 给对象设置个age属性
setattr(a, "age", 37)
print(a.age)# 从对象中反射某个属性或方法, 反射不到的话使用默认值
ret = getattr(a, "name", "小明")
print(ret)#调用get方法
getattr(a, "get")()# 判断对象中是否有某个属性或方法
ret = hasattr(a, "name")
print(ret)# 删除对象的某个属性
print(dir(a))
delattr(a, "name")
print(dir(a))

更多推荐

1.4、Python基础

本文发布于:2023-11-16 09:34:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1616727.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!