HiKariのTechLab

光の技术屋


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

【Medium Python】前言

发表于 2021-10-10 | 更新于 2024-04-07 | 分类于 Medium Python

python作为最流行的语言之一,我们对python的认知到底有多少呢?大胆猜测,95%的同学对python的了解都不超过5%吧!不用说python的c源码了,就算是python每个标准库的.py源码,都有很少人去关心。结论就是,我们对python本身的理解是远远不够的,比想象中还不够!当然,这也可能是python的语言特性导致的吧,在设计方面就不需要我们去多想。

python的岗位众多,网上的教材跟面试题也很多,然而很多都是八股文,浅尝辄止,鲜有深度的挖掘,让人知其然而不知其所以然,处处透露着对技术的不敬!想想看,游戏程序员学lua,一些C Library的实现、Lua底层机理都需要熟悉,python比lua应用会更加广泛,为什么就不可以去熟悉类似的东西呢?python的应用场景那么多,不去深入了解这门语言的实现,怎么能够更好掌控这门语言?怎么可能做出更加优秀的产品?

因此笔者决定,从一些所谓的python面试题出发,通过源码分析的方法,挖掘其思路与实现,让更多人对python有更加深入的了解。这个系列,会把一些本该属于python教程里的东西给展现出来,取名就叫做Medium Python——因为笔者刚出道(谈恋爱)时,已经写过Easy Python,里面罗列了些python的简单知识。至于未来有没有Hard Python,到时候再说吧!

Contents

  • 【Medium Python】第一话:为什么list“可变”,而tuple“不可变”?
  • 【Medium Python】第二话:dict的keys()返回了什么数据类型?
  • 【Medium Python】第三话:python多线程为什么不能并行?
  • 【Medium Python】第四话:类属性和实例属性是怎样的关系?
  • 【Medium Python】最终话:如何彻底理解with关键字的用法?

【Python随笔】如何访问类实例里带双下划线的属性

发表于 2021-10-06 | 更新于 2024-11-03 | 分类于 Python随笔

学过python的我们都知道在python的类实例instance的__init__函数里,可以初始化这个instance的属性。属性的命名有许多种,比如有一个例子:

1
2
3
4
5
class Student:
def __init__(self, name, gender, age):
self.name = name
self._gender = gender
self.__age = age

这三种属性名分别是:不带下划线、带一个下划线、带两个下划线

假设有一个类Student的实例student,我们通过访问student.name、student._gender,是能够获得对应属性值的,但访问student.__age却报了如下错误:

阅读全文 »

【Python随笔】用C++编写Python的扩展模块

发表于 2021-10-05 | 更新于 2024-04-07 | 分类于 Python随笔

近期笔者在研究python内部部分模块的实现机理,研究着研究着就开始硬刚C源码了。想着先前工作或是日常也没有体验过用C++编写python库,于是就刚好学习了一下。

用C或者C++编写python的扩展库,建议用Visual Studio宇宙第一IDE,一来能够同时支持python跟C,二来调试功能非常强大。入门上手的话,可以参考下面的文档:

  • 官网文档:扩展和嵌入 Python 解释器
  • VS文档:Create a C++ extension for Python

编写的库叫做cplayground,只包含一个hack函数tuple_setitem——强行设置tuple的元素(python默认是不支持的)。我们可以来看这样的python扩展用C++该如何实现:

阅读全文 »

【测试人生】《测试架构师修炼之道》阅读笔记

发表于 2021-10-04 | 更新于 2025-07-12 | 分类于 测试人生

《测试架构师修炼之道》一书,笔者入行一年多的时候拜读过。虽然这本书主要偏向业务测试、质量管理的方向,而并非技术测试、测试开发的方向,但只要是测试行业从业者,笔者认为都值得一看。

从笔者本人角度,对于测试人员的职业发展,是极端推崇技术方向的。但工作最终总会落实到人,近年来测试被划分为偏向技术的岗位,那么技术本身就一定要搞起来,这样才能使得这类职业能够在工作框架体系里处于不屈之地。

但即便如此,测试本身也有很多技术/管理方法论的积淀,有很多old school的东西是值得尊重的。不论技术做成什么样,从测试工作的最终目标而言,都需要贴合传统测试遗留下来的的概念。《测试架构师修炼之道》一书,对传统测试,尤其质量管理方向相关的知识点、工作目标、工作方法都概括的非常明确,是测试行业不可多得的智慧积淀(嗯,测试行业确实缺乏沉淀!)。

技术方向的测试同学阅读这本书,能够更好地把握技术研发的方向;业务方向的测试同学阅读这本书,能够更全面地规划自己的发展。

在阅读的过程中,笔者也做了相关的读书笔记,提炼了其中的精要。本文也将把笔者的读书笔记全部分享出来:

阅读全文 »

【极客日常】理解javascript/python中reduce操作的含义

发表于 2021-10-01 | 更新于 2024-04-07 | 分类于 极客日常

在学习javascript和python的过程中,我们通常会接触到map、filter、reduce之类的一等公民高阶函数。理解map和filter是相对简单的事情,但理解reduce的话还是需要一番推敲。正值十一假期,今天这篇文章就好好讲讲reduce这个东西

我们首先以python为例,看一段reduce程序的操作:

阅读全文 »

【极客日常】在Vue用echarts画带不同颜色点的散点图

发表于 2021-09-16 | 更新于 2024-04-07 | 分类于 极客日常

