python高级技能笔记

序列的创建与迭代

__iter__
iter()  	 空间复杂度 节省空间
next()
__getitem__  对复杂数据,查询效率高,有index索引

时间复杂度,空间复杂度

容器对象

__contains__() 
检查成员是否符合某种资格,返回bool


# ############### 定义 ###############
class Foo:
    def func(self):
        pass
 
    # 定义property属性
    @property
    def prop(self):
        pass
 
# ############### 调用 ###############
foo_obj = Foo()
foo_obj.func()  # 调用实例方法
foo_obj.prop  # 调用property属性
property属性的定义和调用要注意一下几点:

定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数
调用时,无需括号
什么是property属性
一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法

class 动态处理对象

	__call__  魔术方法
链式调用。 
class obj:
    def __init__(self,name,age) -> None:
        self.name = name
        self.age = age
    def __call__(self, weight) -> None:
        self.weight = weight

        print(self.name,self.age,self.weight)
        return self

person = obj('sunyang','1')
# print(person)

callable(person)

its_me = person(100)

lig = its_me(90)
print(lig.name,lig.age,lig.weight)

sunyang 1 100
sunyang 1 90
sunyang 1 90

class str 和 repr 魔术方法

__str__ 普通输出打印   __repr__  对机器可读

克隆python对象

复制可变 或 不可变对象
copy.copy()
copy.deepcopy()

提升Python技能 更多Pythonic类约定 自定义异常类

import string
MMIN_PASSWORD_LENGTH = 12

def less_length(password:str ,min_length) -> bool:
    return len(password) < min_length

# EMPTY_SET  是否有交集,没有 set() == 空集合  ruturn Ture : 抛出异常
def lack_of_lowercase(password:str ) -> bool:
    return set(password) & set(string.punctuation) == EMPTY_SET
    

def valiadata_panssword(
    password:str,
    min_length : int = MMIN_PASSWORD_LENGTH)-> None:

    if less_length(password,min_length) or\
        lack_of_lowercase(password):
        raise ValueError
    print('ok')
             
    pass
print(string.punctuation)

adc 模块 抽象基类

实现接口 ,给指定契约,设计蓝图

from ads import 
class Foo:
    def __getitem__(self, index):
        ...
    def __len__(self):
        ...
    def get_iterator(self):
        return iter(self)
 
class MyIterable(ABC):
 
    @abstractmethod
    def __iter__(self):
        while False:
            yield None
 	@abstractmethod
    def get_iterator(self):
        return self.__iter__()
 
    @classmethod
    def __subclasshook__(cls, C):
        if cls is MyIterable:
            if any("__iter__" in B.__dict__ for B in C.__mro__):
                return True

	

设计模式 工厂方法

from typing im

%%file player.py
from abc import abstractmethod, ABC
class Player (ABC) :
	def init_ (self, name, role):
		self.name = name
		self.role = role

	@abstractmethod
	def action(self):"球员的动作”"
	def str(self):
		return 'name={self.name}, role={self.role}



from player import Player
player_creation_functions:dict[str, Callable[..., Player]] = {}
def register (role: str, creation_function: Callable[..., Player]) -None:
    player_creation_functions[role] = creation_function
def unregister (role: str)-None:
    player_creation_functions.pop(role, None)
def create(args: dict[str,Any]) -› Player:
    the_args = args.copy()
    role = the_args['role']
    try:
        creation_function = player_creation_functions[role]
        return creation_function(**the args)
    except KeyError:
        raise ValueError(f'未知的角色 froel!r') from None

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值