对于基础学习的这些内容安排对我来说,有点不合理,内容很基础。所以我就大量跳过,记录一些自己容易忽略的点。
1、pass语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而pass语句就是用来解决这些问题的。
eg: def a_func():
SyntaxError: unexpected EOF while parsing
def a_func():
pass
pass是空语句,不做任何操作,只起到占位的作用,其作用是为了保持程序结构的完整性。尽管pass语句不做任何操作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个pass语句,让代码可以正常运行。
2、try语句的工作方式
1)、首先,执行try子句(在关键字try和关键字except之间的语句)
2)、如果没有异常发生,忽略except子句,try子句执行后结束。
3)、如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和except之后的名称相符,那么对应的except子句将被执行。最后执行try语句之后的代码。
4)、如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
3、列表,字符串,元祖,字典,集合,序列
1)、python的元祖与列表类似,不同之处在于tuple被创建后就不能对其进行修改,类似字符串。
2)、字典
序列是以连续的整数为索引,与此不同是,字典以“关键字”为索引,关键字可以是任意不可变类型,通常用字符串或数值。
字典是python唯一的一个映射类型,字符串、元祖、列表属于序列类型。
那么如何快速判断一个数据类型x是不是可变类型的呢?两种方法:
一、麻烦方法:用id(x)函数,对x进行某种操作,比较操作前后的id,如果不一样,则x不可变,如果一样,则x可变。
二、便捷方法:用hash(x),只要不报错,证明x可被哈希,即不可变,反过来不可被哈希,即可变。
eg:
i=1
print(id(i)) #140732167000896
i = i+2
print(id(i)) #140732167000960
l=[1,2]
print(id(l)) #4300825160
l.append('python')
print(id(l)) #4300825160
整数i在加1之后的id和之前不一样,因此加完之后的这个i(虽然名字没变),但不是加之前的那个i了,因此整数是不可变类型。
列表l在附加“python”之后的id和之前一样,因此列表是可变类型。
eg:
print(hash('Name')) # -9215951442099718823
print(hash((1,2,'python'))) #823362308207799471
print(hash([1,2,'python'])) #TypeError:unhashable type:"list"
print(hash({1,2,3})) #TypeError:unhashable type:"set"
数值、字符和元祖都能被哈希,因此他们是不可变类型。
列表、集合、字典不能被哈希,因此它是可变类型。
3)字典和集合
字典是无序的 键:值(key:value),对集合,键必须是互不相同的(在同一个字典之内)
dict内部存放的顺序和key放入的顺序是没有关系的。
dict查找和插入的速度极快,不会随着key的增加而增加,但是需要占用大量的内存。
4)集合
python中set与dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
注意:key为不可变类型,即可哈希的值。