advPython-1

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

创建进程

"""
创建进程(最快创建进程的方式是双击应用程序)
"""

"""
基础知识:
1.进程具有三种基本状态(就绪,执行,阻塞)
    
创建--(提交)--就绪--(进程调度)--运行--(释放)--终止
                 |<——   阻塞    <——|
                 
2.
同步和异步(程序里面)
阻塞和非阻塞(进程调度问题)

3.查看进程号(pid号)
---A.通过 os模块:os.getpid()
---A.通过 multiprocessing模块中的 current_process:current_process().pid


"""

from multiprocessing import Process, current_process
import time
import os


def task(name):
    print(name, "正在进行中...")
    print(name, "的进程号为--->", os.getpid())
    print(f"进程号>>>{current_process().pid}\n")
    time.sleep(3)
    print(name, "已结束任务")


if __name__ == '__main__':
    # 创建两个进程对象
    p1 = Process(target=task, args=("子进程--p1",))
    p2 = Process(target=task, args=("子进程--p2",))

    # 开始进程
    p1.start()
    p2.start()

    # 向操作系统发起请求:杀死p1进程(win:taskkill pid)
    p1.terminate()
    time.sleep(0.01)

    # 判断p1进程是否存在
    print(p1.is_alive())

    # 等待p2进程结束
    p2.join()  # join方法:让主进程等待子进程运行结束之后再继续执行

    # 展示主进程
    print("\n我是主进程")
    print('"主进程"的进程号为>>>', os.getpid())

守护进程

"""
守护进程
"""
from multiprocessing import Process
import time


def task(name):
    print(f"{name},还活着")
    time.sleep(3)
    print(f"{name}正常死亡")


if __name__ == '__main__':
    # 创建进程
    p = Process(target=task, kwargs={"name": "苏妲己"})

    # 设置进程的"守护进程"功能,将其设置为开启状态
    p.daemon = True  # 我活你活,我死你死(守护进程)

    # 开始进程
    p.start()

    # 主进程
    time.sleep(1)
    print("纣王驾崩了")

进程互斥锁

"""
互斥锁(购票案例)
"""
from multiprocessing import Process, Lock
import time
import json
import random

"""
关于本文使用json模块的知识补充:
是的,json.dump() 和 json.load() 是互补的。
json.dump() 用于将 Python 对象转换为 JSON 格式并写入文件或类文件对象,
而 json.load() 用于将文件或类文件对象中的 JSON 格式数据读入并转换为 Python 对象。
这两个函数一起可以实现将 Python 对象序列化为 JSON 格式,再将其反序列化为 Python 对象
"""


# 查票功能
def search_ticket(name):
    # 读取文件,查看当前车票数量
    with open("date/mutex_date", "rt", encoding="utf-8") as f:
        dic = json.load(f)
        print(f"用户{name}查询车票:{dic.get('ticket_num')}张")


# 购票功能
def buy_ticket(name):
    # 查看当前票数
    with open("date/mutex_date", "rt", encoding="utf-8") as f:
        dic = json.load(f)

    # 模拟网络延迟
    time.sleep(random.randint(1, 5))

    # 进行购票
    if dic["ticket_num"] > 0:
        dic["ticket_num"] -= 1
        with open("date/mutex_date", "wt", encoding="utf-8") as f:
            json.dump(dic, f)
        print(f"用户{name}购票成功")
    else:
        print(f"余票不足,用户{name}买票失败")


# 查票或购票入口
def task(name, mutex):
    # 进行查票
    search_ticket(name)
    # 进行购票
    mutex.acquire()  # 加锁(抢锁)
    buy_ticket(name)
    mutex.release()  # 解锁(释放锁)


if __name__ == '__main__':
    # 创造一把锁
    mutex = Lock()

    # 创建六个进程
    for i in range(1, 7):
        p = Process(target=task, args=(f"{i}号人员", mutex))
        p.start()  # 开始进程

消息队列

Queue 基本知识

