day11


1
def histogram(s): 2 d = dict() 3 for i in s: 4 5 d[i] = d.get(i, 0) 6 d[i] = d[i] + 1 7 return d 8 9 print(histogram('fuckfuckfuck'))

 懒懒懒啊!还是浪费了一个多小时...

说到全局函数了,如果要在函数内部修改全局函数的话,必须先声明全局函数。要记住。

但是这里会有很多tricky的地方,我们需要测试一下。

 1 var1 = 1
 2 var2 = []
 3 var3 = ''
 4 var4 = dict()
 5 var5 = .0
 6 
 7 def change1():
 8     var1 = 2
 9     var2.append(1)
10     var3 = var3 + 'fuck'
11     var4[1] = 1
12     var5 = 8.8
13     
14 change1()
15 
16 print(var1,var2,var3,var4,var5)

var3直接报错了,很明显,var3是用的局部变量。

我再改一下测试代码

 1 var1 = 1
 2 var2 = []
 3 var3 = ''
 4 var4 = dict()
 5 var5 = .0
 6 
 7 def change1():
 8     var1 = 2
 9     var2.append(1)
10     var3 = 'fuck'
11     var4[1] = 1
12     var5 = 8.8
13     
14 change1()
15 
16 print(var1,var2,var3,var4,var5)

 

这个输出看着不舒服,我再改一下代码,强行凑行数的感觉啊!!!

 1 var1 = 1
 2 var2 = []
 3 var3 = ''
 4 var4 = dict()
 5 var5 = .0
 6 
 7 def change1():
 8     var1 = 2
 9     var2.append(1)
10     var3 = 'fuck'
11     var4[1] = 1
12     var5 = 8.8
13     
14 change1()
15 
16 print("var1 = %s\nvar2 = %s\nvar3 = %s\nvar4 = %s\nvar5 = %s\n" % (var1,var2,var3,var4,var5))

var1是整型,函数内作用的是局部变量,所以没有变化。

var2是列表,函数内直接他妈的对全局变量起了作用,不是说好的,要声明全局变量么....

var3是字符串,函数内部应该也是建了一个局部变量

var4是字典,函数内他妈的也是直接对他进行了改变,草草,和列表一个德行,好吧。

var5是浮点数,和整型一样。

那总结一下,列表和字典不管你在函数内部或是外部都是对全局变量做影响,这个略坑。

书里还提到一个点,说重新赋值,也是我们对var3,和var2做的都不是赋值额..

改一下代码,再测试一下

 1 var1 = 1
 2 var2 = []
 3 var3 = ''
 4 var4 = dict()
 5 var5 = .0
 6 
 7 def change1():
 8     var1 = 2
 9     var2 = 2
10     var3 = 2
11     var4 = 2
12     var5 = 2
13     
14 change1()
15 
16 print("var1 = %s\nvar2 = %s\nvar3 = %s\nvar4 = %s\nvar5 = %s\n" % (var1,var2,var3,var4,var5))

所以说我要重新定义一下,如果要在函数内部对全局变量重新赋值,需要加global?仅仅是赋值?

对,如果是赋值语句,那左边的变量就是就是局部函数,如果之前没初始化,那右边如果有左值的话,就会报错。

如果是列表或字典的话,可以在函数内直接引用,并修改。会对全局变量有影响,因为他是按引用传递的吧。

 

到练习题了,第一题我做了一个测试

1 def read_words():
2     words = dict()
3     file = open('words.txt')
4     for line in file:
5         words[line] = 1
6 read_words()        
7 print('fuck' in words)

结果报错,说明,函数内的局部变量即使是字典,函数运行后,也被毁掉了。

1 words = dict()
2 def read_words():
3     # words = dict()
4     file = open('words.txt')
5     for line in file:
6         words[line] = 1
7 read_words()        
8 print('fuck' in words)

这个版本运行会有问题的,全是false

改了一下

 1 words = dict()
 2 def read_words():
 3     # words = dict()
 4     file = open('words.txt')
 5     for line in file:
 6         line = line.strip()
 7         words[line] = 1
 8         
 9     file.close()
10 read_words()        
11 print('cool' in words)

 这一节练习都不想做啊....

彻底跳过。

想玩的心太重了,脑子里想着游戏,不知道明天如何是好。

明天不准玩游戏,只准撸代码,我再这里立flag,今天就玩一下吧。

希望周末能把think python看完,练习肯定是做不完的,有些就留着吧。

但是实例代码还是必须敲一遍的,之后我们来看flask吧,然后可以把中国大学mooc里的一些练习也做一下了。

flask一边学的话,一边争取输出一个爬虫项目吧。

fighting!!!

posted @ 2017-06-23 17:25  onhacker  阅读(138)  评论(0)    收藏  举报