Python 技能提升(三)

基于Codex/Claude Code的学术技能包:13个Skill实现科研全流程自动化 写论文最头疼的是什么?是面对海量文献无从下手,还是实验数据一团乱麻,或者是好不容易有了结果,却卡在写作和格式调整上?如果你也经历过从选题到投稿的完整科研周期,就会明白每个环节都可能消耗大量时间精力。今天要分享的这套工具链,正是为了解决这些痛点而生——基于 Codex 和 Claude Code 平台的学术技能包(Academic Skills),它通过 13 个精心设计的 Skill,将一篇论文从 0 到 1 的全流程自动化、标准化,让你能更专注于研究本身。 这套技能包并非单一工具,而是一个覆盖文献阅读、数 阅读详情

global 和 nonlocal

b = '全局变量 global variable'


def foo():
    a = '局部变量 local variable'

    # 在局部里面操作全局变量,需要加上声明
    global b
    b = b + '!!!'
    print(b)


foo()
# 全局变量 global variable!!!

b = '全局变量 global variable'


def foo():
    a = '局部变量 local variable'

    # 在二级局部变量里面操作一级局部变量,则使用 nonlocal 进行声明
    def inner_foo():
        nonlocal a
        a = a + '!!!'
        print(a)

    inner_foo()
    print(a)


foo()
# 局部变量 local variable!!!
# 局部变量 local variable!!!

协程

概念

基本认识

  • 协程不是计算机提供的,它由程序员认为创造
  • 协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术
  • 简单来说,就是通过一个线程实现代码块相互切换执行

实现协程的方式

  • 通过第三方模块 greenlet
  • yield 关键字
  • asyncio 装饰器(Python 3.4)
  • async、await 关键字(Python 3.5)【推荐】

实现

通过 greenlet 实现(了解)

pip install greenlet
from greenlet import greenlet


def func1():
    print(1)		# 第2步:输出1
    gr2.switch()	# 第3步:切换到 func2 函数
    print(2)		# 第6步:输出2
    gr2.switch()	# 第7步:切换到 func2 函数,从上一次执行的位置继续向后执行


def func2():
    print(3)		# 第4步:输出 3
    gr1.switch()	# 第5步:切换到 func1 函数,从上一次执行的位置继续向后执行
    print(4)		# 第8步:输出4


gr1 = greenlet(func1)
gr2 = greenlet(func2)

gr1.switch()  # 第1步:去执行 func1 函数

通过 yield 关键字(了解)

def func1():
    yield 1
    yield from func2()
    yield 2


def func2():
    yield 3
    yield 4


# 调用生成器函数,返回生成器对象
obj = func1()
print(obj)

# for...in... 背后会不断调用 next(obj) 来获取 yield 产生的数据
for i in obj:
    print(i)

# <generator object func1 at 0x0000025CB2A84E80>
# 1
# 3
# 4
# 2

"""
从上面的输出结果来看,我们通过 yield 实现了协程:先在func1中输出1,然后切换到func2中输出3,
接着继续输出4,最后又切换到func1中输出2
"""

通过 asyncio 模块(了解)

  • 在 Python 3.4 版本中引入了 asyncio 模块
import asyncio


@asyncio.coroutine
def func1():
    print('正在发送请求下载图片A')
    yield from asyncio.sleep(2)  # 遇到IO耗时操作,自动切换到task_list中的其他任务
    print('图片A下载完成')


@asyncio.coroutine
def func2():
    print('正在发送请求下载图片B')
    yield from asyncio.sleep(2)  # 遇到IO耗时操作,自动切换到task_list中的其他任务
    print('图片B下载完成')


task_list = [
    asyncio.ensure_future(func1()),
    asyncio.ensure_future(func2()),
]

# 创建一个事件循环对象
loop = asyncio.get_event_loop()

# 让事件循环对象,执行"任务列表"里面的任务
loop.run_until_complete(asyncio.wait(task_list))

通过 async 和 await 关键字(掌握)

  • 在 Python 3.5 版本中引入了 async 和 await 关键字
import asyncio


async def func1():
    print('正在发送请求下载图片A')
    await asyncio.sleep(3)  # 遇到IO耗时操作,自动切换到task_list中的其他任务
    print('图片A下载完成')


