Valar Morghulis


  • 首页

  • 分类

  • 归档

  • 标签

Win 2008 配置问题

发表于 2017-05-20

Win 2008 配置问题

1. 访问网站 500 错误

1.1 asp.net 4.0 支持

默认安装IIS7之后,是支持asp.net 2.0的。但是如果你先按照了framework 4.0,在安装的iis7asp.net 4.0是会报错的。

可在CMD下输入:

1
C:\Windows\Microsoft.NET\Framework\V4.0.30319\aspnet_regiis -i # X64

1.2 权限问题

解决方法:在组或用户名下添加Everyone用户,增加修改权限。

如果文件在桌面的话,更需要设置Everyone的读写权限。

Ubuntu折腾日记(1)

发表于 2017-05-20 | 分类于 Linux

Ubuntu 折腾日记(1)

1. Chrome无法代理问题

1
google-chrome --proxy-server:socks5://127.0.0.1:1080

2. UTC 时间问题

安装Ubuntu和Win双系统后,widows认为BIOS时间是本地时间,Ubuntu认为BIOS时间是UTC时间,这样从Ubuntu重启到ubuntu会发现时间相差8小时,Ubuntu会经常与NTP服务器时间进行同步,但Windows不会。

有两种方法可以解决问题,一是修改Ubuntu时间为本地时间,二是修改Windows时间为UTC时间。

我采取的是第一种方案:

以前的方法是

1
修改文件 /etc/default/rcS 将UTC=yes改成UTC=no

在Ubuntu 16.04使用systemd启动之后,时间也改成了由timedatectl来管理

更改方法为

1
$ timedatectl set-local-rtc 1 --adjust-system-clock

重启即可

3.安装软件依赖问题

1
sudo apt install -f

4. Interesting

4.1 Matrix

1
sudo apt install cmatrix

安装后 F11 全屏终端,执行 cmatrix -b

更多选项执行 cmatrix -h

4.2 Train

1
sudo apt install sl

安装后执行命令 sl 。会有小火车穿过

Python - 迭代器、异常处理

发表于 2017-05-16

Python - 迭代器、异常处理

1.迭代器

迭代器为类序列对象提供了一个类序列的接口。python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象。迭代器用起来很灵巧,你可以迭代不是序列但表现出序列行为的对象,例如字典的键、一个文件的行,等等。迭代器的作用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
i = iter('abcd')
print i.next()
print i.next()
print i.next()
s = {'one':1,'two':2,'three':3}
print s
m = iter(s)
print m.next()
print m.next()
print m.next()
>> a
>> b
>> c
>> {'three': 3, 'two': 2, 'one': 1}
>> three
>> two
>> one

2. 异常处理

在try程序段中,我们放入容易犯错的部分。我们可以跟上except,来说明如果在try部分的语句发生StopIteration时,程序该做的事情。如果没有发生异常,则except部分被跳过。

随后,程序将继续运行,而不是彻底中断。

1
2
3
4
5
6
7
8
9
re = iter(range(5))
try:
for i in range(100):
print re.next()
except StopIteration:
print 'here is end ',i
print 'HaHaHaHa'

如果无法将异常交给合适的对象,异常将继续向上层抛出,直到被捕捉或者造成主程序报错。比如下面的程序

1
2
3
4
5
6
7
8
9
10
def test_func():
try:
m = 1/0
except NameError:
print("Catch NameError in the sub-function")
try:
test_func()
except ZeroDivisionError:
print("Catch error in the main program")

子程序的try…except…结构无法处理相应的除以0的错误,所以错误被抛给上层的主程序。


如果try中没有异常,那么except部分将跳过,执行else中的语句。

finally是无论是否有异常,最后都要做的一些事情。

流程如下,

try->异常->except->finally

try->无异常->else->finally

我们也可以自己写一个抛出异常的例子:

1
2
3
print 'Lalala'
raise StopIteration
print 'Hahaha'

StopIteration是一个类。抛出异常时,会自动有一个中间环节,就是生成StopIteration的一个对象。Python实际上抛出的,是这个对象。当然,也可以自行生成对象:

1
raise StopIteration()

Python - 函数对象

发表于 2017-05-14 | 分类于 Python

Python - 函数对象

1. lambda 函数

