0%

柴犬

在最近的 arts 项目中,由于要自动生成目录用到了 map 函数,因此就发现了这个问题(至于为什么要自己写代码来生成目录,当然是没找到合适的插件了!

部分 toc.py 代码如下,主要就是调用了自己写的一个 toc 函数,想法也很明显,若是有多个文件,则依次为其生成目录,否则就是一个默认的文件。

1
2
3
4
5
6
if __name__ == '__main__':
if len(sys.argv) > 1:
filename = sys.argv[1:]
else:
filename = ['201903W4.md']
map(toc, filename)

然后问题来了,预期效果并没有出现,打了 [toc] 标记的位置并没有出现目录,因为印象中 map 函数就是对传入的数组/可迭代对象,作用于传入的函数。
查了一下才知道,在 Python3 中,map 返回的是一个 <map object at 0xXXXXXXXX> 的对象,并没有执行。

最简单的方法是直接套一个 list 函数,即 list(map(toc, filename)),好像到这里就解决了问题。

然后今天又看到一对 Python3 的内置函数:any & all,其定义如下:

1
2
3
4
5
6
7
8
9
all(iterable)

Return True if all elements of the iterable are true (or if the iterable is empty). Equivalent to:

def all(iterable):
for element in iterable:
if not element:
return False
return True
1
2
3
4
5
6
7
8
9
any(iterable)

Return True if any element of the iterable is true. If the iterable is empty, return False. Equivalent to:

def any(iterable):
for element in iterable:
if element:
return True
return False
  • 对于 all 函数,当 iterable 中所有元素都为 True 时(或者 iterable 为空),返回 True。
  • 对于 any 函数,当 iterable 中有元素为 True 时,则返回 True。如果当 iterable 为空时,返回 False。

而在 Python3 中,函数没有返回值的时就是 False,而我的 toc 函数正是没有返回值的,相当于可以一直循环完,因此就可以使用 any(map(toc, filename)) 解决问题。

另外如果传入的函数具有返回值,而且只要有一个函数执行的返回值为 True 的时候,any 就返回了,也就执行不完整了。

昨天晚上开了这学期第一次组会,算是活过去了233,因为要求每个人讲一下自己的思路,通知说 3 月初开题,然而我没做 ppt,也没啥思路。

毕竟关于我那个课题(关于 unikernel 的异构内存管理)的论文很少,我还去知网搜了一下,然后我笑了。(毕竟我一般去谷歌学术搜论文)

Read more »

最近突然很想看高质量的 MAD,然而总是可遇不可求,于是今晚直接将 B 站每月播放量最高的前20的 MAD 数据全部爬下来,然后稍作分析,同时也可以之后细看。

Read more »

今天在 codewars 遇到一道题,不难,但是看到别人的解法被惊艳到了,故而做此纪录。

原题如下:

1
2
3
4
5
6
7
8
9
10
11
Write a simple parser that will parse and run Deadfish.

Deadfish has 4 commands, each 1 character long:

i increments the value (initially 0)
d decrements the value
s squares the value
o outputs the value into the return array
Invalid characters should be ignored.

parse("iiisdoso") ==> [8, 64]

我的解法就很直白,大部分人基本上都是这样做的,虽然也想过有没有其他的解法,但是没想出来 233

1
2
3
4
5
6
7
8
9
def parse(data):
init = 0
out = []
for i in data:
if i == 'i': init += 1
elif i == 'd': init -= 1
elif i == 's': init *= init
elif i == 'o': out.append(init)
return out

提交之后看到有个人是下面这样的解法,惊了,突然感觉 get 到了某种小技巧(但是不记下来可能过段时间就忘了

1
2
3
4
5
6
7
8
9
def parse(data):
action = {'i': lambda v, r: v + 1,
'd': lambda v, r: v - 1,
's': lambda v, r: v * v,
'o': lambda v, r: r.append(v) or v}
v, r = 0, []
for a in data:
v = action[a](v, r) if a in action else v
return r

之前在做 bili-box 中有收集哔哩哔哩的 logo,就是 b 站主页左上角的那个 “bilibili” ,于是在 Github 搜看是否也有人在搜集这个,结果发现有人在 搜集挂件 然后作者将其用在博客头像上,看上去不错,于是就写了个 爬虫 来爬挂件,由于挂件商城中并没有多少,于是想到在每个视频的评论中爬取评论者的挂件。

昨天晚上参考该作者的 hexo-theme-beep 主题,修改了一下自定义的 js 和 css 文件,然后将挂件加到了我自己的博客头像上。

和原作者稍有不同,我的是直接点击一次就改变头像,而且会显示挂件名称,每次都随机加载图片而不是按顺序。

实际效果可以点击我博客头像来感受一下~

具体修改如下所示

Read more »

起因是昨天上午在“科技区UP抱团交♂流群”中某位大佬抱怨:

@GloomyGhost: 有这时间还不如刷codewar

然后就有点好奇了,就今天下午注册试了下,感觉还挺有趣的,其实呢,codewars 和其他如 leetcode 刷题网站类似,但它也有自己一些独特之处(虽然我也没怎么刷过 leetcode)。

首先你注册之后等级是 8 级,等级越高数字越低,是不是一下子就有刷题提升段位的冲动了呢(滑稽
然后还有就是,如果你没有做过(train)题是没办法看别人的解题方法的 0w0
另外好像和你段位差太多的题你是没办法点进去的(等级打击),因为我到了 7 级不能做 4 级的题 233

其他的应该基本上都差不多,哦对了还有 codewars 可以选择自己擅长的语言,在做题的时候也可以换语言(如果可以换的话)
但是等级是和对应语言绑定的,也就是说就算你 Python 刷到 2级,但你想换成 JavaScript 还是得从 8 级慢慢刷~

由于 12 月进入了考试月,所以这个月基本没做什么,原来每个月两本书的计划也只能搁置了。
相关的论文也没怎么看,就写了一个嗶哩嗶哩的下载工具(摸鱼当场抓获

Read more »