今天是二零一伍年八月三日
1.python的语法中,if语句需要冒号
# if.py
a = 100
if a >= 100 :
print 'no less than 100'
else :
print 'less than 100'</span>
而逻辑中的else if要简写为elif
a = 100
if a > 100 :
print 'bigger than 100'
elif a == 100 :
print 'equal to 100 '
else :
print 'less than 100'
2.python语法中,for循环十分有趣
# for_circle.py
names = ['strange' , 'huahua' ]
for name in names :
print name
其全称为for...in循环,依次把list或tuple中的每个元素迭代出来
3.发现在python中不存在c中域的概念
比如在python中
# question_of_circle.py
i = 2
while i > 0 :
n = 99
i = i - 1
n = n - 1
print n
对n的访问在while外也是合法的
但是对于c语言
// queston_of_circle.cpp
#include <iostream>
using namespace std ;
int main (){
int i = 2 ;
while(i > 0 ){
int n = 99 ;
i -- ;
}
cout << n << endl ;
return 0 ;
}
对n的访问是非法的
值得注意
这里引用一段别人的博客(http://blog.sina.com.cn/s/blog_7e4ac8b501015opb.html)
(1)最内嵌套作用域规则:由一个赋值语句引进的名字在这个赋值语句所在的作用域里是可见(起作用)的,而且在其内部嵌套的每个作用域里也可见,除非它被嵌套于内部的,引进同样名字的另一条赋值语句所遮蔽/覆盖。
(2)LEGB:符号表的搜索顺序是Local -> Enclosing Function -> Global -> Built-in
例如(下面实例会出错):
------------------------------------------
>>> x=10
>>> def f():
>>> f()
>>>
---------------------------------------------
为什么会出错呢?
因为在函数f()中出现了变量x+=1,编译器会认为x属于局部变量(local),根据LEGB规则,先搜索local变量,则在print(x)语句时候,局部变量 x还没有赋值,故出现下面提示信息:
python能够改变变量作用域的代码段是def、class、lamda.
4.原有的输入函数raw_input()输入的对象都是字符串,使用int()函数就行
birth = int(raw_input('birth: '))
而且int()发现一个字符串并不是合法的数字时就会报错,程序就会退出了。
在python3.x中出现input()函数,可以解决输入类型的问题。
5.python中的dict对象,dict对象类似其他语言中的map,是一种key-value的储存方式
dict的使用语句为
d = {'Michael' : 95 , 'Bob' : 75 , 'Tracy' : 85}
当然,在初始声明后,也可以添加新的key值
d ['Tomas'] = 22
key不存在时,访问key会报错,可以使用in检验key是否存在与dict
>>>'Thomas' in d # suppse Thomas isn't in d
false
用get()函数也可以查找key是否在dict中,如果key不存在,返回None,或者是函数已指定的值
>>>d.get('Thomas')
>>>d.get('Thomas' , -1 )
-1
在python的交互执行行中,None不显示任何结果
想要删除一个key—value搭配时,可以使用pop()函数
dict是用空间来换取时间的一种方法
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key: