疯狂的石头

  • 首页

  • 归档

  • 分类

闭包的概念、形式与应用

发表于 2018-06-05 | 更新于 2018-06-09 | 分类于 随笔

什么是闭包?

闭包并不是什么新奇的概念,它早在高级语言开始发展的年代就产生了。闭包(Closure)是词法闭包(Lexical Closure)的简称。对闭包的具体定义有很多种说法,这些说法大体可以分为两类:

  • 一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在其词法上下文中引用了自由变量(指除局部变量以外的变量)的函数。

  • 另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。有这样的的定义:在实现深约束(英文原词是 binding,也有人把它翻译为绑定)时,需要创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来的整体被称为闭包。

阅读全文 »

golang []byte 转 string

发表于 2018-06-05 | 更新于 2018-06-09 | 分类于 Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
func BytesToString(bs []byte) string {
l := len(bs)
buf := make([]string, 0, l)
for i := 0; i < l; i++ {
buf = appendString(buf, bs[i])
}
return strings.Join(buf, dot)
}

func appendString(bs []string, b byte) []string {
var a byte
var s int
for i := 0; i < 8; i++ {
a = b
b <<= 1
b >>= 1
switch a {
case b:
s += 0
default:
temp := 1
for j := 0; j < 7 - i; j++ {
temp = temp*2
}
s += temp
}

b <<= 1
}

return append(bs, strconv.Itoa(s))
}

golang 学习笔记

发表于 2018-06-05 | 更新于 2018-06-09 | 分类于 Go
1
2
3
4
5
6
7
8
9
10
11
12
//每个 go 程序都是由包构成
//程序从 main 包开始执行
//本程序通过导入路径 "fmt" 和 "dll/stringutil" 来使用这两个包
//按照约定,包名与导入路径的最后一个元素一致

//在 Go 中,如果一个名字以大写字母开头,那么它就是已导出的。 例如, Pizza 就是个已导出名, Pi 也同样,它导出自 math 包

//函数可以返回任意数量的返回值

//Go 的返回值可被命名,它们会被视作定义在函数顶部的变量;返回值的名称应当具有一定的意义,它可以作为文档使用

//var 语句用于声明一个变量列表,跟函数的参数列表一样,类型在最后
阅读全文 »

HTML 笔记

发表于 2018-06-05 | 更新于 2018-06-09 | 分类于 HTML

HTML简介:

  • HTML 是用来描述网页的一种语言。
  • HTML 指的是超文本标记语言: HyperText Markup Language
  • HTML 不是一种编程语言,而是一种标记语言,标记语言是一套标记标签 (markup tag)
  • HTML 使用标记标签来描述网页
  • HTML 文档包含了HTML 标签及文本内容
  • HTML文档也叫做 web 页面
阅读全文 »

Python yield 使用浅析

发表于 2018-06-05 | 更新于 2018-06-09 | 分类于 Python

带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ?我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念。

如何生成斐波那契數列

斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到。用计算机程序输出斐波那契數列的前 N 个数是一个非常简单的问题,许多初学者都可以轻易写出如下函数:

1
2
3
4
5
6
def fab(max): 
n, a, b = 0, 0, 1
while n < max:
print b
a, b = b, a + b
n = n + 1
阅读全文 »
1…456…9
Crazy Stone

Crazy Stone

step by step...

42 日志
9 分类
E-Mail GitHub
© 2018 — 2020 Crazy Stone
由 Hexo 强力驱动
|
主题 — NexT.Pisces