async def func2():
    print('正在发送请求下载图片B')
    await asyncio.sleep(1)  # 遇到IO耗时操作,自动切换到task_list中的其他任务
    print('图片B下载完成')


task_list = [
    asyncio.ensure_future(func1()),
    asyncio.ensure_future(func2()),
]


loop = asyncio.get_event_loop()  # 创建一个事件循环对象
loop.run_until_complete(asyncio.wait(task_list))  # 让事件循环对象,执行"任务列表"里面的任务
# 在 Python 3.7 版本中,可以使用 asyncio.run() 来替代上面两行代码


# 运行结果:
# 正在发送请求下载图片A
# 正在发送请求下载图片B
# 图片B下载完成
# 图片A下载完成

协程函数与协程对象

import asyncio
import time


# 协程函数
async def func():
    print('执行中...')
    await asyncio.sleep(3)
    print('执行完毕!')


# 协程对象
obj = func()  # 注意:在创建协程对象时,函数内部代码不会执行

# 执行协程函数
# loop = asyncio.get_event_loop()  # 创建一个事件循环对象
# loop.run_until_complete(obj)     # 让事件循环对象做一些任务
asyncio.run(obj)  # 此行代码可以替代上面两行代码

await

# await + 可等待对象(协程对象、Future对象、Task对象)

import asyncio


async def foo1():
    print('开始执行 foo1 内部代码')
    # 遇到IO操作时,挂起当前协程(任务),等IO操作完成之后再继续往下执行
    # 当协程挂起时,事件循环可以去执行其他协程(任务)
    response = await foo2()
    print('IO请求结束,结果为', response)
    print('结束执行 foo1 内部代码')


async def foo2():
    print('Start foo2')
    await asyncio.sleep(2)
    print('End foo2')
    return 'OK'


asyncio.run(foo1())

# 开始执行 foo1 内部代码
# Start foo2
# End foo2
# IO请求结束,结果为 OK
# 结束执行 foo1 内部代码

import asyncio


async def foo1():
    print('开始执行 foo1 内部代码')

    response = await foo2()
    print('IO请求结束,结果为', response)

    response = await foo2()
    print('IO请求结束,结果为', response)

    print('结束执行 foo1 内部代码')


async def foo2():
    print('Start foo2')
    await asyncio.sleep(2)
    print('End foo2')
    return 'OK'


asyncio.run(foo1())

# 开始执行 foo1 内部代码
# Start foo2
# End foo2
# IO请求结束,结果为 OK
# Start foo2
# End foo2
# IO请求结束,结果为 OK
# 结束执行 foo1 内部代码

task 对象

  • 用于在事件循环中添加多个任务的
import asyncio


async def foo2(name: str):
    print(f'{name}开始执行')
    await asyncio.sleep(2)
    print(f'{name}结束执行')
    return f'{name} OK'


async def foo1():
    print('foo1 开始')

    # 创建task对象,将当前执行func函数任务添加到事件循环中
    task1 = asyncio.create_task(foo2('task_1'))

    # 创建task对象,将当前执行func函数任务添加到事件循环中
    task2 = asyncio.create_task(foo2('task_2'))

    response1 = await task1
    print(response1)

    response2 = await task2
    print(response2)

    print('foo1 结束')


asyncio.run(foo1())  # 通过协程函数创建一个协程对象,充当参数传入asyncio.run()函数中

# foo1 开始
# task_1开始执行
# task_2开始执行
# task_1结束执行
# task_2结束执行
# task_1 OK
# task_2 OK
# foo1 结束

import asyncio


async def foo2(name: str):
    print(f'{name}开始执行')
    await asyncio.sleep(2)
    print(f'{name}结束执行')
    return f'{name} OK'


async def foo1():
    print('foo1 开始')

    task_list = [
        asyncio.create_task(foo2('task_1')),
        asyncio.create_task(foo2('task_2')),
    ]

    return_value, pending = await asyncio.wait(task_list, timeout=2)  # 默认 timeout=None。如果超时,pending里面会有一个"待处理的任务"对象
    print(return_value)  # 返回一个集合
    print(pending)  # 返回一个集合

    print('foo1 结束')


asyncio.run(foo1())

