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!!!

浙公网安备 33010602011771号