随处可见的python学习笔记-基础篇02
简洁是智慧的灵魂,冗长是肤浅的藻饰。
前言
闲言少叙,这篇主要衔接前一篇。
主要是书本内容的阅读笔记,基本看到的概念都会提一下,但是不会有太多示例。
毕竟我自己都搞不太懂,所以,嘛,如若什么时候有人看到了,还请保持独立思考。
阅读笔记
字典
从名称我们就可以看出,这种数据结构的特点,可以快速的提取某一个键对应的值。
类比来说的话就是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天就能看完。
然而...