"""
消息队列:Queue[用于 进程(线程) 之间的信息传递]
"""
from multiprocessing import Queue

# 创建队列对象,并定义其容量
q = Queue(3)

# 向队列对象里面放数据
q.put("a")
q.put("b")
q.put("c")

# 判断队列是否为"满"
print("队列是否满了?", q.full())

# 从队列里面取数据
v1 = q.get()
v2 = q.get()
v3 = q.get()

# 判断队列是否为"空"
print("队列是否空了?", q.empty())

# 展示取出的结果
print("队列结果[先进先出]>>>", v1, v2, v3)

"""
总结:
q.put("a")
q.get()

# 下面的东西,在多进程的条件下不够准确:
q.put_nowait("a")
q.put("a", timeout=3) # 超时的单位为"秒"
q.get_nowait()
q.get(timeout=3)
q.full()
q.empty()
"""

# 对Queue的补充

# import queue
# from multiprocessing import Queue

# # 先进先出Queue
# q = queue.Queue()
# q.put()
# q.get()
# q.get(timeout=3)
# q.get_nowait()
# q.put_nowait()
# q.full()
# q.empty()

# # 后进先出Queue
# q = queue.LifoQueue()  # last in first out
# q.put("a")
# q.put("b")
# q.put("c")
# print(q.get())

# # 优先级Queue,(优先等级数字,数据)=>(1,date)优先级大于(2,date)
# q = queue.PriorityQueue()
# q.put((1, "a"))
# q.put((25, "b"))
# q.put((-1, "c"))
# print(q.get())
# print(q.get())

Queue 的实例一

"""
队列 Queue的实例一 --- 基础使用
"""
from multiprocessing import Process, Queue


def task1(q):
    # 向队列对象q中传入数据
    q.put("我是来自task1的王牌")


def task2(q):
    print("task2开始任务")

    # 从队列对象中拿出数据
    print("消息>>>", q.get())

    print("task2开始任务")


if __name__ == '__main__':
    # 创建队列对象q
    q = Queue()

    # 创建两个进程p1和p2
    p1 = Process(target=task1, args=(q,))
    p2 = Process(target=task2, args=(q,))

    # 开始进程
    p1.start()
    p2.start()

Queue 的实例二

"""
队列 Queue的实例二 --- 生产者和消费者模型
"""

from multiprocessing import Process, Queue, JoinableQueue
import time
import random

"""
JoinableQueue
在Queue的基础上多了一个计数器机制,每put一个数据,计数器就加一
每调用一次task_done,计数器就减一
当计数器为0的时候,就可以走q.join后面的代码
"""


# 生产者
def producer(name, food, q):
    for i in range(8):
        time.sleep(random.randint(1, 4))
        print(f"{name}生产了{food}{i}")
        q.put(f"{food}{i}")


# 消费者
def consumer(name, q):
    while True:
        food = q.get()  # 队列没有数值了,就阻塞在这
        time.sleep(random.randint(1, 4))
        print(f"{name}吃了{food}")
        q.task_done()  # 告诉队列,已经拿走了一个数据,并且已经处理完了


if __name__ == '__main__':
    # 创建队列对象
    q = JoinableQueue()  # 比 q = Queue 多了一些功能,如计数

    # 创建两个生产者进程和两个消费者进程
    p1 = Process(target=producer, args=("中华小当家", "黄金炒饭", q))
    p2 = Process(target=producer, args=("神厨小福贵", "佛跳墙", q))
    c1 = Process(target=consumer, args=("八戒", q))
    c2 = Process(target=consumer, args=("悟空", q))

    # 开始生产者进程
    p1.start()
    p2.start()

    # 将消费者进程的"守护进程"功能开启
    c1.daemon = True
    c2.daemon = True

    # 开始消费者的进程
    c1.start()
    c2.start()

    # 等待进程p1和p2运行完毕
    p1.join()
    p2.join()

    # 等待队列中所有的数据被取完,再继续往后执行
    q.join()

