Python 技能提升(二)

Python技能大赛样题二深度拆解:从命题逻辑到一个月备赛实战计划 Python程序设计竞赛的核心,不是比拼算法智商,而是考察选手在真实工程场景中的交付能力与代码规范性。理解这一点,是高效备赛的前提。在职业院校技能大赛中,从Python安装教程、开发环境配置到基础语法巩固,再到文件数据处理、tkinter界面开发与sqlite3数据库操作,每一环都直接影响赛场上的最终得分。本文以湖南省职业院校技能大赛Python程序开发赛项样题二为分析对象,系统拆解其命题逻辑、题型结构与分值布局,提供从需求拆解、高频题型破题路径到赛场时间分配的完整方法论。无论你是初次参赛还是冲刺提升,这套 阅读详情

理想的类结构

在这里插入图片描述

@Property装饰器

# 传统写法
class Square1:
    def __init__(self):
        self.__side = None

    def get_side(self):
        return self.__side

    def set_side(self, side):
        assert side >= 0, '边长不能为负数!'
        self.__side = side

    def del_side(self):
        # del self.__side
        self.__side = 0  # 这里并不打算真的去删除


# Pythonic写法
class Square2:
    def __init__(self):
        self.__side = None

    @property
    def side(self):
        return self.__side

    @side.setter
    def side(self, side):
        assert side >= 0, '边长不能为负数!'
        self.__side = side

    @side.deleter
    def side(self):
        # del self.__side
        self.__side = 0  # 这里并不打算真的去删除


s = Square2()
s.side = 10
print(s.side)  # 10
del s.side
print(s.side)  # 0

公有化与私有化

# 在Python类里面,"属性和方法"默认都是公有的(public)
class Person:
    def __init__(self, name: str, age: int):
        self._name = name  # _ 类似与 C++ 的 protected,特点:_name 可以在类内部使用,也可以被继承
        self.__age = age  # __ 类似与 C++ 的 private,特点:__age 可以在类内部使用,但不可以被继承

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, name):
        self.__age = name


class Teacher(Person):  # 继承Person类

    @property
    def info(self):
        return self._name, self.__age  # 报错,不存在 __age 属性


t = Teacher('Jack', 35)
print(t.info)

属性控制

# 属性控制,可用于拦截或日志
class Person:
    # 控制获取属性
    def __getattribute__(self, item):
        print(f'getting attribute [{item}]')
        return super().__getattribute__(item)  # 调用父级(object)的方法

    # 控制设置属性
    def __setattr__(self, key, value):
        print(f'setting attribute [{key}] to [{value}]')
        super().__setattr__(key, value)  # 调用父级(object)的方法


person = Person()
person.name = 'Jack'  # 触发"__setattr__"方法
print(person.name)  # 触发"__getattribute__"方法

"""
运行结果:

setting attribute [name] to [Jack]
getting attribute [name]
Jack

"""

MRO

在这里插入图片描述

"""
MRO: Method Resolution Order(方法解析顺序)
作用:用于类的继承树的方法搜索顺序

在单继承的情况下,我们可以很好的理解"类的继承树的方法顺序"
但是在多继承下,"类的继承树的方法顺序"就显得尤为复杂了(在 Python3 里面,使用了C3线性化的算法进行排序)
通常情况下,我们可以使用类的 mro() 方法来直接查看"类的继承树的方法顺序"
"""


class A(object):
    pass


class B(object):
    pass


class C(object):
    pass


class D(object):
    pass


class E(object):
    pass


class K1(C, A, B):
    pass


class K2(A, D):
    pass


class K3(B, D, E):
    pass


class Z(K1, K2, K3):
    pass


print(Z.mro())
# [
# <class '__main__.Z'>,
# <class '__main__.K1'>,
# <class '__main__.C'>,
# <class '__main__.K2'>,
# <class '__main__.A'>,
# <class '__main__.K3'>,
# <class '__main__.B'>,
# <class '__main__.D'>,
# <class '__main__.E'>,
# <class 'object'>
# ]

可迭代对象

# 利用迭代对象进行迭代,本质是用时间换取空间
# 在迭代进行的那一刻,数据才被产生或处理,从而大幅降低了内存空间的占用

print('\n-----------------------------')

# 可迭代对象的迭代
lst = [66, 77, 88]
for num in lst:
    print(num, end=' ')

print('\n-----------------------------')

# 上面 for 循环的迭代原理如下
iter_obj = lst.__iter__()
print(iter_obj.__next__(), end=' ')
print(iter_obj.__next__(), end=' ')
print(iter_obj.__next__(), end=' ')

print('\n-----------------------------')


