Python基础5

类的补充

super 关键字:超级

在这里插入图片描述

class Animals(object):
    def __init__(self,name):
        self.name = name
        print("parent")

    def run(self):
        print(f"{self.name} is running")

class Lion(Animals):
    def __init__(self,name):
        super().__init__(name)
        print("Super")

lion = Lion("Lion")
print(lion.name)
lion.run()

parent
Super
Lion
Lion is running
class A:
    def say(self):
        print("A is saying ")
class B:
    def say(self):
        print("B is saying")
class C:
    def say(self):
        print("C is saying")
        pass
class D(A,B,C):
    def say(self):
        super(B,D).say(self) #传递的是一个类
        #super(B,D()).say()  #传递的是一个对象,第二个参数
        #super().say()  #不传  super(D,D()).say
    pass

d = D()
d.say()
print(D.__mro__)


C is saying
(<class '__main__.D'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class 'object'>)


闭包:

闭包又叫词法闭包或函数闭包。

简单说就是函数的嵌套–函数里面嵌套另一个函数。

目的:

为了利用以前写好的函数,给它穿一个马甲,瓤没变,加个壳子包装一下

闭包一定是嵌套函数,内层函数可以引用外层函数的变量(自由变量)

def outer():
    data = "data"
    def inner():
        print(data)
    return inner

test = outer()
test()

data

globals :全局变量

locals : 局部变量

a = 3
print(globals())
def test(b):
    # a = 3
    print(locals())
    print(a)
    print(globals())
    print(b)

test(2)



{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000023AD6BA2FD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:\\python3.9\\mypython\\myproject\\20210405.py', '__cached__': None, 'a': 3}
{'b': 2}
3
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000023AD6BA2FD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:\\python3.9\\mypython\\myproject\\20210405.py', '__cached__': None, 'a': 3, 'test': <function test at 0x0000023AD6B7F0D0>}
2

绑定的操作:

函数的定义,变量的定义,函数的形参,类的定义,import

自由变量:

def outer():
    data = "data"
    def inner():
        print(data)
    return inner

data 就是自由变量

装饰器:

在不改变原代码的情况下对代码进行扩展,实现新的功能。

def test_plus(func):
    def test_wrap():
        func()
        print(2)
        print(3)
    return test_wrap

@test_plus   #运用@链接补充的函数
def test():
    print(1)

test()

1
2
3

打印调用函数前,后的时间

import time

def func_test(var):
    def func_testA():
        print(time.ctime())
        var()
        print(time.ctime())
    return func_testA

@func_test
def test():
    time.sleep(3)
    print("123")

test()

Mon Apr  5 13:55:32 2021
123
Mon Apr  5 13:55:35 2021

avgerage 闭包操作

def average():
    data = []
    def avg(arg):
        data.append(arg)
        result = sum(data)/len(data)
        print(result)
        return result
    return avg
avg = average()
avg(10)
avg(12)
avg(11)

10.0
11.0
11.0

给原函数传两个参数

import time

def log_time(func):
    def log_wrapper(arg1,arg2):
        print(time.ctime())
        func(arg1,arg2)
        print(time.ctime())
    return log_wrapper

@log_time
def func_test(arg1,arg2):
    print("123")
    print(arg1,arg2)

# func_test(1,2)
log_wrapper = log_time(func_test)
log_wrapper(1,2)

Mon Apr  5 14:22:24 2021
Mon Apr  5 14:22:24 2021
123
1 2
Mon Apr  5 14:22:24 2021
Mon Apr  5 14:22:24 2021

想要通用性比较强

def log_time(func):
    def log_wrapper(*args,**kwargs):
        print(time.ctime())
        func(*args,**kwargs)
        print(time.ctime())
    return log_wrapper

给装饰器传参数

import time

def log_level(level="INFO"):
    def log_time(func):
        def log_wrapper(*args,**kwargs):
            print(f"{level}:",time.ctime())
            func(*args,**kwargs)
            print(f"{level}:",time.ctime())
        return log_wrapper
    return log_time

@log_level(level="Error")
def func_test(arg1):
    print(arg1,":","123")

# log_time = log_level("Error")
# log_wrapper = log_time(func_test)
# log_wrapper("Test")
func_test("Test")

Error: Mon Apr  5 14:44:06 2021
Test : 123
Error: Mon Apr  5 14:44:06 2021

pythong 中内置的装饰器:

@staticmethod

@classmethod

@property

列表推导式:

list_data_3 = [i for i in range(10)]
print(list_data_3,type(list_data_3))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>

列表推导式中:for , if 都只是一个表达式,没有冒号

list_data_3 = [i for i in range(10) if i % 2 != 0]
print(list_data_3)

[1, 3, 5, 7, 9]

写在for循环后的if操作不能改变结果,只能过滤;写在for循环前才能改变结果

(for 循环后跟过滤的表达式,for 循环之前跟的是对结果进行运算的表达式)

if else 表达式:value1 if condition else value2

bool_list = [True,False,False,True,False,True,True,False]
result_list = [1 if j else 0 for j in bool_list]
print(result_list)

[1, 0, 0, 1, 0, 1, 1, 0]
color_list = ["RED","BLACK","BLUE"]
size_list = ["S","M","L"]
result_list = [(i,j) for i in color_list for j in size_list]
print(result_list)

[('RED', 'S'), ('RED', 'M'), ('RED', 'L'), ('BLACK', 'S'), ('BLACK', 'M'), ('BLACK', 'L'), ('BLUE', 'S'), ('BLUE', 'M'), ('BLUE', 'L')]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值