day02 Python 的模块,运算,数据类型以及方法
初识pyhton的模块:
什么是模块:
我的理解就是实现一个功能的函数,把它封装起来,在你需要使用的时候直接调用即可,我的印象里类似于shell 的单独函数脚本。
python 的模块分为标准的和第三方的,标准的直接使用即可,第三方需要安装,可以使用pip 来安装模块,这个我们以后再讲。
模块都在哪里呢?
其实模块也是一个文件,我们通过搜索发现自带的模块都在python安装目录的base/lib下,第三方的模块则是在base/lib/site-packages
如何使用模块:
我们在使用模块的某个功能时要先导入模块,类似于shell 的 source 一个函数脚本,我们使用import 来导入模块。
注意,我们在编写python 程序时的名字一定要注意不要和模块名称相同,因为python 会首先查找当前目录下的模块名称并使用,如果没有才会去找python变量路径里的模块。
几个标准模块的简单使用:
sys 模块:
import sys
print("This is ",sys.path)
当我们需要查看文件的相对路径时,可使用下面的命令:
import sys
print("This is ",sys.argv)
那当我们需要获取运行脚本时传入的参数时,使用下面的命令:
import sys
print("This is ",sys.argv[])
os 模块:
os 模块可以执行系统命令,在windows 下执行cmd 命令 在linux 下执行shell 命令,
import os
cmd_res = os.system("ls -l")
print("This is >",cmd_res)
我们可以打印结果的内存地址:
即执行命令又保存结果,我们使用os.popen("ls -l").read()
import os
cmd_res = os.popen("ls -l").read()
print("This is >",cmd_res)
使用os 模块来创建目录:
import os
os.mkdir("new_dir")
当然我们也可以自己写模块,使用自己写的模块:
另外说一个题外话,大家都说python 是解释型语言,其实python 是先编译后解释型语言。。
不信的话你会发现py执行目录下会有一个pyc 文件,他就是一个编译后的文件,当然他完成的工作也就只有差不多10%吧,嗯,有总比没有好 哈哈。
python在执行的时候会先判断pyc文件是否存在,然后判断pyc文件时间和源代码时间的变化,对比下如果代码没变就使用pyc,如果变化了就会重新编译。
python 3 中改变了一点,不再有pyc文件但是有一个目录是存放这个的。
模块就暂时说到这里,下面我们说下python 的数据类型:
1 数字 分为
2 字符串
这个并没有什么可说的。。
3 布尔值
两种结果 True False 1 就是True 0 就是False
下面说下python 的运算:
+ - * / 是我们最常用的,下面两个我们也会用到,所有不要忘记哦
name ="yang"
type(name) is str
说一个比较叼的判断方法,叫做三元运算:
a,b,c = 1,3,5
d = a if a > b else c
结果是d = 5
一个python3 比较大的变化是在python3 中 bytes 和字符串是两个类型
字符串和二进制数据转换的方法:
1 encode
把字符串转换为二进制
2 decode
把二进制还原为字符串
下面开始我们最常用的数据类型:
#定义一个列表
names = ["Shenyang","Wanglu","Shenjiangming"]
#取出Wanglu
print(names[1])
#取出两个
print(names[1],names[2])
#取多个 顾头不顾尾 #这个动作就叫切片
print(names[1:3])
#取最后一个值,只需使用 -1 即可
print(names[-1])
: 左边的值是开始 右边的是结尾, 顺序是从左往右取
#取倒数两位
print(names[-2:])
#前面如果是0也可以省略掉
print(names[:3]
增:
#列表里添加值:
#往列表里追加
names.append("Shenjiarui")
#往特定位置插入数据
names.insert(1,"Shenhuigang")
改:
#列表里替换某值:
names[2]="Shenjiarui"
删:
#列表里删除某值:
1
names.remove("Shenyang")
2
del names[0]
效果和
names.pop(0)
一样
#删掉最后一个:
names.pop()
其他操作:
#查找某个值得位置:
print(names.index("Shenjiangming"))
#查找并且打印出此值:
print(names[names.index("Shenjiangming")])
#统计列表中重复值得个数:
print(names.count("Wanglu"))
#清空整个列表
names.clear()
#反转整个列表:
names.reverse()
#排序: 顺序 特殊字符,数字,大写字母,小写字母
names.sort()
#扩展别的列表到本列表:
name2 = [1,2,3]
names.extend(name2)
#删除变量:
del name2
#列表里可以包含列表 这里显示这个小列表,实际上是列表里包含的一个内存地址,这个小列表变,这个列表里的也会跟着变
names = ["Shenyang","Wanglu",["This","at"],"Shenjiangming"]
print(names)
从这里引申出一个深拷贝和浅拷贝,例如:
#列表copy 浅copy,只copy第一层,如果还有第二层, copy的列表里的列表的是内存地址,小列表变这里也变
names = ["Shenyang","Wanglu",["This","at"],"Shenjiangming"]
name2 = names.copy()
names[2][0] = "He"
names[1] = "Shenjiarui"
print(names)
print(name2)
#如果想完整的copy 一份列表,真的完全的copy一份
import copy
names = ["Shenyang","Wanglu",["This","at"],"Shenjiangming"]
name2 = copy.deepcopy(names) # 这种需求不多,因为会多占用一份内存
names[2][0] = "He"
names[1] = "Shenjiarui"
print(names)
print(name2)
列表的变量 指向的是内存地址,第一个变第二个也会跟着变,这里要和字符串,数字变量不同
#循环列表:
for i in names:
print(i) #步长切片,跳着切
print(names[0:-1:2])
#即
print(names[::2])
names = ["Shenyang","Wanglu",["This","at"],"Shenjiangming"]
print(names[0:-1:2])
print(names[::2])
#打印每一个:
print(names[:])
列表基本说完,下面说元组:
#元组 == 只读列表 ,只可以查,不可以改变。
#只有两个方法
1 count
2 index
names = ('Wanglu','Shenyang','Shenjiarui')
names.index("Wanglu") #用途:
#用于不想被改的数据,例如数据库连接信息等
说了这么多我们是不是应该练练手了,大家燥起来!
会用到没学的东西,但不要紧,下面就开始学了,我们先放代码:
#!/usr/bin/env python3
# Auth: Shen Yang shop_list = [
["Mac",5888],
["Iphone",5666],
["S7 Edge",6888],
["Bike",800],
["Ticke",60],
["Mike",50],
] shop_card = []
get_money = input("Please input your money: ")
if get_money.isdigit():
get_money = int(get_money)
while True:
print("ID\tProduct\t\tMoney")
for index,item in enumerate(shop_list):
print(index,"\t",item[0],"\t\t",item[1])
print("press q to exit")
get_want_buy = input("Input the number you want to buy: ")
if get_want_buy == "q":
print("-------------shopping list----------------")
for i in shop_card:
print(i)
print("your money have",get_money)
break
if get_want_buy.isdigit():
get_want_buy = int(get_want_buy)
if get_want_buy < len(shop_list) and get_want_buy >= 0:
p_item = shop_list[get_want_buy]
if p_item[1] <= get_money:
print("Ok,you buy ",p_item[0])
shop_card.append(p_item[0])
get_money -= p_item[1]
else:
print("your money is not enough,please chose other product!")
continue
else:
print("Warng number,please retry!")
continue
else:
print("Warng number,please retry!")
continue
else:
print("Invaid input")
exit()
上面用到了 isdigit enumerate len 这三个我们没接触过的,其实他俩很简单
isdigit 判断是不是数字
enumerate 找出list 的下标(即index)
len 是计算list 中key的总数
好了,下面开始 正式说下这些奇怪的东东,
这些奇怪的东东其实就是变量的操作方法,都是内置的哦:
你会发现有好多的操作,下面请看我一一道来。。。
1 使变量首字母大写
name = "yang"
print(name.capitalize())
2 统计变量中指定项的重复次数:
name = "my name is yang"
#print(name.capitalize())
print(name.count("m"))
3 如果变量不够指定的字符串数,就用指定的字符串来添加,并把变量置于中间:
name = "my name is yang"
#print(name.capitalize())
#print(name.count("m"))
print(name.center(50,"+"))
4 判断变量是否以指定的结尾:
name = "my name is yang"
print(name.endswith("g"))
5 指定Tab的空格数:
name = "my name is\tyang"
print(name.expandtabs(tabsize=50))
6 找出指定字符串在变量中的index,可以用来字符串切片,默认从左往右找第一个,也可以指定从右开始:
name = "Hi,Yang is a boy"
print(name.rfind("a"))
print("------------")
print(name.find("a"))
7 格式化,这个我们比较常用了:
name = "my name is {_name}"
print(name.format(_name="yang"))
8 判断变量名字是否合法:
print("1A".isidentifier())
9 判断变量是不是小写:
name = "yang"
print(name.islower())
10 是不是大写:
name = "yang"
print(name.isupper())
11 变量是不是只有数字
name = "yang"
print(name.isdigit())
12 变量是不是空格:
name = " "
print(name.isspace())
13 判断变量是不是首字母大写:
name = "Ynag"
print(name.istitle())
14 判断变量是不是可以打印: 类似 tty drive 文件不可以打印 基本用不到
name = "Ynag"
print(name.isprintable())
15 把列表变为字符串,并指定分隔符:
print(" + ".join(['a','b','c','d','e']))
16 还是和center 一样 只不过这两个是不够指定的字数添加到左边或者右边:
name = "Yang"
print(name.rjust(20,"+"))
print(name.ljust(10,"+"))
17 把变量中所有的大写变小写,小写变大写,还有直接所有的小写变大写,大写变小写。
name = "Hi,Yang is a boy"
print(name.lower())
print("-----------")
print(name.upper())
print("-----------")
print(name.swapcase())
18 以指定字符串来截取变量,也可以只截取左边或者右边,如果不指定,默认会去掉空格和换行符
name = "88888888Yang888888"
print(name.strip(""))
print("-----------")
print(name.lstrip(""))
print("-----------")
print(name.rstrip(""))
19 指定对应关系来加密变量:
p = str.maketrans("abcdefghi","")
name = "Yang"
print(name.translate(p))
20 替换变量中指定的字符串:
name = "Yang"
print(name.replace("Y","H",1))
21 把字符串变量按照指定分隔符生成列表:
name = "Hi,Yang is a boy"
print(name.split(" "))
print("--------------")
print(name.split(","))
22 把变量变为驼峰写法:
name = "Hi,Yang is a boy"
print(name.title())
23 判断变量是否足够指定的长度,如果不够使用指定的字符串补齐:
name = "Hi,Yang is a boy"
print(name.zfill(20))
特么方法这么多,写的我都手抽筋了,我先去尿个尿。。
说完方法,下面说一个很重要的变量类型: 字典
什么是字典:
字典就是一种Key Value 的变量,个人认为类似于Redis Memcached 这一类的内存型kv数据库,可以通过key 来查找对应的值(value)。
下面是一个简单的例子:
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : "girl"
}
print("Hi man ,your name is ",man_info["name"],"you like",man_info["like"])
下面讲下字典的增删改查:
查:
直接查,但是如果没有这个key 会报错:
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : "girl"
}
print(man_info["sex"])
print("--------------")
print(man_info["job"])
报错返回提示找不到这个key,所有我建议大家用get 方法,如果没有这个key 也不会错误,只会返回None:
但是要注意哦,直接取值用[] 但是使用方法就要() 这里我犯错了。。。
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : "girl"
}
print(man_info["sex"])
print("--------------")
print(man_info.get("job"))
改和增:
我们可以直接更改key 的值,如果这个key不存在,就会创建这个key并赋予值
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : "girl"
}
print(man_info["name"])
man_info["name"] = "laowang"
man_info["job"] = "devops"
print("--------------")
print(man_info)
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : "girl"
}
print(man_info)
print("----------")
del man_info["like"]
print(man_info)
man_info.pop("old")
print("----------")
print(man_info)
字典的其他操作:
字典可以层层嵌套,可以嵌套不同的类型,例如嵌套 list
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : ["girl","boy","car","digital"]
}
print(man_info["like"][2])
我们可以只打印字典的值 或者只打印字典的key
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : ["girl","boy","car","digital"]
}
#打印字典全部信息
print(man_info)
#只打印字典的key
print(man_info.keys())
#只打印字典的value
print(man_info.values())
改变字典里的列表的值,如果列表中没有这个index 会报错:
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : ["girl","boy","car","digital"]
}
print(man_info)
man_info["like"][3] = "mobile"
print(man_info) man_info["like"][4] = "mobile"
使用setdefault 来获取值,setdefault会先取这个值,如果有就取出来,如果没有,就创建一个:
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : ["girl","boy","car","digital"]
}
print(man_info.setdefault("sex","girl"))
print("-------------------")
print(man_info.setdefault("job",{"What":["fuck","off"]}))
print(man_info)
合并另一个字典到一个字典中:
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : ["girl","boy","car","digital"]
}
print(man_info)
print("--------------------")
other_inof = {"job" : "devops"}
man_info.update(other_inof)
print(man_info)
把一个字典转换为列表:
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : ["girl","boy","car","digital"]
}
print(man_info)
print("--------------------")
print(man_info.items())
使用dict.fromkeys来初始化一个新的字典,在用fromkeys 创建的时候,创建多层会有一个内存指向,修改一个就修改全部:
new_dic = dict.fromkeys([1,2,3],"yang")
print(new_dic)
print("-------------------")
new_dic = dict.fromkeys([1,2,3],[1,{"name":"yang"},3])
print(new_dic)
new_dic[2][1]["name"] = "Jack Chen"
print(new_dic)
字典的循环:
man_info = {
"name" : "xiaoming",
"sex" : "boy",
"old" : "",
"like" : ["girl","boy","car","digital"]
} for i in man_info:
print("This is key :",i," And this is value:",man_info[i])
关于 dic 还没完,待续。。。
day02 Python 的模块,运算,数据类型以及方法的更多相关文章
- Python安装模块的几种方法
一.方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二.方法2: 多文件模块,带setup.py 下载模块包,进行解压,进入模块文件夹,执行:python setup.py i ...
- python linecache模块读取文件的方法
转自: python linecache模块读取文件 在Python中,有个好用的模块linecache,该模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行. l ...
- python的list()列表数据类型的方法详解
一.列表 列表的特征是中括号括起来的,逗号分隔每个元素,列表中的元素可以是数字或者字符串.列表.布尔值......等等所有类型都能放到列表里面,列表里面可以嵌套列表,可以无限嵌套 字符串的特征是双引号 ...
- 【python测试开发栈】—帮你总结Python os模块高频使用的方法
Python中的os模块是主要和系统操作相关的模块,在平时的工作中会经常用到,花时间整理了os模块的高频使用方法,同时整理出使用时需要注意的点.归纳来讲,os模块的方法可以分为:目录操作.文件操作.路 ...
- Python导入模块的几种方法
Python 模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代 ...
- Python入门-深入了解数据类型以及方法
写在开始:每一种数据类型,有对应一种功能,面对不同的问题,使用不同类型. 1.全部数据类型 1.2数值型:解决数字的计算问题 #基础的计算,求除结果,求商,求余数 print(10 / 3) prin ...
- Python OS模块中的fork方法实现多进程
import os '''使用OS模块中的fork方式实现多进程''' '''fork方法返回两次,分别在父进程和子进程中返回,子进程中永远返回0,父进程返回的是子进程的is''' if __name ...
- python requests模块的两个方法content和text
requests模块下有两个获取内容的方法,很奇怪,都是获取请求后内容的方法,有什么区别呢?? 一.区别 content:返回bytes类型的数据也就是二进制数据 text:返回的就是纯文本(Unic ...
- Python 导入模块的两种方法:import xxx 和from...import xxx
import 方式导入模块 import tool.getsum.add # 导入模块,优先会从启动文件的当前目录开始寻找 # 如果找到,就使用 # 如果找不到,会在系统模块存放目录去 tool.ge ...
随机推荐
- 序列化流与反序列化流,打印流,工具类commons-IO
1序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流 特 ...
- Java基础(Scanner、Random、流程控制语句)
第3天 Java基础语法 今日内容介绍 u 引用数据数据类型(Scanner.Random) u 流程控制语句(if.for.while.dowhile.break.continue) 第1章 引用数 ...
- ABAP EXCEPTION
CX_ROOT | |--CX_STATIC_CHECK | |--CX_DYNAMIC_CHECK | | | |--CX_SY_ARITHMETIC_ERROR //运算 '&OPERAT ...
- Git入门学习总结
用了两天时间看完廖雪峰老师的git教程(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0 ...
- linux mount命令详解(iso文件挂载)
挂载命令: mount [-t vfstype] [-o options] device dir mount 是挂载命令 -t + 类型 -o + 属性 device iso的文件 dir 挂 ...
- Android RecyclerView使用GridLayoutManager间距设置
使用RecyclerView设置间距,需要重写RecyclerView.ItemDecoration这个类.有如下的效果图需要实现,间距只有中间的格子和底部的格式之间有. Paste_Image. ...
- Python+selenium之测试报告(1)
一.下载HTMLTestRunner.py HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告.HTMLTestRunne ...
- HDU 5489 Removed Interval (LIS,变形)
题意: 给出一个n个元素的序列,要求从中删除任一段长度为L的连续子序列,问删除后的LIS是多少?(n<=10w, L<=n ,元素可能为负) 思路: 如果会O(nlogn)求普通LIS的算 ...
- Codeforces 786E. ALT 最小割+倍增
E. ALT http://codeforces.com/problemset/problem/786/E 题意: 给出一棵 n 个节点的树与 m 个工人.每个工人有一条上下班路线(简单路径),一个工 ...
- Update主循环的实现原理
从写一段程序,到写一个app,写一个游戏,到底其中有什么不同呢?一段程序的执行时间很短,一个应用的执行时间很长,仅此而已.游戏中存在一个帧的概念. 这个概念大家都知道,类比的话,它就是电影胶卷的格.一 ...