# 自定义可迭代对象
class Fibonacci:  # 斐波那契数
    """
    F0 = 0
    F1 = 1
    Fn = Fn-1 + Fn-2 (n >= 2)
    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...
    """

    def __init__(self, n):
        self.__n = n
        self.__previous = 0
        self.__current = 1
        self.__count = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.__count >= self.__n:
            raise StopIteration

        self.__count += 1
        return_value = self.__previous
        self.__previous, self.__current = self.__current, self.__previous + self.__current
        return return_value


# 自定义可迭代对象的迭代
for num in Fibonacci(12):
    print(num, end=' ')

print('\n-----------------------------')

"""
运行结果:

-----------------------------
66 77 88 
-----------------------------
66 77 88 
-----------------------------
0 1 1 2 3 5 8 13 21 34 55 89 
-----------------------------

"""

__getitem__()方法

"""
在创建一个可迭代的对象序列时,可以用__iter__()和__next__()方法
如果没有这两个方法,我们还可以通过__getitem__()方法和__len__()方法进行创建序列
如果__getitem__()方法和__len__()方法也没有的话,解释器会抛出 TypeError 的错误!


而__getitem__()方法与上面的__iter__()方法正好相反
它是以空间换取时间:
    1.先占用内存,布置好数据
    2.随机查找的时间复杂度 O(1)
"""

from datetime import date, timedelta


class DateRange:
    def __init__(self, start_dt, end_dt):
        self.start_dt = start_dt
        self.end_dt = end_dt
        self._range_values = self._get_range_values()

    def _get_range_values(self):
        data = []

        current_dt = self.start_dt
        while current_dt <= self.end_dt:
            data.append(current_dt)
            current_dt += timedelta(days=1)
        return data

    def __len__(self):
        print("You are using the method of len().")
        return len(self._range_values)

    def __getitem__(self, index):
        print("You are using the symbol of [] to get item.")
        return self._range_values[index]


my_date_range = DateRange(date(2024, 6, 1), date(2024, 6, 3))
print(len(my_date_range))

for my_date in my_date_range:
    print(my_date)

"""
迭代原理:
在 DateRange 类中,尽管我们没有显式地定义__iter__(),但由于定义了__getitem__和__len__,因此你仍然可以在for循环中使用my_date_range对象。
Python 会自动为我们处理迭代过程,使用你定义的__getitem__来获取日期,直到索引超出由__len__指定的范围。
总结起来,for循环在 Python 中确实是通过迭代对象来工作的,但迭代对象不一定需要显式地定义__iter__()。
如果对象定义了__getitem__和__len__(并且表现出序列的特性),Python将为你提供一个隐式的迭代器,使得你可以在for循环中使用该对象。



运行结果:

You are using the method of len().
3
You are using the symbol of [] to get item.
2024-06-01
You are using the symbol of [] to get item.
2024-06-02
You are using the symbol of [] to get item.
2024-06-03
You are using the symbol of [] to get item.

"""

__contains__()方法

class Product:  # 产品
    def __init__(self, name: str, price: float, num: int) -> None:
        self.name = name
        self.price = price
        self.num = num


class Promotion:  # 促销方案
    def __init__(self, lower_num: int, upper_num: int, rate: float) -> None:
        self.__lower_num = lower_num
        self.__upper_num = upper_num
        self.__rate = rate

    @property
    def rate(self) -> float:
        return self.__rate

    def __contains__(self, product: Product) -> bool:
        return self.__lower_num <= product.num <= self.__upper_num


def get_total_price(products: [Product], promotions: [Promotion]) -> float:
    total_price = 0

    for product in products:
        promotion = [promotion for promotion in promotions if product in promotion][0]  # in 触发 __contains__()方法
        total_price += product.price * promotion.rate

    return total_price


if __name__ == '__main__':
    top_promotion = Promotion(100, 199, 0.5)  # 最好促销方案
    average_promotion = Promotion(50, 99, 0.8)  # 一般促销方案
    none_promotion = Promotion(0, 49, 1.0)  # 没有优惠的促销方案

    promotions = (top_promotion, average_promotion, none_promotion)

    products = (
        Product('cart', 89188.90, 188),
        Product('computer', 7999.99, 66),
        Product('toy', 13.60, 27),
    )

    total_price = round(get_total_price(products, promotions), 2)
    print(total_price)  # 51009.04

动态处理对象属性

class Person:
    def __init__(self, name: str) -> None:
        self.name = name

    def __getattribute__(self, attr):
        print("All operations that get attribute trigger this function to execute.")
        return super().__getattribute__(attr)

    def __getattr__(self, attr):
        print(f"You're trying to get attribute [{attr}], but the attribute is not defined.")
        return '空空如也'

    def __setattr__(self, key, value):
        print(f"You are setting the [{key}] attribute to [{value}].")
        super().__setattr__(key, value)