创建线程

"""
创建线程
(以及~~~线程间的数据共享)
"""
from threading import Thread  # 创建线程必备
from threading import current_thread, active_count
import os
import time


def task1():
    print("当前'线程'的名字>>>", current_thread().name)
    print(f"{current_thread().name}的进程号>>>", os.getpid())
    global age
    age = age + 1
    print(f"{current_thread().name}的age>>>", age)


def task2():
    print("当前'线程'的名字>>>", current_thread().name)
    print(f"{current_thread().name}的进程号>>>", os.getpid())
    age = 666  # 本来age=19,但它在自己的空间建立了个age=666
    print(f"{current_thread().name}的age>>>", age)


if __name__ == '__main__':
    # 主线程的 age
    age = 18

    # 创建线程对象
    t1 = Thread(target=task1)
    t2 = Thread(target=task2)

    # 开始线程
    t1.start()
    t2.start()

    # 等待两个线程执行完毕,才继续主线程
    t1.join()
    t2.join()

    # 子线程结束前,主线程不会结束,主线程结束意味着关闭"进程"及其里面的资源
    print("当前'线程'的名字>>>", current_thread().name)
    print(f"{current_thread().name}的进程号>>>", os.getpid())

    # 输入主线程的 age
    print(f"{current_thread().name}的age>>>", age)

守护线程

"""
守护线程
"""
from threading import Thread
import time

"""
主线程运行完毕后,它不会立刻结束,要等待所有子线程运行完毕才会结束
因为主线程的结束,意味着主线程所在的"进程"结束了
"""


def task(name):
    print(f"{name}还活着")
    time.sleep(3)
    print(f"{name}正常死亡")


if __name__ == '__main__':
    # 创建线程对象
    t = Thread(target=task, args=("苏妲己",))

    # 将线程的"守护线程"功能开启
    t.daemon = True

    # 开启线程
    t.start()

    # 主线程
    print("纣王驾崩了")

线程互斥锁

"""
线程互斥锁
"""
import time
from threading import Thread, Lock


def task(mutex):
    global num
    # 加锁处理
    mutex.acquire()  # 枪锁
    temp = num
    time.sleep(0.05)
    num = temp - 1
    mutex.release()  # 释放锁


if __name__ == '__main__':
    # 主线程 num
    num = 30

    # 创建一个锁
    mutex = Lock()

    # 创建线程
    l = []  # 获取30个线程对象
    for i in range(30):
        t = Thread(target=task, args=(mutex,))
        t.start()
        l.append(t)

    # 等待所有子线程执行完毕,才执行主线程
    for i in l:
        i.join()

    print("主线程的num>>>", num)

递归锁

"""
递归锁
"""
from threading import Thread, current_thread, RLock


def task1():
    mutex.acquire()  # 抢到锁1
    print(current_thread().name, "抢到锁1")
    mutex.acquire()  # 抢到锁2
    print(current_thread().name, "抢到锁2")
    mutex.release()  # 释放锁2
    print(current_thread().name, "释放锁2")
    mutex.release()  # 释放锁1
    print(current_thread().name, "释放锁1")
    # 执行函数 task2
    task2()


def task2():
    mutex.acquire()  # 抢到锁1
    print(current_thread().name, "抢到锁1")
    mutex.acquire()  # 抢到锁2
    print(current_thread().name, "抢到锁2")
    mutex.release()  # 释放锁2
    print(current_thread().name, "释放锁2")
    mutex.release()  # 释放锁1
    print(current_thread().name, "释放锁1")


if __name__ == '__main__':
    # 创建一个递归锁
    mutex = RLock()

    # 创建八个线程
    for i in range(8):
        t = Thread(target=task1)
        t.start()

信号量

"""
信号量
———————————————————————————————————————————
信号量(Semaphore)是一种用于多线程编程的同步手段,
它可以控制同时访问某个共享资源的线程数量。
———————————————————————————————————————————
如果此时有其他线程请求获取信号量,它们就必须等待,直到有足够的资源被释放。
"""

