07: 字典表dict 与元组 tuple
字典表dict:
字典通过键值,可以插入, 而列表不可以。
申明: 第一种 {键:值,...}
第二种 dict(键=值)
操作:
获取 d['键'] 或者 d.get('j键',默认值)
合并 d.update(d2)
属性 keys()键 , values()值 , items()键值
排序 将keys()放入列表 , 使用全局函数sorted()
d = {'ISBN':'23412343','Title':'Python 入门','Price':39.00}
d['Title']
""" 'Python入门' """
d['Author'] = 'Jerry'
""" {'ISBN': '23412343', 'Title': 'Python 入门', 'Price': 39.0, 'Author': 'Jerry'} """
l = [1,2,3,4,5]
l[2]
""" 3 """
l[0] = 99
""" [99,2,3,4,5] """
l[8]
l[100]
""" 都报错 """
d.get('Price')
""" 39.0 p换成小写则找不到39.0,返回空"""
d.get('price',0.0)
""" 0.0 寻找一个不存在的数,返回0.0给我 """
emp = dict(name='Mike',age=20,job='dev')
""" {'job':'dev','name':'Mike','age':20}
可以通过花括号申明,也可以通过dict来申明 """
len(emp)
""" 3 """
emp = {'job':'dev','name':'Mike','age':20}
dep = {'department':'技术部'}
emp.update(dep)
""" {'job':'dev','department':'技术部','name':'Mike','age':20} """
emp.pop(age)
""" {'job':'dev','department':'技术部','name':'Mike'} 将年龄弹出了"""
emp.keys()
""" doct_keys(['job','department','name']) 查看键"""
emp.values()
""" dict_values(['dev','技术部','Mike']) 查看值 """
emp.items()
""" dict_items([('job','dev'),('depaetment','技术部'),('name','Mike')]) 查看全部 """
for k,v in emp.items():
print('{} => {}'.format(k,v))
""" job => dev ... """
"""嵌套"""
emp = {'age':20,'name':{'firstname':'Jerry','lastname':'Lee'},'dep':'行政部'}
emp.get('name')
""" {'firstname':'Jerry','lastname':'Lee'} """
emp['name']['firstname']
""" 'Jerry' """
d = {'a':1,'b':2,'c':3,'d':4}
""" 打印d为: {'c':3,'d':4,'a':1,'b':2} """
ks = d.keys()
ks = list(d.keys)
ks.sort()
""" ['a','b','c','d'] 想要排序,不能直接排,需要先弄个列表出来,再用sort()"""
for k in ks:
print(d.get(k))
"""
1
2
3
4 排序方法一
"""
ks = d.keys()
for k in sorted(ks):
print(k,d.get(k))
"""
a 1
b 2
c 3
d 4 排序方法二
"""
字典表是乱序的,因为程序机制,为了更快,使用了一种哈希算法。
元组tuple
特征: 任意对象有序集合
通过下标访问
属“不可变”类型
长度固定,任意类型,任意嵌套
(1,2) + (3,4)
""" (1,2,3,4) """
x = (4,)
""" (40,) 定义单个元组 """
t = (1,2,3,4,5)
t[0] = 99 """这是错的"""
res = [x**2 for x in t]
""" [1, 4, 9, 16, 25] """
t.index(3) """ 2 """
t.count(3) """ 1 """
申明: (元素,)
index(val) :查找索引
count(val) :统计数量
namedtuple:(可以先不管)
form collections import namedtuple
Employee = namedtuple('Employee',['name','age','department','salary'])
jerry = Employee(name='Jerry',age=30,department='财务部',salary=9000.00)
jerry.name
""" 'jerry' """
08: 文件与类型汇总
文件:
基本语法 file = open('文件名',mode)
mode
r (读一个文件)
w (写一个文件)
a (追加信息)
b (二进制)
+ (可读可写)
myfile = open('hello.txt','w')
myfile.write('优品课堂\n')
""" 5 表示有5个字符,写入一个txt信息"""
f = open('hello.txt','r')
f.read()
""" 优品课堂\nhello worle!\n """
f.read()
""" '' 空的,read()就像指针"""
f = open('hello.txt')
f.readline()
""" 优品课堂\n """
f.readline()
""" 'hello world!\n 逐行读取"""
l = open('hello.txt').readlines()
""" ['优品课堂\n','hello world!\n']
for line in l:
print(line)
"""
优品课堂
hello world!
"""
f = open('course.txt','w')
f = open('course.txt','w',encoding='utf8')
f.write('优品课堂 Python教程\n')
f.write('www.codeclassroom.com')
f.close()
""" 写入文本文件 """
操作:
read() 读取
readline() 单行读取
readlines() 全部读取
close() 关闭文件
pickle存取Python对象:
dump(对象,目标文件)
load(文件)
with open('sss.txt') as f: (自动释放资源)
x,y,z = 1,2,3
l = [1,2,3]
f = open('datafile.txt','w')
f.write('{},{},{}'.format(x,y,z))
f.write(str(l))
f.close()
charts = open('datafile.txt').read()
""" 1,2,3\n[1,2,3] """
d = {'a':1,'b':2}
f = open('datafile.pkl','wb')
import pickle
pickle.dump(d,f)
"""把d放到f中去"""
f.close()
open('datafile.pkl','wb').read()
""" b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.' """
f = open('datafile.pkl','rb')
data = pickle.load(f)
print(data)
""" {'a': 1, 'b': 2} """
data['a']
"""1"""
data.get('b')
"""2"""
f = open('course.txt')
l = f.readlines()
for line in l:
print(line)
"""
都打印出来了,在这,但这种方法没有下面的好
"""
with open('cours.txt') as f
for line in f.readlines()
print(line)
"""
也都会打印出来,只是用with,会自动释放资源,不用再写close
"""
汇总:
集合: 序列 可变的(列表list) 不可变(字符串str,元组tuple,字节数组)
映射 字典表dict
集合 Set
数字: 整型 int boolean
浮点型 float Decimal ......
可调用: 函数function
生成器Generator
类class
方法
其它: 文件
None
视图 。。。。
内部: Type
l = ['abc',[(1,2),([3],4)],5]
09: 语句,表达式与if分支
语句:
代码风格:代码格式指南:
PEP8
缩进四个空格
一行不超过79
空行
赋值语句:
基本赋值
序列赋值
扩展序列解包赋值 *解包,后面带有列表 *变量,获取剩余元素到list
多目标赋值 a = b = 0
参数化赋值
x = 5
(x,y) = (5,10)
x,y = 5,10
""" 元组赋值都是一样的,都是给一个元组 """
[x,y,z] = [10,20,30]
x,y = y,x
[a,b,c] = (1,2,3)
""" 列表赋值 """
a,b,c = 'uke'
""" a是u,b是k,c是e """
a,b,c = 'you'
s = 'youpin'
a,b,c = s[0],s[1],s[2:]
""" c包含后面所有的,当你想要一个字符串的特定位置时,用这种方法进行变通 """
a,b,*c = s
""" 前面是对应着来,后面是全部给c """
a,*b,c = s
""" 前面后面是对应着来,中间全部给b b是['o','u','p','i'] """
b = ''.join(b)
""" 'oupi' 通过join将字符串连接起来"""
a = 'uke'
b = 'uke'
a == b
""" True """
a is b
""" True """
a = 'uke.cc'
b = 'uke.cc'
a == b
""" True """
a is b
""" False 和int的256是一样的,短的被缓存了共用,长的不行,以3为界或者啥的"""
a = b = c = 'uke'
""" a,b,c都是uke """
a = b = []
a.append(3)
""" a里面是[3],b里面也是[3] """
a = []
b = []
a,b = [],[]
a.append(3)
""" 这两种,b都不会变 """
x = 5
b = 6
x = x + y
""" x等于11 """
a,b = 1,2
a += b
""" a为3 """
l = [1,2]
l += [9,10]
""" l为[1,2,9,10] """
l.extend([3,5,7])
""" l为[1,2,9,10,3,5,7] 第二个效率更高"""
列表赋值原因:
表达式:
函数调用:
方法调用:
打印操作:print()
sep='分隔符'
end=‘终止符’
file=指定文件
s = '优品课堂'
url = 'www.codeclassroom.com'
print(s,url)
""" 优品课堂 www.codeclassroom.com """
print(s,url,sep='|')
""" 优品课堂|www.codeclassroom.com 以竖线分开"""
print(s,url,end='...\n')
""" 优品课堂 www.codeclassroom.com... 换行符看不见但是有 以竖线分开"""
print(s,url,end='...\n',file=open('result.txt','w',encoding='utf8'))
流程控制:
if语句:
一般格式
多重分支
三元运算符 a = Y if X else z
score = 75
if score >=90:
print('优秀')
elif score >= 80:
print('良')
elif score >= 60:
print('及格')
else:
print('不及格')
""" """
def add(x)
print(x+10)
operation = {
'add' : add,
'update' : lambda x: print(x*2),
'delete' : lambda x: print(x*3)
}
def default_method(x):
print('默认方法,什么都不做')
operation.get('add',default_method)(10)
""" 20 前面没找到合适的键值,就执行method"""
score = 75
#if score >= 60:
# result = '及格'
#else:
# result = '不及格'
result = '及格' if score >= 60 else '不及格'
""" 这个代码和前面的四个代码一个意思 """
while循环
一般格式
break 从大循环里面跳出来
continue 跳到程序的头部
pass 占位
else
x = 'youpinketang'
while x:
print(x,end=' ')
x = x[1:]
""" 越打越少 """
a,b = 0,10
while a < b:
print(a)
a += 1
""" 打印0123456789 """
x = 10
while x:
x -= 1
if x %2 != 0:
continue
print(x,end=' ')
""" %取余 8 6 4 2 0 """
while True:
name = input('请输入姓名:')
if name == 'stop':
break
age = input('请输入年龄:')
print('您好:{}, 您的年龄是:{}, 欢迎学习'.format(name,age))
print('循环结束')
for x in range(1,5):
if x == 6:
print('有这个数',x)
break
else:
print('未找到')
for循环: for x in 目标序列:
range()
enumerate()
for x in [1,2,3,4]:
print(x, end=' ')
sum = 0
for x in [1,2,3,4,5]:
for x in (1,2,3,4,5):
sun += x
print(sum)
""" 15 累加列表和元组都可以 """
emp = {
'name' : 'Tom',
'department':'technoloty',
'job' : 'development',
'Salary':9000.00
}
for key in emp:
print(key)
"""打印的键"""
print('{} => {}'.format(key, emp[key]))
""" department => technoloty
job => development
Salary => 9000.0 """
for value in emp.values()
print(value)
""" values()不是列表 """
"""找出两个列表中有没有交集"""
s1 = 'abcd.com'
s2 = 'efgh.com'
result = []
for x in s1:
if x in s2:
result.append(x)
print(result)
""" ['c','o','m'] """
l = [x for in s1 if x in s2]
print(l)
""" ['c','o','m'] 找到交集"""
for x in range(1,100,2):
print(x)
""" 打印1到99,并不包括100自己,100是个终止符 ,2是步长 """
s = 'youpinketang'
for (idx,item) in enumerate(s):
print('{}) {}'.format(idx+1,item) )
"""
1) y
2) o
3) u
4) p
5) i
6) n
7) k
8) e
9) t
10) a
11) n
12) g
"""