person = Person('Jack')
print(person.name)
# You are setting the [name] attribute to [Jack].
# All operations that get attribute trigger this function to execute.
# Jack

person.age = 33
print(person.age)
# You are setting the [age] attribute to [33].
# All operations that get attribute trigger this function to execute.
# 33


# 如果尝试获取没有定义过的属性,会触发  __getattr__() 方法
print(person.hobby)
# All operations that get attribute trigger this function to execute.
# You're trying to get attribute [hobby], but the attribute is not defined.
# 空空如也

__call__()方法

class MyPrint:

    def __call__(self, text: str, end=''):
        print(text, end=end)
        return self


my_print = MyPrint()
print(callable(my_print))  # True
my_print("你好呀")("我很好")("那就好")("都很好")  # 你好呀我很好那就好都很好

__str__()与__repr__()

class Person:
    def __init__(self, name: str, hobby: [str]) -> None:
        self.name = name
        self.hobby = hobby

    def __str__(self):
        return f"{self.name} like {','.join(self.hobby)}"

    def __repr__(self):
        return f"Person(name={self.name}, hobby={self.hobby}"


person = Person('Jack', ['football', 'basketball'])
print(person)  # 调用 __str__()方法
print(str(person))  # 调用 __str__()方法
print(repr(person))  # 调用 __repr__()方法

"""
__str__()方法是用于普通人群、客户看
__repr__()方法是用于机器、开发人员看

运行结果:

Jack like football,basketball
Jack like football,basketball
Person(name=Jack, hobby=['football', 'basketball']

"""

深拷贝

import copy

list1 = [1, 2, 3, [4, 5]]
list2 = copy.deepcopy(list1)

print(list1, id(list1))
print(list2, id(list2))

# [1, 2, 3, [4, 5]] 2016821662784
# [1, 2, 3, [4, 5]] 2016821293952

import copy


class A:
    def __repr__(self):
        return f"A: {id(self)}"


class B:
    def __init__(self, a: A) -> None:
        self.a = a
        self.b = self
        self.c = 1

    def __repr__(self):
        return f"B: {id(self.a)}, {id(self.b)}, {id(self.c)}"


a1 = A()
b1 = B(a1)

memo = {}
b2 = copy.deepcopy(b1, memo=memo)

print(a1)
print(b1)
print(b2)

b2.c = 3

print(a1)
print(b1)
print(b2)

"""
运行结果:(内存地址)

A: 2124853485392
B: 2124853485392, 2124853487120, 140716077503272
B: 2124853487056, 2124851868688, 140716077503272
A: 2124853485392
B: 2124853485392, 2124853487120, 140716077503272
B: 2124853487056, 2124851868688, 140716077503336

"""

抽象类与方法

from abc import abstractmethod, ABCMeta


# 抽象类
class Component(metaclass=ABCMeta):

    @abstractmethod
    def bind_data(self):  # 抽象方法
        pass

    @abstractmethod
    def render(self):  # 抽象方法
        pass


# 具体类
class ProductListComponent(Component):

    def bind_data(self):  # 具体实现
        return ['computer', 'life']

    def render(self):  # 具体实现
        for item in self.bind_data():
            print(f'--- {item.upper()} ---')


product_list_component = ProductListComponent()
product_list_component.render()

数据类

"""
我们知道,在C/C++/C#语言里面,都有结构体Struct,它作为数据的载体,我们使用它处理数据很方便
在python里面,同样提供了类似的东西,就是数据类————@dataclass
数据类,在Python3.7版本开始以标准库方式提供

为什么要用数据类呢?
因为使用普通的类进行数据的封装与处理,往往需要经过很多繁琐且无意义的工作,比如使用__init__()方法声明数据等等
而使用数据类,将能帮助我们减少这些繁琐的操作,将精力集中在处理数据本身上
"""


class Person:
    def __init__(self, name: str, age: int) -> None:
        self.name = name
        self.age = age

    def __repr__(self) -> str:
        return f"{self.name}({self.age})"


obj1 = Person("Jack", 28)
obj2 = Person("John", 35)
print(obj1)
print(obj2)
print(obj1 == obj2)
# Jack(28)
# John(35)
# False

from dataclasses import dataclass


@dataclass
class People:
    name: str
    age: int


obj1 = People("Jack", 28)
obj2 = People("John", 35)
print(obj1)
print(obj2)
print(obj1 == obj2)
# People(name='Jack', age=28)
# People(name='John', age=35)
# False