from threading import Thread, Semaphore
import time
import random


def task(name, sp):
    # 对"资源"进行访问限制(被限制的内容,最多被5个线程同时访问)
    sp.acquire()  # 资源限制开始
    print(f"{name}抢到了停车位")
    time.sleep(random.randint(3, 6))
    sp.release()  # 资源限制结束


if __name__ == '__main__':
    # 创建信号量对象
    sp = Semaphore(5)  # 同时访问某个资源时,最多5个线程

    # 创建20个线程
    for i in range(20):
        t = Thread(target=task, args=(f"路人{i + 1}号", sp))
        t.start()

事件

"""
Event事件
"""
from threading import Thread, Event
import time


def bus():
    print("公交车即将到站")
    time.sleep(3)
    print("公交车到站了")
    event.set()


def passenger(name):
    print(f"{name}正在等车")
    event.wait()
    print(f"{name}上车出发")


if __name__ == '__main__':
    # 创建Event的对象
    event = Event()

    # 创建bus线程对象
    t = Thread(target=bus)
    t.start()  # 开始线程

    # 创建passenger线程对象
    for i in range(10):
        t = Thread(target=passenger, args=(f"乘客{i + 1}号",))
        t.start()  # 开始线程

线程池

"""
线程池(thread pool)
"""
from concurrent.futures import ThreadPoolExecutor
import time


def task(name):
    print(f"路人{name}号")
    time.sleep(1)
    return name + 10


if __name__ == '__main__':
    # 创建线程池
    pool = ThreadPoolExecutor(5)  # 线程池中的"线程数"10个,永远是这十个线程,只是内容和对象变了

    # 往线程池中提交任务---"创建线程"(并非真正独立再建立一个新的线程)
    f_list = []
    for i in range(1, 31):
        future = pool.submit(task, i)  # 往线程池中提交任务,返回一个对象
        f_list.append(future)  # 把对象(地址)存起来

    pool.shutdown()  # 关闭线程池,等待线程池中所有任务运行完毕

    for i in f_list:  # 遍历对象
        # 获得对象的result方法的值,若此result方法没有结果,则阻塞此处,等待它所对应的线程的运行结果
        print("任务结果:", i.result())

进程池

"""
进程池(process pool)
"""
from concurrent.futures import ProcessPoolExecutor
import os
import time


def task(name):
    print(f"对象{name}号-----{os.getpid()}")
    time.sleep(3)
    return name + 10


if __name__ == '__main__':
    # 创建进程池
    pool = ProcessPoolExecutor(3)  # 一但进程池中进程的数量定下来后,永远都是这些进程在运作

    # 运行30个进程,3个为一批,一批运行完后,再运行下一批,共运行10批。进程都是同样的那3个
    f_list = []
    for i in range(30):
        future = pool.submit(task, i)  # 往进程池中提交任务,返回一个对象,
        f_list.append(future)  # 把对象(地址)存起来

    for i in f_list:  # 遍历对象
        # 获得对象的result方法的值,若此result方法没有结果,则阻塞此处,等待它所对应的进程的运行结果
        print("任务结果:", i.result())

回调机制

"""
回调机制
"""
from concurrent.futures import ProcessPoolExecutor
import time
import os


def task(name):
    print(f"进程{name}号 ---> 进程号>>>{os.getpid()}")
    time.sleep(3)
    return name + 10


def call_back(obj):
    print("返回的结果>>>", obj.result())


if __name__ == '__main__':
    # 创建进程池
    pool = ProcessPoolExecutor(3)

    # 发送任务
    for i in range(1, 31):
        # 异步回调机制
        future = pool.submit(task, i).add_done_callback(call_back)

yield 进阶

