最近做吉比特的笔试题,遇到了一道改版的旅行家(TSP)问题。然而我对正常的TSP都还没有特别了解,于是回过头来稍微研究一下。
Python变量作用域
同样是网易一面的时候被问到的问题,而且感觉还是很基础的问题=。=
题目
1 | def fs(): |
输出:1
2
3
4
54
4
4
4
4
当时猜倒是猜对了,不过摆明了是猜的=。=
所以还是得好好学一下Python中变量作用域的只是。
作用域的产生
Python中变量的作用域与C有着很大的区别。在Python中,只有在模块(Module),函数(def)及类(class)中才有作用域的概念,而在if-else,for循环,while循环,try-except中则没有作用域的概念。
我们可以通过下面两个例子来理解这个概念。
1 | def f(): |
输出:1
NameError: name 'i' is not defined
1 | for i in range(5): |
输出:1
2
3
4
5
60
1
2
3
4
4
作用域的类型
python的作用域分为四种:
- L(local)局部作用域
- E(enclosing)嵌套作用域:定义在此函数的上一层父级函数的局部作用域。
- G(global)全局作用域
- B(built-in)内置作用域:系统内固定模块里定义的变量,如预定义在builtin 模块内的变量。
变量名的解析
搜索变量名的优先级:局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域
LEGB法则: 当在函数中使用未确定的变量名时,Python会按照优先级依次搜索4个作用域,以此来确定该变量名的意义。首先搜索局部作用域(L),之后是上一层嵌套结构中def或lambda函数的嵌套作用域(E),之后是全局作用域(G),最后是内置作用域(B)。按这个查找原则,在第一处找到的地方停止。如果没有找到,则会出发NameError错误。
静态作用域
静态作用域是指声明的作用域是根据程序正文在编译时就确定的,有时也称为词法作用域。而在采用动态作用域的语言中,程序中某个变量所引用的对象是在程序运行时刻根据程序的控制流信息来确定的。
Python虽然属于解释性语言,但其变量作用域是在预编译阶段根据LEGB法则查找的。因此Python的作用域属于静态作用域。
参考
简单学一下Unity的GC
GC(Garbage Collection,垃圾回收)作为Unity内存管理的一部分,是游戏性能上非常重要的一环。游戏运行时使用内存来存储数据,当这些数据不需要再被使用到时,我们需要释放这部分内存来实现内存的复用,这便是GC的意义所在。
目前来讲我自己平时的业余开发还没有很涉及到严峻的性能问题,所以GC说实话平时用的不多。所以这里简单地学一下GC的一些概念及常见的减少GC开销的方法,后续如果游戏涉及到严峻的性能开销问题,再回过头来好好学一下。
Csharp中的回调,委托与事件
委托与事件,作为C#中非常重要的一个特性,在实际的开发中也经常被使用到。举个简单的例子,Unity中给一个按钮绑定一个回调函数就是一个十分简单的应用。这里我想对其概念深入的理解一下。
如何判断点在多边形内
最近逛知乎的时候,看到轮子哥说了一句话,如何判断一个点在凸多边形里,对于任何计算机专业出来的人来说,都应该跟妈妈的脸一样永远记在心里。这话一听就很有道理,特别是在游戏开发中,这是经常需要用到的,例如Navigation Mesh的生成。
于是乎,为了记住妈妈的脸(误),我查阅了相关资源,学习了一下相关的算法。
Unity中利用协程控制回合制游戏的战斗逻辑
最近做受难日的战斗系统这一块。游戏的战斗模块偏回合制(虽然也与传统的回合制有所不同),玩家回合玩家选择相应的攻击方式后完成攻击结算,进入敌人回合。敌人回合玩家需要选择相应的防御方式,然后进行攻击结算,重新进入玩家回合。这也构成了一个基本的战斗循环。
由于并不是即时制的战斗,所以如果在Update中更新游戏战斗循环显得并不怎么合适,这里我们可以用协程的方式来控制游戏循环。
Reinforcement Learning Chapter 3
In this chapter we introduce Finite Markov Decision Process. Different from last chapter of k-armed bandits problem, we will move deeper — to choose different actions in different situations.
Reinforcement Learning Chapter 2
Before we go into fully reinforcement learning, we first introduce a simpler model — K-armed Bandit Problem.