Hexo


  • 首页

  • 标签

  • 分类

  • 归档

旅行家(TSP)问题

发表于 2019-09-06 | 分类于 Algorithm

最近做吉比特的笔试题,遇到了一道改版的旅行家(TSP)问题。然而我对正常的TSP都还没有特别了解,于是回过头来稍微研究一下。

阅读全文 »

Python变量作用域

发表于 2019-09-02 | 分类于 Python

同样是网易一面的时候被问到的问题,而且感觉还是很基础的问题=。=

题目

1
2
3
4
5
6
7
8
9
10
def fs():
func_list = []

for i in range(5):
func_list.append(lambda : i)

return func_list

for f in fs():
print(f())

输出:

1
2
3
4
5
4
4
4
4
4

当时猜倒是猜对了,不过摆明了是猜的=。=

所以还是得好好学一下Python中变量作用域的只是。

作用域的产生

Python中变量的作用域与C有着很大的区别。在Python中,只有在模块(Module),函数(def)及类(class)中才有作用域的概念,而在if-else,for循环,while循环,try-except中则没有作用域的概念。

我们可以通过下面两个例子来理解这个概念。

1
2
3
4
def f():
i = 0
print(i)
print(i) # 上面函数中的i超出作用域而被回收

输出:

1
NameError: name 'i' is not defined

1
2
3
for i in range(5):
print(i)
print(i) # for循环没有作用域概念,因此这里的i指向同一个局部变量

输出:

1
2
3
4
5
6
0
1
2
3
4
4

作用域的类型

python的作用域分为四种:

  1. L(local)局部作用域
  2. E(enclosing)嵌套作用域:定义在此函数的上一层父级函数的局部作用域。
  3. G(global)全局作用域
  4. B(built-in)内置作用域:系统内固定模块里定义的变量,如预定义在builtin 模块内的变量。

变量名的解析

搜索变量名的优先级:局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域

LEGB法则: 当在函数中使用未确定的变量名时,Python会按照优先级依次搜索4个作用域,以此来确定该变量名的意义。首先搜索局部作用域(L),之后是上一层嵌套结构中def或lambda函数的嵌套作用域(E),之后是全局作用域(G),最后是内置作用域(B)。按这个查找原则,在第一处找到的地方停止。如果没有找到,则会出发NameError错误。

静态作用域

静态作用域是指声明的作用域是根据程序正文在编译时就确定的,有时也称为词法作用域。而在采用动态作用域的语言中,程序中某个变量所引用的对象是在程序运行时刻根据程序的控制流信息来确定的。

Python虽然属于解释性语言,但其变量作用域是在预编译阶段根据LEGB法则查找的。因此Python的作用域属于静态作用域。

参考

Python学习之变量的作用域
浅谈静态作用域和动态作用域

简单学一下Unity的GC

发表于 2019-09-02 | 分类于 Unity

GC(Garbage Collection,垃圾回收)作为Unity内存管理的一部分,是游戏性能上非常重要的一环。游戏运行时使用内存来存储数据,当这些数据不需要再被使用到时,我们需要释放这部分内存来实现内存的复用,这便是GC的意义所在。

目前来讲我自己平时的业余开发还没有很涉及到严峻的性能问题,所以GC说实话平时用的不多。所以这里简单地学一下GC的一些概念及常见的减少GC开销的方法,后续如果游戏涉及到严峻的性能开销问题,再回过头来好好学一下。

阅读全文 »

Python装饰器

发表于 2019-09-01 | 分类于 Python

最近面网易互娱的时候,面试官看到简历上写了Python,于是问我Python装饰器会不会。Ummmm好像还真不会,最后面试官说我Python没有掌握得很好。想来也是,自己使用Python无非就是用来写各种算法题和各种调库,很少去学Python本身的一些东西(比方说修饰器,多线程,变量作用域等等)。讲道理Python在这么多编程语言里面应该算是很好学的了,感觉还是该花时间好好学一下,让它变成自己真正掌握的东西。

那我就先从装饰器开始。

阅读全文 »

Csharp中的回调,委托与事件

发表于 2019-08-30 | 分类于 Csharp

委托与事件,作为C#中非常重要的一个特性,在实际的开发中也经常被使用到。举个简单的例子,Unity中给一个按钮绑定一个回调函数就是一个十分简单的应用。这里我想对其概念深入的理解一下。

阅读全文 »

如何判断点在多边形内

发表于 2018-09-22 | 分类于 Game

最近逛知乎的时候,看到轮子哥说了一句话,如何判断一个点在凸多边形里,对于任何计算机专业出来的人来说,都应该跟妈妈的脸一样永远记在心里。这话一听就很有道理,特别是在游戏开发中,这是经常需要用到的,例如Navigation Mesh的生成。

于是乎,为了记住妈妈的脸(误),我查阅了相关资源,学习了一下相关的算法。

阅读全文 »

Unity中利用协程控制回合制游戏的战斗逻辑

发表于 2018-09-20 | 分类于 Unity

最近做受难日的战斗系统这一块。游戏的战斗模块偏回合制(虽然也与传统的回合制有所不同),玩家回合玩家选择相应的攻击方式后完成攻击结算,进入敌人回合。敌人回合玩家需要选择相应的防御方式,然后进行攻击结算,重新进入玩家回合。这也构成了一个基本的战斗循环。

由于并不是即时制的战斗,所以如果在Update中更新游戏战斗循环显得并不怎么合适,这里我们可以用协程的方式来控制游戏循环。

阅读全文 »

Unity为多个按钮动态绑定带参委托遇到的问题

发表于 2018-09-16 | 分类于 Unity

最近开发受难日的时候遇到一个小问题。

阅读全文 »

Reinforcement Learning Chapter 3

发表于 2018-05-06 | 分类于 Reinforcement Learning

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

发表于 2018-04-29 | 分类于 Reinforcement Learning

Before we go into fully reinforcement learning, we first introduce a simpler model — K-armed Bandit Problem.

阅读全文 »
12…4

Chang Lin

34 日志
10 分类
16 标签
GitHub E-Mail
© 2019 Chang Lin
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.3