# # 当函数有yield的时候,它已经是生成器函数了
# def f1():
#     yield "hello"
#     yield "world"
#
#
# g = f1()  # 调用生成器函数不会执行函数体内容,它会得到一个可迭代的生成器对象
# print(next(g))
# print(next(g))
#
# for i in f1():
#     print(i)
#
#
# def f2():
#     return [i for i in range(100)]
#
#
# def f3():
#     for i in range(100):
#         yield i
#
#
# res = f3()
#
#
# def f4():
#     res = yield "hello"
#     yield res
#
#
# g = f4()
# print(next(g))
# print(g.send("world"))


# # yield from语句
# def f5():
#     for s in "abc":
#         yield s
#     for i in range(3):
#         yield i
#
#
# for i in f5():
#     print(i)
#
#
# def f6():
#     yield from "abc"
#     yield from range(3)
#
#
# for i in f6():
#     print(i)


def sub():
    yield "a"
    yield "b"
    return "c"


def link():
    res = yield from sub()
    print("结果>>>", res)


g = link()
next(g)
next(g)
next(g)

协程

"""
协程:
也可以称为微线程,它是一种用户态内的上下文切换技术,简单说就是在单线程下实现并发效果
"""
import time

"""
进程:资源单位
线程:执行单位
协程:程序员人为创造出来的,不存在(切换+保存)

当程序遇到IO的时候,通过我们写的代码,让我们的代码自动完成切换
也就是我们通过代码来监听IO,一旦程序遇到IO,就在代码层面上自动切换,
给cpu的感觉是"咋回事,你这个程序没有IO操作?咋不让我歇会啊!!!"
"""

# # 单线程下执行技术密集型
# # 串行计数:0.44606804847717285
# # 切换计数:0.7273049354553223
# def f1():
#     n = 0
#     for i in range(10000000):
#         n += 1
#         yield
#
#
# def f2():
#     g = f1()
#     n = 0
#     for i in range(10000000):
#         n += 1
#         next(g)
#
#
# start = time.time()
# f2()
# end = time.time()
# print(end - start)


# 单线程下执行IO密集型
from gevent import monkey

monkey.patch_all()
from gevent import spawn  # spawn 有一定的问题,需要加上猴子补丁


def da():
    for _ in range(3):
        print("哒")
        time.sleep(0.5)


def mie():
    for _ in range(3):
        print("咩")
        time.sleep(2)


def buyao():
    for _ in range(3):
        print("不要")
        time.sleep(5)


start = time.time()
g1 = spawn(da)  # 异步提交任务---执行并监听da()函数,有IO操作就跳到其他代码运行
g2 = spawn(mie)
g3 = spawn(buyao)
g1.join()
g2.join()
g3.join()

end = time.time()
print(end - start)  # 12.003057479858398   6.050061464309692
葵花 Himawari 8/9号数据学习记录-01-数据初识 葵花卫星学习记录,第一章:卫星的来源与卫星数据的波段介绍 阅读详情

相关推荐

Lumerical官方案例、FDTD时域有限差分法仿真学习(十三)——多模干涉耦合器(MMI)

计算通过 1×2 端口多模干涉 (MMI) 耦合器的宽带传输和光损耗。 使用设备 S 参数在 INTERCONNECT 中创建 MMI 的紧凑模型。 它还展示了如何使用 CML 编译器提取这些参数以生成紧凑模型。 一、概述 了解模拟工作流程和关键结果 低损耗光合路器和分路器是基于 Mach-Zehnder 的光调制器的基本组件,并且是集成电路的关键组成部分。通过在输入/输出波导处使用线性锥形确保输入/输出波导的模式与干涉区域之间的

weixin_45719141的博客 1万+

advPython-3

Python-Web

因为热爱,所以坚持。 699

Quartus的Signal Tap II的使用技巧

Signal Tap II全称Signal Tap II Logic Analyzer,是第二代系统级调试工具,它集成在Quartus II软件中,可以捕获和显示实时信号,是一款功能强大、极具实用性的FPGA片上调试工具软件。传统的FPGA板级调试是由外接的逻辑分析仪连接到FPGA的控制引脚,将内部引号引出至引脚I/O上,接着进行板级调试。