官方文档:https://docs.python.org/zh-cn/3/library/dataclasses.html

元类

# 所有类的祖宗————type

# int类
num = 3
print(type(num))
print(type(type(num)))
print(type(type(type(num))))
# <class 'int'>
# <class 'type'>
# <class 'type'>


# str类
name = "Jack"
print(type(name))
print(type(type(name)))
print(type(type(type(name))))
# <class 'str'>
# <class 'type'>
# <class 'type'>


# bool类
flag = True
print(type(flag))
print(type(type(flag)))
print(type(type(type(flag))))
# <class 'bool'>
# <class 'type'>
# <class 'type'>


# Object类
print(type(object))
print(type(type(object)))


# <class 'type'>
# <class 'type'>


# 自定义类
class MyClass:
    pass


obj = MyClass()

print(type(obj))
print(type(type(obj)))
print(type(type(type(obj))))
print('=' * 16)
# <class '__main__.MyClass'>
# <class 'type'>
# <class 'type'>

# 通过类的祖宗type创建一个类(类对象)
# 1. 定义类里面要实现的方法
def __repr__(self):
    return f"{self.__class__.__name__}(wheel={self.wheel}, type={self.size})"


# 2. 通过type()创建类对象
# --- 参数: ( 类的名称、(要继承的父类...)、{ 要定义的属性: ... } )
Vehicle = type('Vehicle', (), {'wheel': 4, '__repr__': __repr__, })
Bus = type('Bus', (Vehicle,), {'size': 'big', })
Truck = type('Truck', (Vehicle,), {'size': 'extremely big', })

# 类的实例
bus = Bus()
truck = Truck()
print(bus)
print(truck)
# Bus(wheel=4, type=big)
# Truck(wheel=4, type=extremely big)

class MetaAutoAttributes(type):
    def __new__(cls, name, bases, attrs):
        # 在这里我们可以修改或添加attrs中的属性
        attrs['auto_attribute'] = 'This is an automatically added attribute'
        # 调用父类的__new__方法来创建类
        return super().__new__(cls, name, bases, attrs)

    # 使用自定义元类


class MyClass(metaclass=MetaAutoAttributes):
    pass


# 创建MyClass的实例
obj = MyClass()

# 访问自动添加的属性
print(obj.auto_attribute)  # 输出: This is an automatically added attribute

推荐阅读:https://www.cnblogs.com/JetpropelledSnake/p/9094103.html

函数装饰器

import time


def timer(func):
    start = time.perf_counter()  # 统计时间
    func()
    end = time.perf_counter()
    print(f"耗时:{end - start}")


def show():
    print('showing...')
    time.sleep(0.5)


timer(show)

# showing...
# 耗时:0.5006642000516877

import time


def timer(func):
    start = time.perf_counter()  # 统计时间
    res = func()
    end = time.perf_counter()
    print(f"耗时:{end - start}")
    return res


def show():
    print('showing...')
    time.sleep(0.5)
    return "OK"


result = timer(show)
print(result)

# showing...
# 耗时:0.5005822000093758
# OK

import time


def timer(func):
    def inner(*args, **kwargs):
        start = time.perf_counter()  # 统计时间
        res = func(*args, **kwargs)
        end = time.perf_counter()
        print(f"耗时:{end - start}")
        return res

    return inner


def show(name: str) -> str:
    print(f'{name} is showing...')
    time.sleep(0.5)
    return "OK"


show = timer(show)
result = show('Jack')
print(result)
print(show.__name__)  # 不完美的伪装

# Jack is showing...
# 耗时:0.5001411000266671
# OK
# inner

import time
import functools


def timer(func):
    @functools.wraps(func)  # 完美伪装
    def inner(*args, **kwargs):
        start = time.perf_counter()  # 统计时间
        res = func(*args, **kwargs)
        end = time.perf_counter()
        print(f"耗时:{end - start}")
        return res

    return inner


def show(name: str) -> str:
    print(f'{name} is showing...')
    time.sleep(0.5)
    return "OK"


show = timer(show)
result = show('Jack')
print(result)
print(show.__name__)  # 完美伪装

# Jack is showing...
# 耗时:0.5001411000266671
# OK
# show

import time
import functools


def timer(func):
    @functools.wraps(func)
    def inner(*args, **kwargs):
        start = time.perf_counter()  # 统计时间
        res = func(*args, **kwargs)
        end = time.perf_counter()
        print(f"耗时:{end - start}")
        return res

    return inner


@timer  # 使用语法糖
def show(name: str) -> str:
    print(f'{name} is showing...')
    time.sleep(0.5)
    return "OK"


# 不再使用原生的 show = timer(show) ,而是使用语法糖
result = show('Jack')
print(result)
print(show.__name__)