future 对象

  • task 继承 future,task 对象内部 await 结果的处理基于 future 对象来的
import asyncio


async def set_after(future):
    await asyncio.sleep(2)
    future.set_result('666')


async def main():
    # 获取当前事件循环
    loop = asyncio.get_running_loop()

    # 创建一个任务(future对象),这个任务什么都不干
    future = loop.create_future()

    # 创建一个任务(task对象),绑定了set_after函数,函数内部在2s之后,会给future赋值
    # 即:手动设置future任务的最终结果,那么future就可以结束了
    await loop.create_task(set_after(future))

    # 等待任务最终结果,没有结果会一直等待下去
    data = await future
    print(data)  # 666


asyncio.run(main())

异步迭代器

import asyncio
import random


class Reader(object):
    """自定义异步迭代器"""

    def __init__(self):
        self.count = 0

    def __aiter__(self):
        return self

    async def readline(self):
        await asyncio.sleep(random.randint(1, 5))
        self.count += 1
        if self.count == 100:
            return None
        return self.count

    async def __anext__(self):
        val = await self.readline()
        if val is None:
            raise StopAsyncIteration
        return val


async def func():
    obj = Reader()
    async for i in obj:  # 背后会不断的调用 __anext__() 方法
        print(i)


asyncio.run(func())

Ubuntu 22.04远程桌面终极指南:从零配置RDP到解决黑屏问题 本文提供了一份Ubuntu 22.04远程桌面配置的终极指南,详细讲解了如何从零开始安装和配置RDP服务,并重点解决了连接后常见的黑屏问题。通过分析会话冲突、修复启动脚本及配置权限策略,帮助用户实现稳定、高效的远程桌面连接,优化分辨率、禁用锁屏,打造无缝的远程工作体验。 阅读详情

相关推荐

AXI Memory Mapped To PCI Express IP 核设计实例

本文详细描述了AXI Memory Mapped To PCI Express(2.9) IP核的应用实例

u011565038的博客 2796

职场技能提升方法论与实践指南

在数字化时代,技能提升已成为职场核心竞争力构建的关键路径。从技术原理来看,有效的技能培养需要建立系统化的学习框架,包括需求分析、路径设计和实践应用三个维度。技术价值体现在通过Python、云计算等硬技能与沟通协作等软技能的协同发展,形成T型能力结构。典型应用场景包括职场晋升、自由职业发展等领域,其中刻意练习和知识管理是核心方法论。本文通过3C分析法和技能健康检查等实用工具,为读者提供了一套可落地的技能提升体系,特别适合面临技术转型或职业发展的专业人士参考。

weixin_30407613的博客 456

某知名系统漏洞挖掘与利用思路探索

本文以安全研究为目的,分享对该套系统的代码审计和漏洞挖掘过程,文中所提到的漏洞均已提交给CNVD&CITIVD,请勿用做非法用途。

C20220511的博客 1904

【粉丝福利社】《618精选编程书单:提升你的代码力》(文末送书-进行中)

🌟618火热来袭,编程书单推荐:提升你的代码力🚀亲爱的开发者们,👋在这个快速发展的技术时代,不断学习和提升自己的编程技能是每位程序员的必修课。今天,我为大家精心挑选了一系列编程技术书籍,它们将是你技术成长道路上的宝贵财富。

愚公智库 10万+

西门子 S7-200 SMART 系列六:手把手教你配置S7-200 SMART Modbus RTU

Modbus 是公开通信协议,其最简单的串行通信部分仅规定了在串行线路的基本数据传输格式。Modbus 具有两种串行传输模式,ASCII 和 RTU,它们定义了数据如何打包、解码的不同方式。支持 Modbus 协议的设备一般都支持 RTU 格式。

John_09040211的博客 7431

BambuStudio学习笔记:OpenCSG - 实时构造实体几何(CSG)渲染的 OpenGL 方案

**OpenCSG** 是一个基于 **OpenGL** 的 **构造实体几何(CSG)** 实时渲染库,通过 **深度剥离算法** 实现布尔运算(并集、交集、差集)的可视化。其核心目标是简化复杂几何体的交互式建模,适用于 CAD 原型设计、3D 打印预览、教育工具等场景。