在vue技术栈下做图表需求,echarts是一个非常棒的选择,提供了非常多种多样的图标示例以及非常复杂强大的API。由于笔者近期工作内容中需要分析采样点的分布情况,因此自然而然接触到了echarts的3D散点图。在笔者的需求中,需要对不同点进行分类,并按特定的颜色显示出来。经过一番踩坑,了解到了echarts在实现这方面的机制。

echarts绘图/刷新只需要通过setOption接口即可实现。在各种options中,visualMap视觉映射组件能够根据数据在特定维度上的值,指定对应点的视觉属性(比如颜色、透明度、图元大小等等)。

要用到visualMap特性,需要import相关组件:

阅读全文 »

【极客日常】2021新版本VSCode设置git-bash为终端的方法

发表于 2021-09-11 | 更新于 2024-04-07 | 分类于 极客日常

截至2021.9,不知道哪天更新了vscode,发现默认的终端从以前的git-bash变成了powershell,笔者用的windows电脑,于是乎要解决这个问题,把powershell变回git-bash。

打开settings,发现以前的terminal.integrated.shell.windows设置已经失效,不能再用。在settings的图形界面查看shell设置,默认的选项变成了PowerShell、Command Prompt和Javascript Debug Terminal,不能直接指定git-bash路径。

经过一番查找,发现官方文档已经说明可以通过设置terminal.integrated.profiles.windows的方法,增加一个shell选项,从而达到目的。于是我们可以在settings里添加一个git-bash选项:

1
2
3
4
5
"terminal.integrated.profiles.windows": {
"git-bash": {
"path": "X:\\GIT_ROOT\\bin\\bash.exe"
}
}

然后在shell选项里就能选择git-bash了。试试看吧~

【游戏开发】UE4下判断一个点是否在特定长方体内的计算方法

发表于 2021-09-01 | 更新于 2024-04-07 | 分类于 游戏开发

近期在研究寻路功能的测试工作,需要对玩家寻路过程中的行进轨迹进行采样,判断采样点是否在特定的寻路区域内。UE4自带了NavModifierVolume的actor,可以放置到场景里标识某个区域的寻路成本(不了解寻路相关背景的话可以参考先前的文章),因此我们做采样的时候,也需要判断某个点是否在特定的NavModifierVolume里。由于自己所负责的游戏是网游,NavModifierVolume最后导出给服务器用了,实际游戏里获取不到这些actor的数据,因此实际测试时,一方面需要下载服务器上的NavModifierVolume数据,另一方面还要手写相关的计算方法,来达到我们的工作目的。

NavModifierVolume是一个空的长方体,可以旋转成任意形式。因此判断玩家寻路采样点是否在特定寻路区域内,也就必须解决这个数学问题——3D空间下判断一个点是否在特定长方体内。

通常而言,这个问题有以下的解法:

阅读全文 »

【游戏开发】UE4用C++编写行为树的Task、Service、Decorator节点

发表于 2021-08-21 | 更新于 2025-05-02 | 分类于 游戏开发

在游戏领域,行为树是常用的AI解决方案,用行为树可以快速明了地描述AI的行为模型,而UE4提也供了非常完善的行为树解决方案,不仅有用户友好的界面,而且也有多样化的底层支持。在官网的行为树快速入门指南中,我们可以了解到UE4行为树编辑器的使用以及用蓝图创造行为树节点的方式,而在一些特定的需求当中,蓝图相对于C++并不会非常灵活。因此,笔者稍微研究了下行为树C++层次中的内容,简单分享下行为树里各种节点的C++写法

首先上一张行为树完整图,是基于场景查询系统(EQS)快速入门制作的:

阅读全文 »

【游戏开发】初识寻路&navmesh,探索RecastDemo

发表于 2021-08-07 | 更新于 2024-04-07 | 分类于 游戏开发

在手游时代,尤其对于大世界游戏而言,寻路的实现基本在专门的寻路服务器上进行。在众多寻路的解决方案中,recastnavigation是最为经典实用的一个,很多游戏甚至游戏引擎都采用类似的实现。recastnavigation项目自带了RecastDemo,用图形化的界面帮助用户认识寻路网格(navmesh)的生成以及寻路的过程。因此,作为初学者的笔者,也决定通过RecastDemo去初步认识寻路的机理奥秘。

构建RecastDemo

首先克隆recastnavigation项目,从文档中可以看到RecastDemo的构建支持Windows、Linux、MacOS三端。从实际测试的效果来看,MacOS可能存在字体无法加载的问题,建议是用Windows跟Linux跑着玩。以Windows为例,首先需要下载premake5以及SDL开发库VC。premake5需要放到PATH下,而SDL开发库VC解压后需要按照文档描述,放到recastnavigation项目目录的RecastDemo/Contrib目录下,更名为SDL。

之后,在RecastDemo目录下执行premake5 vs2019,可以在RecastDemo/Build/vs2019中看到recastnavigation.sln项目文件。用VS2019打开,构建RecastDemo,就会生成exe在RecastDemo/Bin目录下。进入这个目录执行RecastDemo.exe,就能打开工具界面了。

基础寻路操作

阅读全文 »
1…121314…21
ひかり.HDQ

ひかり.HDQ

talk is cheap, code is rich
205 日志
14 分类
423 标签
GitHub Mail CSDN Juejin Steam Bilibili
© 2019 – 2025 ひかり.HDQ
|