# Jack is showing...
# 耗时:0.5002126999897882
# OK
# show

含参装饰器

import time
import functools


def timer(appearance=False):  # 是否开启外观模式,默认不开启
    def outer(func):
        @functools.wraps(func)
        def inner(*args, **kwargs):
            if appearance:
                print("=" * 16)

            start = time.perf_counter()  # 统计时间
            res = func(*args, **kwargs)
            end = time.perf_counter()
            print(f"耗时:{end - start}")

            if appearance:
                print("=" * 16)

            return res

        return inner

    return outer


@timer(appearance=True)
def show(name: str) -> str:
    print(f'{name} is showing...')
    time.sleep(0.5)
    return "OK"


result = show('Jack')
print(result)

# ================
# Jack is showing...
# 耗时:0.5003457000711933
# ================
# OK

类装饰器

# 装饰功能:给被装饰的类,添加两个方法
class Entity:
    def __call__(self, cls):
        # 声明第一个方法
        def __repr__(self) -> str:
            return f'{cls.__qualname__}'  # __qualname__ 用于获取类或函数的完全限定名称,即包括模块名称和嵌套结构

        # 声明第二个方法
        def is_adult(self) -> bool:
            return self.age > 18

        # 给被装饰的类,添加上面两个方法
        cls.__repr__ = __repr__
        cls.is_adult = is_adult

        return cls


@Entity()  # Entity() 实例化一个对象.  对象 + __call__() 方法 == 函数()
class User:

    def __init__(self, name, age):
        self.name = age
        self.age = age


# 本质:User = obj(User)
# 本质:User = cls

user = User('Jack', 35)
print(user)
print(user.is_adult())
# User
# True

上下文管理器

# 传统操作
file = open('test.txt', 'w')
try:
    file.write('This is a test file.')
except Exception as e:
    print(e)
finally:
    file.close()
    
# 利用上下文管理器with操作
with open('test.txt', 'w') as file:
    file.write('This is a test file.')

# 查看是否已经关闭文件(资源)
print(file.closed)  # True

# 自定义上下文管理器
class FileManager:
    def __init__(self, filename: str, mode: str) -> None:
        self.filename = filename
        self.mode = mode
        self.file = None  # 初始化文件对象

    def __enter__(self):
        print('>>> Open', self.filename)
        self.file = open(self.filename, self.mode)
        print(">>> file object:", self.file)  # 测试
        return self.file

    def __exit__(self, error_type, error_value, traceback):
        if self.file:
            print('>>> Close', self.filename)
            self.file.close()


with FileManager('test.txt', 'r') as file:
    print(">>> file object:", file)  # 测试
    print("==========<File Content>==========")
    print(file.read())
    print("==========<File Content>==========")


# >>> Open test.txt
# >>> file object: <_io.TextIOWrapper name='test.txt' mode='r' encoding='cp936'>
# >>> file object: <_io.TextIOWrapper name='test.txt' mode='r' encoding='cp936'>
# ==========<File Content>==========
# This is a test file.
# ==========<File Content>==========
# >>> Close test.txt

class Sequence:  # 顺序-sequence
    def __init__(self, start: int, end: int) -> None:
        self.start = start
        self.end = end

    def __enter__(self):
        self.data = list(range(self.start, self.end))
        return self.data

    # 参数:异常类型,异常值,异常回溯。 返回值:True(停止异常继续往外抛出)
    def __exit__(self, exc_type, exc_val, exc_tb):
        # 判断是否为索引越界的错误类型
        if isinstance(exc_val, IndexError):  # isinstance(66, int) ==> 66 是不是 int 类的实例(对象),如果是,返回值True,如果不是,返回值False
            print(f'索引超出范围:[{self.start}, {self.end})')
            return True


with Sequence(1, 10) as seq:
    print(seq[5])  # 6
    print(seq[15])  # 索引超出范围:[1, 10)

import time


class Timer:
    def __enter__(self):
        self.start = time.perf_counter()
        self.end = 0

        def elapsed():
            return self.end - self.start

        return elapsed

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.end = time.perf_counter()


with Timer() as timer:
    print('Start to do sth.')
    time.sleep(1)
    print('Stop to do sth.')

print("运行时间:", timer())

# Start to do sth.
# Stop to do sth.
# 运行时间: 1.0006713000002492

《Python 练习一百题:提升编程技能的宝藏》 Python 练习一百题的资源来源十分广泛。在 优快云 博客上,众多博主分享了不同版本的 Python 一百题,涵盖了从基础语法到高级算法的各个方面。例如,有的博主将题目分为不同难度等级,方便学习者逐步提升;还有的博主详细分析了每道题目的解题思路和代码实现,为学习者提供了很好的参考。51CTO 博客也提供了丰富的 Python 一百题资源,不仅有题目和答案,还对一些关键知识点进行了深入讲解。此外,像哔哩哔哩、腾讯云等平台也有关于 Python 一百题的分享,包括部分题目的截图和解题思路介绍。 阅读详情

相关推荐

Python爬虫技能提升课程

Python是一种广泛使用的高级编程语言,以其清晰的语法和代码的可读性而闻名。在深入探讨如何使用Python编写爬虫之前,我们先来回顾一下Python的基础语法。Scrapy是一个用于爬取网站数据、提取结构性数据的应用框架,其采用了Twisted异步网络框架来处理网络通信,极大地提高了网络请求的效率。

weixin_35756624的博客 3124

计划扎实提升测试技能的朋友--》这篇帖子不可不看!

前言 软件测试行业作为IT行业的一个重头戏,行业一直再进行快速发展,国内由以前的对软件测试不重视,到目前高薪诚聘测试开发工程师仍缺口巨大就可以看出来行业的趋势,在国内目前的趋势和环境下,作为测试工程师最应该的就是提升自己的能力,有能力就有前途(钱途)! 但是作为测试从业工作者本身来讲,我们国内目前还是主流的业务测试工程师居多,笔者有幸给一些大厂的测试工程师做过内训,发现有不少的测试工程师对于我...

挨踢~小先生 86

每日Python编程挑战:提升编码技能

简介:“Daily-Coding-Problems”活动鼓励通过每日解决编程问题来提高编程技能。受艺术家Beeple每日创作的启发,参与者将接受来自《每日编码问题》和Cs Dojo新闻通讯的编程题目挑战。这些编码问题覆盖多种难度,涉及Python等编程语言,并注重持续性学习和实践,帮助程序员提升编程思维和问题解决能力。Python以其简洁的语法和广泛的应用,成为适合初学者快速学习和开发原型的语言。通过解决编码问题,不仅可以提高Python编程能力,还可以加强对算法、数据结构和软件设计原则的理解。

weixin_33193177的博客 1081

社招面试的问题,利用Python突破验证码限制,2024最新Python算法相关面试大全

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。最近我才对这些路线做了一下新的更新,知识体系更全面了。

m0_55030688的博客 797

SPSS_Process—简单&平行&链式中介模型

本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。

m0_54401011的博客 4万+

研发工作量科学量化评估模型:从多维系数到等级落地指南

摘要:本文提出了一套基于多维系数的科学量化评估模型,用于精准评估软件开发工作量。该模型从需求复杂度、技术难度、质量要求和依赖风险四个核心维度进行量化评估,通过系数乘积计算综合工作量。文章详细说明了各维度的系数区间划分标准,并演示了从基础工作量估算到综合系数计算的具体步骤。该模型通过结构化评估过程,将主观经验转化为客观量化指标,帮助团队提高工作量评估的准确性,增强项目交付的可预测性。其价值在于使评估过程透明化、结构化和可追溯,从而减少项目延期风险,优化资源规划。

友莘居士的博客 1681

面试高分视频,教你一招利用Python快速去除图片水印,Python入门视频教程

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。PIL也是一个Python 图像处理库,其中Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内。

m0_62261166的博客 711

2022-2028年中国美容仪行业发展战略规划及投资机会预测报告

报告类型:产业研究 报告格式:电子版、纸介版 出品单位:智研咨询-产业信息网 美容仪是一种根据人体生理机能进行调节改善身体和面部的机器,它按照功能来说有美白、嫩肤、祛斑、祛皱、脱毛、减肥等多种,按照名称来说有超声波导入、光子嫩肤、高周波电疗、RF 电波拉皮、电子祛斑点痣、E 光永久脱毛嫩肤、贾法尼营养导入导出等。 智研咨询发布的《2022-2028年中国美容仪行业发展战略规划及投资机会预测报告》共十七章。首先介绍了中国美容仪行业市场发展环境、美容仪整体运行态势等,接着分析了中...

kt346的博客 468

python实验二报告_20172304 2019-2020-2 《Python程序设计》实验二报告

20172304 2019-2020-2 《Python程序设计》实验二报告课程:《Python程序设计》班级: 1723姓名: 段志轩学号:20172304实验教师:王志强实验日期:2020年4月15日必修/选修: 公选课1.实验内容设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。考核基本语法、判定语句、循环语句、逻辑运算等知识点2. 实验过程及结果首先这个程序是为了实现计算器...

weixin_42500130的博客 459

从零构建:如何用MATLAB和SDR硬件搭建你的第一个OFDM卫星通信原型系统

本文详细介绍了如何利用MATLAB和SDR硬件从零构建OFDM卫星通信原型系统。通过核心组件选型、开发环境配置、OFDM算法实现到系统集成与优化的完整流程,帮助通信工程学生和DIY爱好者快速掌握软件无线电技术在卫星通信中的应用。特别推荐使用HackRF One和MATLAB工具箱实现高性价比的OFDM系统验证。

pz890123456的博客 378

RI-CLPM vs CLPM:什么时候该用随机截距交叉滞后模型?

本文深入对比了交叉滞后模型(CLPM)与随机截距交叉滞后模型(RI-CLPM)的核心差异与应用场景。RI-CLPM通过分离个体间稳定特质与个体内动态波动,能更纯净地估计变量间的动态因果关系,避免CLPM可能存在的混淆。文章提供了清晰的模型选择决策框架,并辅以Mplus语法示例,帮助研究者根据变量特质稳定性与研究问题,正确选用模型以确保结论的严谨性。

weixin_29276847的博客 302

开启Python之旅:计算机等级考试二级真题与Python123题库精髓

开启Python之旅:计算机等级考试二级真题与Python123题库精髓 去发现同类优质开源项目:https://gitcode.com/ 随着Python语言的日益普及,无论是对于在校学生还是编程爱好者,掌握这门简洁高效的编程语言已成为必修课。今天,我们要隆重推荐一个专为Python学习者打造的宝贵资源——《计算机等级考试二级(Python)真题与Python123题库源代码(二)》。 项目介绍...

gitblog_06644的博客 438

Java开源海外跨境电商购物商城源码,TikToK商城系统源码,外贸商城在线交易

最近很火的一款商城源码,朋友分享给我的,完整版,java开源代码,带有非常详细的搭建教程,文件都一个多G,喜欢的可以下载来研究研究!3、创建mall 数据库并导入数据,数据库名用户名为:mall 数据库密码保持为:XXKytcACPX3GbdsH。8、进入cd /data/deploy/mall-tool/目录执行./build.sh脚本。7、宝塔ssh进入cd /data/deploy/mall/ 执行./build.sh脚本。2、安装宝塔环境:安装 Redis、MySQL5.7、Ngin1.2。

百创科技 2821

学Python不知从何下手?Python技能树助力一臂之力|Python技能树测评

一、前言 无论上是初学Python的小伙伴,还是学过一段时间有一定经验的小伙伴或多或少都会有迷茫和疑惑: 看着大家都说Python好学,好就业,可到底该怎么学,学到什么程度才能去找工作呢? 我想学Python相关领域的知识点,但网上的教程太杂太乱,看了半天还是不知从而下手,哪里有清晰的学习路线、知识点分类呢? 这也是很多粉丝常问我的问题,由此可见有一个明确的路线,和清晰的技术栈结构,是非常重要的! 二、解决方案 这里推荐一下优快云的【Python技能树】 【Python技能树】的左侧,通过树的形式详细详

曲鸟 1万+

在 SAP BTP 中玩转工厂日历 Maintain Factory Calendars 实战指南

工厂日历是企业关键的时间主数据,基于国家假日历定义工作日与非工作日,广泛应用于生产计划、采购交期、财务结账等业务场景。SAP系统通过三类应用(维护节假日、假日历和工厂日历)实现分层配置。工厂日历作为顶层配置,支持工作日模式设定和例外规则添加。在多系统架构中,工厂日历可通过集成场景同步,确保数据一致性。应用支持创建、编辑和查看功能,包含有效期设置、例外规则管理和多语言文本维护。合理设置工厂日历对业务运营至关重要,需注意命名规范和有效期选择,避免历史数据问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 222

YOLO26改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制

本文记录的是利用模块优化的目标检测网络模型。模块具有独特优势。它不同于传统模块,能同时兼顾局部特征高效建模与长距离交互学习。常见模块要么在局部特征处理上有优势但长距离交互能力弱,要么反之,而模块克服了此问题。它融合了Mamba模型和线性注意力机制的优势,通过独特的结构设计,能够在保持计算效率的同时,精准地建模局部特征并学习长距离交互信息。本文将其用于的模型改进和二次创新,能够更加关注图像中的重要特征区域,抑制背景等无关信息的干扰,从而突出目标物体的关键特征。Demystify Mamba in Vision

Limiiiing的博客 213

Python技能树丨Python简介

