Python学习-初学入门2
1 模块介绍
标准库和第三方模块
(1) 标准库
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
print(sys.path)
"""
'/Users/develop/Documents/Python_study/s14/day2',
'/Users/develop/Documents/Python_study/s14',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
'/Users/develop/Documents/Python_study/s14/venv/lib/python3.7/site-packages',
'/Users/develop/Documents/Python_study/s14/venv/lib/python3.7/site-packages/setuptools-40.8.0-py3.7.egg',
'/Users/develop/Documents/Python_study/s14/venv/lib/python3.7/site-packages/pip-19.0.3-py3.7.egg']
"""
python的标准库一般都存在/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7中例如socket.py网络相关,re模块是正则表达式
print(sys.argv[2])在终端输入develop$ python3 文件名.py 1 2 3会输出结果2
'''
输入模块.py 1 2 3
会打印出2
zzhdeMacBook-Pro:day2 develop$ python3 模块.py 1 2 3
['/Users/develop/Documents/Python_study/s14/day2', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']
2
'''
os.mkdir("new")会在当前目录创建一个new的文件夹
(2) 第三方模块
'''
#引用第三方 先从当前目录下选择
# 1.放在/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7中变为自己写的模块
# 2.添加路径
'''
例如:在当前目录创建了一个文件guess_age.py复制一份放于/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7
import guess_age.py#直接会读取guess_age.py里面的程序
'''
guess_age:50
think bigger!
guess_age:80
think smaller...
guess_age:60
think smaller...
you have tried too many times...fuck off
'''
二 pyc
python是解释性语言,但是生成的pyc是干嘛的呢,c应该是complied的缩写才对啊
计算机不能够识别高级语言,所以通过运行一个高级语言时候需要翻译为计算机识别的语言
在运行python的过程跟Jave一样先编译后解释。python跟Java是基于虚拟机的语言
pyc文件就是编译器真正编译的结果
过程如下:
python运行时候,编译结果会存放在内存的PyCodeObject中,当python运行结束时,pyhton
编译器会将PyCodeObject写回到pyc中。
当python程序第二次运行时,程序去硬盘中寻找pyc文件,如果找到直接载入,否则重复以上过程(第一次没找到就重复)
如果pyc已经存在,修改了源代码,怎么办。是从更新时间来判断,是否重新编译生成pyc
例如import guess_age之后会在/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7'/__pycache__生成guess_age.cpython-37.pyc
三 字符串
不能修改,换成大小写是重新生成一个覆盖了原来的。
name = "my name is Jerry"
print("-----语法----")
print("capitalize()")
print(name.capitalize()) #首字母大写其他都会变小写 结果:My name is jerry
print("count")
print(name.count("e")) #e 出现的次数
print("center")
print(name.center(50,"*"))# 总共打印50个字符 不够的把name放中间,两边填充 *:*****************my name is Jerry*****************
print("endswith")
print(name.endswith("rry")) #判断是否以rry结尾 返回True
print("expandtabs()")
name1 = "my \tname is Jerry"
print(name1.expandtabs(tabsize=10)) #字符串有tab的时候,把tab转为多少个空格。结果:my name is Jerry
print("find")
print(name.find("is"))#返回下标 8
print(name[name.find("is"):10])#跟list类似可以切片。结果:is
print("fomat")
name2 = "my name is {name} and i am {age}"
print(name2.format(name="Jerry",age=25))
print(name2.format_map({"name":"Jerry","age":25}))#字典的形式
print("index")
print(name2.index("m"))#从左往右寻找第一个符合条件的结果为0
print("isalnum")#是不是阿拉伯数字(英文字符加0-9数字)
print("isalpha")#是否纯英文字符
print("isdigit是否整数")
print("isidentifier是不是合法的变量名")
print("islower是不是小写")
print("isnumeric是否为数字")
print("33.3".isnumeric())#只有数字
print("33.3".isdigit())#常用
print("isspaces是否为空格")
print("istitle字符中每个是否为开头大写")
print("isupper是否所有为大写")
print("join")
name4 = "my name is Jerry"
print(name4.join(["1","2","3","4"])) #1my name is Jerry2my name is Jerry3my name is Jerry4
print("+".join(["1","2","3"])) #1+2+3
print("ljust")
print(name4.ljust(50 ,"*"))#总共输出50个字符不足的话后面不* 与rjust相反
print("lower")#把大写变为小写
print("upper")#把小写变为大写
print("lstrip")#strip会去掉两边空格/换行 lstrip是去掉左边 rstrip是去掉右边
print("maketrans把对应的字符互相交换,相同的对应最后一个")
p = str.maketrans("jergg","12345")
print("jergy".translate(p))
print("replace替换 替换默认全部可传替换个数")
print("Jerrry".replace("r","R",2))
print("rfind从左找到最后面的值的下标")
print("Jerry".rfind("r"))
print("split按什么截取,默认是空格")
print("Jerry is".split())
print("1+2+3+4".split("+"))
print("splitlines按换行截取")
print("1+2\n+3+4".splitlines())
print("startswith按什么开始")
print("swapcase大小写互换")
print("Jerry".swapcase())
print("title每个字符的首字母变大写")
print("my name is".title())
print("zfill")
print("Jerry".zfill(50))#000000000000000000000000000000000000000000000Jerry
四 列表
import copy
print("-----列表操作------")
names = ["ZhangSan","LiSi","WangWu","LaoLiu"]
print(names[1:])#['LiSi', 'WangWu', 'LaoLiu']
print(names[1:3])#['LiSi', 'WangWu']
print(names[-1])#LaoLiu最后一个
print(names[-3:])#从倒数第三个开始
print("添加")
'''
append在后面添加
insert在指定位置添加
'''
names.append("Jerry")
names.insert(1,'Tom')
print(names)
print("修改")
names[1] = "Jack"
print(names)
print("删除")
'''
remove直接删除列表里面的值
del names[index]删除相应的位置
pop(index) 删除相应的位置 默认删除最后一个
'''
names.remove("Jack")
print(names)
names.pop(-1)
print(names)
print("查询位置")
print(names.index("LaoLiu")) #3
# print("clear")
# names.clear() #删除整个列表
# print(names)
print("count查询某个值在列表的次数")
print(names.count("LaoLiu"))
print("reverse列表反转")
names.reverse()
print(names)
print("")
print("sort排序")
names.sort()
print(names)
print("extend合并")
name2 = [1,2,3,4,5,6]
names.extend(name2)
del name2 #删除列表
print(names)
# print(name2)
print("----copy-----浅复制跟深层复制")
names3 = ["3ZhangSan","5LiSi",["Jerry","Tom"],"1WangWu","4LaoLiu"]
name5 = names3 #直接赋值 分配了同一个内存 修改其中一个都会改变
name4 = names3.copy()#name4 = copy.copy(names3)一样效果 只是第一层拷贝
name6 = copy.deepcopy(names3) #深拷贝 完全独立
print(names3)
print(name4)
print(name5)
print(name6)
print("----------")
names3[1] = "LiSi"
names3[2][0] = "Jerry1"
print(names3)
print(name4)
print(name5)
print(name6)
'''
这就是浅copy,只copy第一层。["Jerry","Tom"]里面copy的是内存地址,所有改变第二次里面数据都会变化
1 a = copy.copy(names3)
2 b = names3[:]
3 c =list(names3) 工厂函数
这三种方式一样,都是浅拷贝
'''
print("浅拷贝的使用 老公老婆的共同财产")
person = ["name",["saveing",100]]
p1 = person[:]
p2 = person[:]
p1[0] = "Jerry"
p2[0] = "Tom"
p1[1][1] = 50
print(p1)
print(p2)
print('')
print("深层复制----name6") #name6 = copy.deepcopy(names3) #深拷贝 完全独立
print("步长切片")
print(names3[::2])#隔开2个打印
print(names3[0:-1:2])#与上相比 遵循顾头不顾尾
print("")
print("for 循环 ")
for key in names3:
print(key)
五 元组
元祖跟列表差不多,切片等操作都一样,唯一是不能变,可以说了不可变的列表。所以只有count()/index()这两个方法。
使用元祖的时候注意储存的值不可变的数据,程序用它来存储不可变的数据
count(参数)查找有参数在列表出现次数
index(参数)返回参数在列表的下标
六 字典
print("字典是无序的,因此没有字典的下标的说法")
dict1 = {
"num0001":"Jerry",
"num0002":"Tom",
"num0003":"Json",
"num0004":"Jack",
}
print("查找")
print(dict1["num0001"])#通过key寻找值
print("增加")
dict1["num0005"] = "string"
print(dict1)
print("修改")
dict1["num0001"] = "老师"
print(dict1)
print("删除")
del dict1["num0002"]
print(dict1)
print("pop必须写删掉谁")
print(dict1.pop("num0005"))
print(dict1)
print("popitem随机删掉")
print("")
print("查找的其他方法")
dict2 = {
"num0001":"Jerry",
"num0002":"Tom",
"num0003":"Json",
"num0004":"Jack",
}
print("直接查找dict[]里面填写key,要是找不到key会报错")
# value = dict2["num0006"] KeyError: 'num0006'
print("通过get可以解决这个问题")
value = dict2.get("num0006")#如果key找不到会返回None,而不会报错
print(value)
print("num0005" in dict2) #表示判断num0003是不是在dict2里面.python2.x中用dict2.has_key()
print(dict2)
print("多级字典的嵌套")
dict3 = {
"num0001":"Jerry",
"num0002":"Tom",
"num0003":"Json",
"num0004":"Jack",
}
b = {
"num0001":"Jerry_new",
1:2,
3:5
}
print("update()合并字典如果有相同的key的话进行修改")
dict3.update(b)
print(dict3)
print("items()把字典转为了列表")
print(dict3.items())
print("fromkeys创建字典并初始化 test1是他们共享的数据")
dict4 = dict.fromkeys([6,7,8],"test1")
print(dict4)
dict5 = dict.fromkeys([6,7,8],[1,{"name":"Jerry"}])
print(dict5)
dict5[6][1]["name"] = "Json"
print(dict5)
print("字典的循环")
dict6 = {
"num0001":"Jerry",
"num0002":"Tom",
"num0003":"Json",
"num0004":"Jack",
}
#高效也最建议使用
for i in dict6:
print(i,dict6[i])
print("--------------")
#dict6.items()是先转换为列表,效率低
for k,v in dict6.items():
print(k,v)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Authon:Jerry Z dict1 = { "num0001":"Jerry", "num0002":"Tom", "num0003":"Json", "num0004":"Jack", } print(dict1["num0001"]) dict1["num0005"] = "Jackson" print(dict1) dict1["num0005"] = "Jackson1" print(dict1) value = dict1.get("num0005") print(value)