1
2
func = lambda x,y: x + y
print func(3,4)

lambda生成一个函数对象。该函数参数为x,y,返回值为x+y。函数对象赋给func。func的调用与正常函数无异。

亦可写作如下形式:

1
2
def func(x, y):
return x + y

函数可以作为一个对象,进行参数传递。如:

1
2
3
4
5
6
def test(f, a, b):
print 'test'
print f(a, b)
test(func, 3, 5)
test((lambda x,y: x**2 + y), 6, 9)

2. map() 函数

map()是Python的内置函数。它的第一个参数是一个函数对象。

map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表re中。

1
2
3
4
re = map((lambda x: x+3),[1,3,5,6])
>> [4, 6, 8, 9]
re = map((lambda x,y: x+y),[1,2,3],[6,7,9])
>> [7, 9, 12]

在Python 3.X中,map()的返回值是一个循环对象。可以利用list()函数,将该循环对象转换成表。

3. filter() 函数

如果函数对象返回的是True,则该次的元素被储存于返回的表中。filter通过读入的函数来筛选数据。

1
2
3
4
5
6
7
def func(a):
if a > 100:
return True
else:
return False
print filter(func,[10,56,101,500])

同样,在Python 3.X中,filter返回的不是表,而是循环对象。

4. reduce() 函数

reduce可以累进地将函数作用于各个参数,前提是就是这个函数自身能接收两个参数。

1
print reduce((lambda x,y: x+y),[1,2,5,7,9])

相当于(((1+2)+5)+7)+9 = 24

  • reduce()函数在3.0里面不能直接用的,它被定义在了 functools 包里面,需要引入包

Python - 生成器、循环对象

发表于 2017-05-13 | 分类于 Python

Python - 生成器、循环对象

1. 生成器

生成器(generator)的主要目的是构成一个用户自定义的循环对象。

生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值。

例:

1
2
3
4
5
6
7
8
9
10
def gen():
a = 100
yield a
a = a*8
yield a
yield 1000
#该生成器共有三个yield, 如果用作循环器时,会进行三次循环。
for i in gen():
print i

或:

1
2
3
4
5
def gen():
for i in range(4):
yield i
#又可以写成生成器表达式(Generator Expression):
G = (x for x in range(4))

2. 循环对象

循环对象是这样一个对象,它包含有一个next()方法(next()方法,在python 3x中), 这个方法的目的是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误。

当一个循环结构(比如for)调用循环对象时,它就会每次循环的时候调用next()方法,直到StopIteration出现,for循环接收到,就知道循环已经结束,停止调用next()。

假设我们有一个test.txt的文件:

1
2
3
1234
abcd
efg

我们运行一下python命令行:

1
2
3
4
5
6
7
>>>f = open('test.txt')
>>>f.next()
>>>f.next()
...

不断输入f.next(),直到最后出现StopIteration

open()返回的实际上是一个循环对象,包含有next()方法。而该next()方法每次返回的就是新的一行的内容,到达文件结尾时举出StopIteration。这样,我们相当于手工进行了循环。

自动进行的话,就是:

1
2
for line in open('test.txt'):
print line

在这里,for结构自动调用next()方法,将该方法的返回值赋予给line。循环知道出现StopIteration的时候结束。

相对于序列,用循环对象的好处在于:不用在循环还没有开始的时候,就生成好要使用的元素。所使用的元素可以在循环过程中逐次生成。这样,节省了空间,提高了效率,编程更灵活。

3.迭代器

从技术上来说,循环对象和for循环调用之间还有一个中间层,就是要将循环对象转换成迭代器(iterator)。这一转换是通过使用 iter() 函数实现的。但从逻辑层面上,常常可以忽略这一层,所以循环对象和迭代器常常相互指代对方。

4. 表推导

表推导(list comprehension)是快速生成表的方法。

如要生成表L:

1
2
3
L = []
for x in range(10):
L.append(x**2)

使用表推导的方式:

1
L = [x**2 for x in range(10)]

这与生成器表达式类似,只不过用的是中括号。表推导的机制实际上是利用循环对象。

12
小明

小明

微信公众号:一杯过往

15 日志
4 分类
7 标签
RSS
GitHub 博客园 WordPress Email
© 2017 - 2019 小明
0%