文章

简洁是智慧的灵魂,冗长是肤浅的藻饰。

前言

闲言少叙,这篇主要衔接前一篇。

主要是书本内容的阅读笔记,基本看到的概念都会提一下,但是不会有太多示例。

毕竟我自己都搞不太懂,所以,嘛,如若什么时候有人看到了,还请保持独立思考。

阅读笔记

字典

从名称我们就可以看出,这种数据结构的特点,可以快速的提取某一个键对应的值。

类比来说的话就是JavaScript的对象,二者具有相当接近的性质。

创建:

phonebook = {‘key’:'value','key2':'value2'...}
# 不难看出,几乎和JS一模一样

性质也是一样:键必须唯一,但是值不需要。

同时它也是引用类型的。字典有一个copy方法,它拷贝出来的值与Js的浅拷贝如出一辙,这个放在后面讲。

字典还有一种创建方法:通过dicrt函数

items = [{'name','Tom'},('age',42)]
d = dicrt(items)
# d 为:{'name':'Tom','age':42}

可以预见一些库如果返回元组类型的值可以用dicrt处理。

基本操作

items = {'name':'Tom','age':'24'}
items['name'] # 输出Tom
items['age'] = 42 # 修改age为42
del d items['age'] # 删除age项
name in items # 输出true
len(items) # 输出 项目个数 1

基本没啥好说的,需要注意的是传入的键必须是字符串,In 判断的 是键而不是值。

# 一个特色
str = 'This is {name} age {age}'
data = {'name':'tom','age':'24'}
str.format_map(data)
# 输出 ‘This is tom age 24’

自带字符串模板,用来在服务器端渲染HTML简直方便。

# 字典方法
# clear  d.clear() 清空字典d里的所有值
# copy   d2=d.copy() 将d的地址复制一份指向d2(浅拷贝)一荣俱荣,一损俱损
# 模块copy中的deepcopy可以实现深拷贝
# fromkeys    dict.formkeys(['name','age']) 输出 {'name':None,'age':None}
# get 通过get获取值如果不存在返回None 而不是报错
# items d.items() dicrt的逆操作
# keys  返回所有键
# pop d.pop(x) 输出键为x的值并从字典中删除
# popitem 随机弹出
# 如果需要可预测的弹出可以参考 collections 中的 OrderedDict
# setdefault 类似get只是如果不存在,可以赋值
# update 使用一个对象来更新另一个对象
# values 返回所有的值

字典的内容大概就这么多。

总的来说自带的花样比JavaScript要多,当然虽然没有原生支持但是这些功能JavaScript都可以模拟。

不过这就是另一个话题了。

条件与循环

条件与判断
# 基本If else
judge = true
if(judge):
      print('judge is true')
else:
      print('judge is false')
# if else if 
num = 3
if(num==1):
      print('num 1')
elif(num==2):
    print('num 2')
else:
      print('num not 1 or 2')
# if 嵌套
judge = true
num = 1
if(judge)
    if(num==1)
      print('num is 1')
  else:
      print('judge is true and num not 1')
else:
  print('judge not true')
# python的if语句内的代码块依靠空格来控制
# 多层嵌套的话,你可能需要一个游标卡尺
# 复杂的条件
# ==,<,> ,>=, <=,!= 
# 等于,大于,小于,大于等于,小于等于,不等于 没啥好说的
# x is y x是y,注意这里判断的是x,与y是不是同一个对象,就是所谓是否是指向同一位置的引用
# x==y为true时x is y可能是false
# 且不要将is用于基本值(字符串,数字)它们的结果是不可控的
# x is not y x不是y
# x in y x是y的成员
# x not in y x不是y的成员
# and 与 or 或 and也有短路的效果
断言

断言类似if区别在于断言失败可以直接让程序崩溃。

可以用于类型检测,失败直接抛出错误,而不是在不知道什么时候不可控的崩溃。

断言可以让程序更加易于调试。

age =  10
assert age >14,‘age must over 14’
# 直接崩溃退出
循环
# while 循环
x = 1
while x <= 10:
    print(x)
    x += 1
# 你甚至可以将while循环用于判断值
name = ""
while not name or name.isspace(): # 这里可以是复杂一点的判断
      name = input('enter your name')
print('Hello,{}!'.format(name))
# js风格遍历数组
arr = [1,2,3,4,5,6]
len = len(arr)
x = 0
while x < len:
      print(arr[x])
    x += 1
# 然而js是用for来做上面这种风格的遍历..而python里似乎只能用while
# for 循环
numbers = [0,1,2,3,4,5,6]
for(num in numbers):
      preint(num)
d = {x:1,y:2,z:3}

for(key in d):
        print(key,d[key])
# for in 基本和js差不多
# range函数
range(0,10)
# range函数可以方便得生成类似[0,1,2,3,4,5,6,7,8,9,,10]
# 合理使用range可以并行迭代
# 推荐使用for循环,相对来说更加简洁。
# sorted 排序后迭代
# reversed 反向迭代
# break,continue
# 跳出循环,和跳过单次循环,和js一样
# 简单推导 python允许通过一个列表创建另一个列表,花样可以有很多,在此稍微提一下。
x * x for x in range(10)
# 输出:[0,1,4,9,16,25,36,49,61,81]

其它杂项

# pass 占位符
# 类似开发得时候拿来占位表示没有开发完成用,比如
a = 1
if(a==1):
  print('不要在列子以外得地方使用这种魔法变量..')
else if(1===2):
    pass

#没有pass得话会报错
# del 手动删除一个对象,没什么好说的
# exec,eval 执行字符串
# 前者执行字符串代码,后者执行字符串计算。
# 因为作用域得关系,不是必要最好不要使用,尤其是exec
# 关于python得作用域留于以后深入学习。

结语

这两天比较忙,相关得学习慢慢得就放下了。

这篇笔记没多少内容,但是隔了很多天,有些东西就得重新看了。

学习得时候没有可以实践得东西果然忘得飞快,

抓紧时间看完概念找些列子看感觉才是学习得正确方法。

实际上,专心看,基础概念估计3天就能看完。

然而...

评论

This is just a placeholder img.