day2_数据运算和类型、列表、元组、字典

最常用的两个python标准库

sys(打印环境变量)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan

import sys

print(sys.path)

输出
['D:\\[4]python\\untitled\\day2', 'D:\\[4]python\\untitled', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages']
os(与系统命令相关的)
import os

cmd_res = os.popen("dir").read()   打印当前的目录
print(cmd_res)
os.mkdir("new dir")
输出为创建了一个名为new dir的目录

.pyc是什么

1Python到底是什么

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java

java hello

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。

2简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

数据运算

算数运算
这里写图片描述

比较运算
这里写图片描述
赋值运算
这里写图片描述

逻辑运算
这里写图片描述

成员运算
这里写图片描述
身份运算
这里写图片描述
位运算(重要)
这里写图片描述
例子

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan

a = 50 # 50 = 00110010
b = 8  # 8 = 00001000
c = 0

c = a & b; # 00000000
print (c)
c = a | b; # 00111010
print(c)
c = a ^ b; # 00111010 相同为0,不同为1
print(c)
c = ~a; #11001101 256-51
print(c)
c = a << 2; #11001000
print(c) 
c = a >> 2; #00001100
print(c)
输出
0
58
58
-51
200
12

bytes类型

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。bytes和str的转换。

这里写图片描述

例子:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan


msg = "爱老虎油"
print(msg)
print(msg.encode(encoding='utf-8'))
print(msg.encode(encoding='utf-8').decode())
输出
爱老虎油
b'\xe7\x88\xb1\xe8\x80\x81\xe8\x99\x8e\xe6\xb2\xb9'
爱老虎油

列表

列表的定义

names = ["wangchao","mahan","zhanglong","zhaohu"]

访问列表元素

print(names[0]) #取第一个
输出
wangchao
print(names[-1]) #取最后一个
输出
zhaohu

切片:取多个元素

names = ["wangchao","mahan","zhanglong","zhaohu","zhangsan","lisi"]
print(names[1:4])#取第二到第五个元素
['mahan', 'zhanglong', 'zhaohu']
print(names[1:-1])#取第二到倒数第二个元素,没有-1最后一个。
['mahan', 'zhanglong', 'zhaohu', 'zhangsan']
print(names[:3])#取前三个,0可以不写
['wangchao', 'mahan', 'zhanglong']
print(names[2:])#从第三个到最后一个,不能写-1
['zhanglong', 'zhaohu', 'zhangsan', 'lisi']
print(names[::2])#从0开始到结束,每隔2个取一下
['wangchao', 'zhanglong', 'zhangsan']

追加

names.append("我是小弟")
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']

插入

names.insert(2,"强行插入")#在第三个元素前插入
['wangchao', 'mahan', '强行插入', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']

修改

names[2]="换个新人"#第三个元素修改
['wangchao', 'mahan', '换个新人', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']

删除

del names[2]#删除第三个
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']
names.remove("lisi")#删除指定元素
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', '我是小弟']
names.pop()#删除最后一个
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan']

扩展

print(names)
b = [1,2,3]
names.extend(b)
print(names)     #扩展列表b进去
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟', 1, 2, 3]

拷贝

names = ["wangchao","mahan","zhanglong","zhaohu","zhangsan",["alex","jack"],"lisi"]
names2 = names.copy()#拷贝
print(names)
print(names2)
names[2]="马汉"
names[5][0]="李杰"
print(names)
print(names2)
输出
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
['wangchao', 'mahan', '马汉', 'zhaohu', 'zhangsan', ['李杰', 'jack'], 'lisi']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['李杰', 'jack'], 'lisi']
#注释说明:names2的['李杰', 'jack']随着小列表里头的内存地址发生了变化。

深拷贝

import copy
names2 = copy.deepcopy(names)
print(names)
print(names2)
names[2]="马汉"
names[5][0]="李杰"
print(names)
print(names2)
输出
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
['wangchao', 'mahan', '马汉', 'zhaohu', 'zhangsan', ['李杰', 'jack'], 'lisi']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
#深copy就不会出现这样的问题

元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

names = ("wangchao","mahan","zhanglong","zhaohu","mahan","zhangsan")
print(names.index("mahan")) #获取第一个同名的下标
print(names.count("mahan")) #统计个数

变量的修改

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan

name = "alex"
print(name.capitalize()) #首字母大写

names = "my name is alex"
print(names.count("a"))#统计有几个
print(names.center(50,"-"))#把变量names按照50个字节居中
print(names.endswith("ex"))#判断是否有ex这个字符串
print(names[names.find("is")])#在变量中找到is打印首字母

print('+'.join(['1','2','3']))#1+2+3

p = str.maketrans("abcdef","123456")
print("alex li".translate(p))#如果"alex li"里中有abcdef,就把a替换成1,把b替换成2,...没有就不替换

print('1+2+3+4'.split('+'))#按+分开取出里头的元素
输出
Alex
2
-----------------my name is alex------------------
True
i
1+2+3
1l5x li
['1', '2', '3', '4']

字典

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
格式

info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}

字典的特性:
1、元素是无序的;
2、key是唯一的,字典天生去重

增加:

info['stu1104']='teacher li'
{'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
#或者
info.setdefault

修改

info['stu1101']='李老师'
{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}

删除

字典{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
info.pop('stu1101') #标准删除
{'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
del info['stu1103'] #也是一种删除方法
{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1104': 'teacher li'}
info.popitem() #随机删除
{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}

获取

print(info)

print("stu1101" in info) #标准用法
print(info.get("stu1103"))#获取
print(info['stu1103'])#也是获取
# print(info['stu1105']) #获取一个没有的元素会报错
print(info.get("stu1105"))#用get获取,不会报错,返回none
#输出
{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
True
XiaoZe Maliya
XiaoZe Maliya
None

多级字典嵌套

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan



av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢,"]
    }
}



av_catalog["大陆"]["1024"][1] += "用爬虫"
print(av_catalog["大陆"]["1024"])
#输出
['全部免费,真好,好人一生平安', '服务器在国外,慢,用爬虫']

循环dict

for key in info: #方法1
    print(key,info[key])

for k,v in info.items(): #方法2,会先把dict转成list,数据量大时莫用
    print(k,v)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值