zzzkk2009的专栏 928

Python快速入门,你想要的就在这里了!

学习Python您是否会面临以下问题?“网上充斥着大量的学习资源、书籍、视频教程和博客,但是大部分都是讲解基础知识,不够深入;也有的比较晦涩,难以理解”优快云 Pyt...

AI科技大本营 1559

OCCT(Open CASCADE Technology)入门-2.搭建开发环境

安装完成后,在【扩展】菜单下会看到【Qt VS Tools】菜单,打开子菜单【options】进入qt配置窗口。打开VS后随便创建一个新项目,进入开发环境主页,打开顶部菜单【扩展】->【管理扩展】打开管理扩展窗口。然后点击右下角【创建】,一路【next】即可,最后会进入到开发主界面,得到一个下面的工程结构。好了,到这里基本的环境我们已经安装好了,下面我们开始创建项目并配置开发环境。打开顶部菜单【项目】,点击最后一个菜单项【xxx属性】,进入项目配置界面。这里的配置一般不用改,我们看【Versions】

2501_91235145的博客 2875

python入门指南在线阅读,python初学者指南pdf下载

为了帮助大家更好的学习Python,小编给大家准备了一份Python学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,需要获取方式:点击这里【Python全套资料】 即可获取。​优快云大礼包:《Python开发全套学习笔记/实战项目/安装工具》免费分享👉Python学习路线汇总👈Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。​👉Python必备开发工具👈。

S1112_的博客 805

北斗导航:提高RTK定位精度的GIS应用

其中,RTK(Real-Time Kinematic)定位技术是一种实时差分定位技术,通过利用基准站的观测数据来对移动站的测量值进行差分处理,以提高定位精度。差分处理的关键是基准站的观测数据,基准站通过全球定位系统(如北斗导航系统)获取卫星信号并记录观测数据。通过使用RTK定位技术,结合北斗导航系统的观测数据和差分处理,可以实现高精度的定位结果。我们将介绍RTK定位的原理、使用北斗导航系统进行RTK定位的步骤,以及如何将定位结果与GIS数据进行集成和可视化展示。步骤1:设置基准站和移动站。

OvzStream的博客 475

TRON 主网节点搭建-2024最新详细版文档

TRON主网节点搭建以前,大概说明一下本次使用的服务器配置,本次从搭建部署到节点完成同步的时间大约为36小时。

J_Lee 4057

AI时代代码质量新解:PsiACE/Skills技能库提升人机协作编程实践

在软件工程领域,代码质量始终是保障项目可维护性与团队协作效率的核心议题。其原理在于通过建立清晰、一致的编码规范与最佳实践,将隐性的开发经验转化为显性的、可执行的团队资产,从而系统性降低技术债务与协作成本。这一实践的技术价值在AI辅助编程时代尤为凸显,它为人机协作提供了高质量的参考基准,使得AI生成的代码能更贴合工程实际需求。具体到应用场景,无论是Python、Rust还是Go语言的项目开发,开发者与AI Agent均可依据结构化的“技能”(Skill)来编写或评审代码,例如通过强化类型注解提升代码可读性,或

weixin_30907935的博客 336

2026年海能达嵌入式岗位面试题集(含参考答案)

本文总结了嵌入式系统开发中的常见面试题,涵盖项目经验、外设接口、存储系统、编程基础、操作系统等核心模块。主要内容包括:1)项目核心经历的硬件/软件架构及问题解决思路;2)SPI、I2C等接口协议的时序特点与应用要点;3)NAND Flash存储管理中的ECC校验原理和文件系统对接方案;4)USB设备枚举流程等关键知识点。这些题目针对嵌入式岗位的技术考察重点,既包含底层硬件接口细节,也涉及系统级设计与优化策略,全面考察开发者的嵌入式系统能力。

Open 358

python编程三剑客pdf 52pojie,python编程三剑客怎么样

大家好,小编来为大家解答以下问题,python编程三剑客pdf 52pojie,python编程三剑客怎么样,现在让我们一起来看看吧!从0开始学Python,就问你一句:慌不慌?说句实在的,慌,可能是因为你自己没有完整的规划,其实就是不知道从何下手,七七八八乱学一通自然还是觉得无厘头。但今天,我要跟你讲,莫慌!恰好前几天从朋友那得到一套最强,翻阅之后,我大致地整理了一番(pdf),很硬核!