qq_37624854的博客 5898

advPython-2

基于TCP协议与UDP协议通信的网络编程

因为热爱,所以坚持。 799

arcgis根据矢量范围统计栅格数据众数、最大值、均值、中位数、最小值、少数等

像元统计数据 根据多个栅格数据计算每个像元的统计数据。 可用的统计数据有:众数、最大值、均值、中位数、最小值、少数、范围、标准差、总和及变异度。 https://desktop.arcgis.com/zh-cn/arcmap/10.3/tools/spatial-analyst-toolbox/an-overview-of-the-local-tools.htm ...

GIS哼哈哈的博客 6万+

生成模型实战 | 基于Transformer生成音乐

本文介绍了基于Transformer架构的音乐生成方法,将音乐视为一系列事件序列进行处理。与将音乐表示为多维图像的MuseGAN不同,该方法使用类似GPT的仅解码器模型,基于先前事件预测下一个音乐事件。模型使用MIDI格式的钢琴音乐数据,通过分词处理将音符转换为note-on、note-off、time-shift和velocity四种事件类型,共388个独特词元,映射为索引序列后输入网络。训练完成后,可通过调整温度参数控制生成音乐的新颖性,从而创作出风格类似训练数据且连贯逼真的音乐作品。

盼小辉丶的博客 5816

advPython-5

图形化界面 pySimpleGUI 学习

因为热爱,所以坚持。 600

抖音无水印视频爬虫实战:从抓包分析到批量下载指定用户作品

抖音作为当前最受欢迎的短视频平台,拥有海量的优质内容。很多用户希望备份自己或他人的作品,但抖音官方并未提供批量下载功能,且直接下载的视频带有平台水印。本文将带领大家从零开始,通过抓包分析、设备模拟、请求签名等核心技术,实现一个完整的抖音无水印视频爬虫系统。本文仅供技术学习和个人备份使用,请勿将爬取的内容用于商业用途或侵犯他人版权,爬取频率请控制合理范围内。目录一、前言二、技术栈概览三、准备工作3.1 环境搭建3.2 抓包分析步骤3.3 关键API发现四、核心技术解密4.1 X-Gorgon签名算法。

2201_76125261的博客 846

advPython-4

Python-MySQL

因为热爱,所以坚持。 740

初识数据之特征选择

【代码】初识数据之特征选择。

M_inherit的博客 1134

GB28181 —— 3、C++编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

GB28181 —— Win10下编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

1308

advPython-6

图形化界面 pySimpleGUI 练习

因为热爱,所以坚持。 462

labelImg使用教程

Anaconda环境 安装 Anaconda 之后,在开始菜单下找到 Anaconda 文件夹 找到 Anaconda Prompt 点击运行 安装 labelImg pip install labelImg #直接命令行输入 启动 labelImg labelImg #直接命令行输入名称即可 labelImg界面 开始标注 快捷键:W(创建方框),A(上一张),D(下一张) XML文件示例 <annotation> <folder>夜读</folder>

G果的博客 3万+

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

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

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 399

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 232

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 430

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 419

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 205

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

python如何控制浏览器

Python 可以通过 Selenium、Playwright 等工具实现浏览器自动化,从打开网页到执行复杂交互操作均可脚本化完成。Selenium生态成熟

2601_96797912的博客 76

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 158

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 267

Python 100讲课程导航:第08篇《Python input 与类型转换:构建可靠的交互程序》

本文详解Python中input()的返回类型为字符串,强调必须通过int()、float()等函数进行类型转换。重点讲解了输入验证的重要性,结合try-except处理ValueError等异常,实现可靠的交互程序。通过购物预算计算器实战,演示如何防范非法输入、处理边界值,并推荐使用Decimal避免浮点精度问题,提升程序健壮性。

铭渊老黄 134

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 125

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 185

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 222
上一篇: basicPython-7
下一篇: advPython-2
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值