计算机的世界是二进制的,它只能读懂 0 和 1,人类要学习计算机的语言几乎是不可能的。 反过来,让计算机理解人类的语言也太困难。自然语言太过随性,一个意思有多种表达,还有很多语气和双关语(比如女朋友:我没生气)。 如何跨过这样的鸿沟呢,可行的方法是设计一套「高级语言」,让人类和计算机都能看懂。 我们现在学习的编程语言,就是这样的高级语言,它有两个特点: 简单,人类学习一段时间就能使用。 精准,可以自动编译成机器语言来执行。

独木不成林,单弦不成音。 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

学Python,站在这棵树上就对了 | Python技能树测评

学习计算机技术,并不是比谁更卖力,关键是在于在最短的时间内用最少的资源产生最大的收益,这是由于技术的更迭速度太快了,只有快速掌握最新技术,才能在领域内有立足之地。优快云 Python 技能树就是我们学习 Python 的巨人的肩膀,它包含了完善的知识体系、相匹配的练习题、活跃的交流学习等等,学Python,站在这棵树上就对了!

盼小辉丶的博客 2999

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

掌握这些Python技能,向大厂迈进一步!

Python由于具有简单易懂、可移植性、无需编译、开源等特点,成为大多数“互联网人”学习的对象。 它广泛地被应用于互联网数据分析、后端开发、互联网运维、数据爬虫等相关领域,并得到多数企业的喜爱与青睐。想要进入大厂的同学们,掌握一些Python的基础技能,又可以向大厂迈进一步啦~ 因此,今天给大家分享80篇【Python技能】精选学习资料,其中不仅详细讲解了语法基础、字符串、集合类型、异常处理、类与对象等知识点,也同样包含了大量各大厂的面试原题。同时还有6本Python技能必读好书,扫码即可获取,..

优快云能力认证官方博客 8578

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python, Java 开发打工人技能提升1000

**Python**:适合快速开发桌面端或Web端应用,使用`Flask`或`Django`构建后端,`Tkinter`或`PyQt`构建UI。- 使用`Tkinter`或`PyQt`构建UI,`Flask`或`Django`构建后端,`SQLite`存储数据。// 如 video, article, audio。- **Java**:适合开发Android移动端应用,使用`Android Studio`和`Room`数据库。categories = ["编程", "设计", "营销", "沟通"]

2501_90802096的博客 914

学习python就用python技能树|Python技能树测评

python 是一种很流行的高级动态语言。编程语言的的排行可以参考TIOBE。当然如果从排行榜上看,C、C++,Java 等语言长期占据前三。然而需要明确的是,术业有专攻,不同领域的人对语言有不同的偏好或者说需要。对于那些数据科学家、计量经济学家或者我们量化工作者而言,python 就是很好的工具。 你想学习python吗?你知道Python技能树吗? python技能树是优快云提供的系统化,面向实战的学习环境。 它能帮助用户从初学者成长为合格的Python 工程师。 它系统地整理了关于Python领

zhulin1028的博客 3405

学Python,站在这棵树上就对了 Python技能树测评_python入门技能树

很多时候,学习知识我们并不需要一切都从零开始,才能显示自己的实力,这样反而自己浪费大量时间才构建出模糊知识框架的行为是不可取的;相反懂得站在巨人的肩膀上,懂得借助总结好的知识体系来学习才能用更短的时间对知识体系有一个清晰立体的认识、根据需要钻研更具体的专业技能。学习计算机技术,并不是比谁更卖力,关键是在于在最短的时间内用最少的资源产生最大的收益,这是由于技术的更迭速度太快了,只有快速掌握最新技术,才能在领域内有立足之地。优快云 Python 技能树就是我们学习Python。

m0_60607245的博客 828

提升Python技能的实践方法和应用建议

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

m0_58477260的博客 397

Python-Type-Challenges:提升Python类型提示技能的交互式在线练习

在当今的编程实践中,类型提示(type hints)已经成为提高代码可读性和减少错误的重要工具。Python-Type-Challenges 正是为了帮助开发者掌握这一技能而设计的互动在线练习平台。 ## 项目介绍 Python-Type-Challenges 是一个在线的Python类型提示练习平台,用户可以通过解决一系列的编程挑战来提升自己的类型提示使用技巧。该项目以互动性强、易于使用为特

gitblog_00767的博客 1086

初学者的Python编程之旅:精选项目助你快速提升技能

通过上述项目的学习和实践,你将逐步提升你的Python编程技能。记住,编程是一个不断学习和实践的过程。不要害怕犯错,每个错误都是学习的机会。随着你技能的提升,你可以尝试更复杂的项目,甚至可以开始自己的编程项目。最重要的是,保持好奇心和学习的热情,享受编程带来的乐趣和成就感。

weixin_47640583的博客 800

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 396
上一篇: Python 技能提升(一)
下一篇: Python 技能提升(三)
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值