wangyanqin0227的博客 889

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

从零开始学python必看,最强“Python编程三剑客(pdf)”,你值得拥有!

恰好前几天从朋友那得到一套最强 “Python编程三剑客”:《Python编程:从入门到实践》+《Python编程快速上手-让繁琐工作自动化》+《Python极客项目编程-完整版》,翻阅之后,我大致地整理了一番(pdf),很硬核!...

weixin_55154866的博客 209

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

作业三 ///

qq_75189291的博客 145

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python编程符号大全及作用,python语言各种符号

比如创建一个python list,在代码上面注释上它的用途,如果开头不声明保存编码的格式是什么,那么它会默认使用ASKII码保存文件,这时如果你的代码中有中文就会出错了,即使你的中文是包含在注释里面的。注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的。但要确保注释要说的都是重要的事情,像看一眼就知道是干什么的,无用的代码是不需要加注释的。python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也是常用的。

Rtee1的博客 1856

使用python5年后,我发现学python必看这三本书!少走一半弯路

我非常喜欢python,在前面5年里,它一直是我热衷使用并不断研究的语言,迄今为止,python都非常友好并且易于学习!它几乎可以做任何事,从简单的脚本创建、web,到数据可视化以及AI人工智能,使热衷python的人群变得越来越多。接下来推荐3本学python要看的书籍。

m0_74942241的博客 101

人生苦短要学python_人生苦短要学Python

浙江消息。今年9月份开始的新学期,三到九年级信息技术课将同步替换新器材。其中,八年级将新增Python课程。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材五六年级开始接触。有些同学可能会疑问了为什么偏偏选中了Python?很简单——Python是开发人工智能相关应用的编程语言,也是人工智能时代入门必学的语言。未来是AI的时代,Python语言作为接近人工智...

weixin_39683734的博客 99

成都python 培训

人工智能行业的火爆,让Python从业人员的春天也来了,优秀的Python人才不仅被企业争抢,年薪更是非常可观,Python的前景如此好,自然是吸引了不少人的加入。在参加培训班学习之前你得清楚的知道能学到什么,下面小编就带大家了解一下四川新华Python编程培训课程内容有哪些? 千四川新华Python编程培训课程分为八个阶段: 一阶段为Python语言,包括基础语法、面向对象、高级课程、经典课程,学员需要熟练掌握Python多线程并发编程技术,可以编写爬虫程序和语音识别软件; 二阶段为Linux初

weixin_63757190的博客 140

python编写程序找出小偷_Python习题选编

Python习题选编华东师大信息学院计算中心一.程序结构与算法部分:1.编写一个python程序,输入两个数,比较它们的大小并输出其中较大者。参考代码:x=int(input("Pleaseenterfirstinteger:"))y=int(input("Pleaseentersecondinteger:"))if(x==y):print("两数相同!")elif...

weixin_34216614的博客 610

算法技能突破指南:从数据结构小白到编程高手的实战路径

你是否曾面对复杂的算法问题感到无从下手?是否在编程面试中因为数据结构问题而错失良机?今天,我将为你揭示一个系统化的算法能力提升方案,帮助你从基础到精通,轻松掌握算法与数据结构的核心技能。 ## 挑战:算法学习的三大困境 许多开发者在算法学习过程中都会遇到相似的困境:知识点零散缺乏系统性、理论难以转化为实践能力、面对实际问题时思维混乱。传统的刷题方式往往让人陷入"做了就忘、忘了再做"的恶性循环。

gitblog_00862的博客 726

肝了这套Python数据分析教程,进字节稳了!

金三银四跳槽季,什么岗位最吃香?看看字节、腾讯等大厂给自家数据分析师开出的薪资,你就知道这个岗位有多火热了。数据分析师的薪酬这么高,真的是因为做数据分析很难吗?当然不是!相较于写代码,数据...

小詹学python的博客 335

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

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

曲鸟 1万+

Python技能树丨Python简介

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

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

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

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

zhulin1028的博客 3405
上一篇: Python 技能提升(二)
下一篇: Windows API 速查
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值