Python零基础入门-学习笔记(DAY2)
一、 模块初识
模块又叫库,分两种,一种叫标准库,一种叫第三方库。标准库是指,不需要安装直接可以导入的库,比如getpass;第三方库是指必须要自己下载安装才能用的库,比如Django。
sys模块,os模块(两个标准库)
(一)sys模块1.sys.path:打印环境变量
import sys print(sys.path)#pass:打印环境变量
运行结果:
[‘C:\Users\ante\python\s14\day1’,
‘C:\Users\ante\python\s14’,
‘C:\pycharm\PyCharm 2019.1.1\helpers\pycharm_display’,
‘C:\python37\python37.zip’,
‘C:\python37\DLLs’,
‘C:\python37\lib’,
‘C:\python37’,
‘C:\Users\ante\python\s14\venv’,
‘C:\Users\ante\python\s14\venv\lib\site-packages’,
‘C:\Users\ante\python\s14\venv\lib\site-packages\setuptools-40.8.0-py3.7.egg’,
‘C:\Users\ante\python\s14\venv\lib\site-packages\pip-19.0.3-py3.7.egg’,
‘C:\pycharm\PyCharm 2019.1.1\helpers\pycharm_matplotlib_backend’]
(打印结果是一些路径,这就是Python的全局环境变量,Python在导入某个库,或者Python内部自己调用的时候,就到这些路径里去找。比如,想导入os模块,os模块必然保存在这些路径中的至少一个里,如果不存在,就报错说该模块没找到。总之,这个环境变量就是存那些模块,或者Python自己内部调用一些文件的地方。Python的标准库(比如os模块:os.py),一般会保存在:C:\python37\lib。我们自己安装的第三方库(比如Django)一般会保存在这里:‘C:\Users\ante\python\s14\venv\lib\site-packages’。)
注意:
自定义的模块名字不能跟导入的库名相同。
import 导入的sys,是想导入系统里自带的模块sys。但导入时寻找的路径是,先到当前目录下找,当前目录没有再去其他地方找,因此,如果当前目录下有一个名叫sys 的文件,就会读取该文件,当前目录下的sys文件没有path方法,因此可能会报错。
2.sys.argv:打印脚本的相对路径。
(但是在pycharm工具里打印出的是绝对路径)
import sys print(sys.argv)
运行结果:
[‘C:/Users/ante/python/s14/day1/sys_mod.py’]
os模块就是对操作系统进行操作。
介绍三个:
os.system(“dir”)
os.popen(“dif”).read()
os.mkdir(“new_dir”)
例1:
import os os.system("dir")#dir:打印当前目录下的文件
运行结果:
Directory of C:\Users\ante\python\s14\day1
04/25/2019 02:24 PM
.04/25/2019 02:24 PM …
04/24/2019 09:57 AM 936 day1��ҵ.py
04/17/2019 01:01 PM 218 guess.py
04/23/2019 03:00 PM 453 guess_for.py
04/23/2019 01:27 PM 465 guess_������.py
04/22/2019 08:05 PM 229 interaction.py
04/22/2019 08:09 PM 258 passwd.py
04/25/2019 02:24 PM 43 sys_mod.py
04/16/2019 04:50 PM 77 var.py
04/22/2019 08:50 PM 366 while.py
04/24/2019 12:32 PM pycache
9 File(s) 3,045 bytes
3 Dir(s) 50,127,319,040 bytes free
例2:
import os cmd_res = os.system("dir") print("--> ",cmd_res)
运行结果:
Directory of C:\Users\ante\python\s14\day1
04/25/2019 02:30 PM
.04/25/2019 02:30 PM …
04/24/2019 09:57 AM 936 day1��ҵ.py
04/17/2019 01:01 PM 218 guess.py
04/23/2019 03:00 PM 453 guess_for.py
04/23/2019 01:27 PM 465 guess_������.py
04/22/2019 08:05 PM 229 interaction.py
04/22/2019 08:09 PM 258 passwd.py
04/25/2019 02:30 PM 107 sys_mod.py
04/16/2019 04:50 PM 77 var.py
04/22/2019 08:50 PM 366 while.py
04/24/2019 12:32 PM pycache
9 File(s) 3,109 bytes
3 Dir(s) 49,848,487,936 bytes free
–> 0
(注意:最后打印出的结果是“0”。“0”是指命令执行成功了,非“0”表示命令执行失败。
os.system,一旦调用,这个命令就执行了,结果直接输出到屏幕上,输出后就没有了,并不是存给变量里。)
例3:如果就想把输出结果保存下来,用下面方法:
import os cmd_res = os.popen("dir") print("--> ",cmd_res)
运行结果:
–> <os._wrap_close object at 0x0000000002DF8518>
(这样打印的是一个内存的对象地址,这是一个小插曲,接下来才是正解…执行完上面结果时,可以理解为只是保存在内存的某个地方,需要加上.read,才能取出结果)
import os cmd_res = os.popen("dir").read() print("--> ",cmd_res)
运行结果:
Directory of C:\Users\ante\python\s14\day1
04/25/2019 04:24 PM
.04/25/2019 04:24 PM …
04/24/2019 09:57 AM 936 day1作业.py
04/17/2019 01:01 PM 218 guess.py
04/23/2019 03:00 PM 453 guess_for.py
04/23/2019 01:27 PM 465 guess_任性玩.py
04/22/2019 08:05 PM 229 interaction.py
04/22/2019 08:09 PM 258 passwd.py
04/25/2019 04:24 PM 131 sys_mod.py
04/16/2019 04:50 PM 77 var.py
04/22/2019 08:50 PM 366 while.py
04/24/2019 12:32 PM pycache
9 File(s) 3,133 bytes
3 Dir(s) 49,411,780,608 bytes free
例4:在当前目录下,创建一个目录
import os os.mkdir("new_dir")
运行结果:
(运行后,左侧当前目录出现黄色标记的新目录)
注意:
自己写出的模块如果想调用,在当前目录下任何模块都可以调用。但如果写的模块不存在当前目录下,放在其他位置,那么在当前目录下调用时会出错显示找不到该模块,这时如果想要调用的话,可以把模块复制粘贴到:'C:\Users\ante\python\s14\venv\lib\site-packages’路径下,就可以调用了。这就是前面所说的,系统在调用模块的时候,会首先在当前目录下找,找不到就会到环境变量中找。
如下图,login.py模块如果放到new_dir目录里时,在pyday1里调用不到login.py,这时可以把login.py文件放到“site-packages”里就可以调用了。
.pyc是什么?
上面例子中,在调用login.py模块时,在_pycache_文件夹中会多一个名为:login.cpython-35.pyc文件。
.pyc中的c,是compiled(编译)的缩写。那么,Python既然是解释型语言,为什么还要编译呢?
当我们在命令行中输入python helloworld.py时,其实是激活了Python的解释器,告诉解释器:你要开始工作了,可是在“解释”之前,其实执行的第一项工作和java一样,是编译。
例如java执行时:
javac helloworld.java
java helloworld
Python也一样,当我们执行Python helloworld.py时,他也这样执行了编译的过程,只是两步融合成一部,我们没有手动操作而已。
所以我们可以这样描述Python,Python是一门先编译后解释的语言。
简述Python的运行过程
在这里说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。当Python程序运行时,编译的结果是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到.pyc文件中。当程序第二次运行时,首先程序会在硬盘中寻找同名的.pyc文件,如果找到,则直接载入,否则就重复上面的过程。如果第二次执行前改了源代码,Python每次运行前,先检测有没有.pyc文件,然后检测.pyc文件更新时间,如果源代码的时间最新,代表源代码被改过,则重新编译一次。
.pyc文件里存的是一个预编译后的字节码文件,它还不是机器码,只是完成了15%的半成品。(java预编译完算半成品)
二、 数据类型初识
1.数字
整数,Python3里不分长整数(长整型)和整数(整型),全都是整型。Python2里分。
int(整型) 在32位机器上,整数的位数是32位,最大存+-2**32; 在64位机器上,整数的位数是64位,最大存+-2**64; long(长整型) 在Python3中不存在长整型概念。自从Python2,2起,如果整数发生溢出,Python会自动将整数转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果。 float(浮点型) 即带有小数的数字。 例如:3.12和52.3E4,E标记表示10的幂,在这里,52.3E4表示52.3*10的4次方
2.布尔值
真或假。 1或0。 True or False。 a = 0 if a:print('a') 运行结果: (什么都没有) a = 1 if a:print('a') 运行结果: 1
3.字符串
"hello world"
三、 三元运算
result = 值1 if 条件 else 值2
如果条件为真:result = 值1;
如果条件为假:result = 值2;
例:
a,b,c = 1,3,5
d = a if a>b else c
结果:
d = 5
四、 进制
二进制,01
八进制,01234567
十进制,0123456789
十六进制,0123456789ABCDEF
https://jingyan.baidu.com/album/47a29f24292608c0142399cb.html?picindex=1
注意:
16进制的表示法,用字母H后缀表示,比如BH就表示16进制数11;也可以用0X前缀表示,比如0X53就是16进制的53.直观表示法如下图。
二进制转十六进制例:
十六进制转二进制例:
五、 bytes类型
Python3最重要的新特性大概要算是对文本和二进制数据做了更为清晰的划分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python3不会以任意隐式的方式混用str和bytes,正式这使得两者的区分特别清晰。
string和bytes二者转换:
例:
1
msg = "我爱北京天安门" print(msg)
运行结果:
我爱北京天安门
2
msg = "我爱北京天安门" print(msg.encode())
运行结果:
b’\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8’
3
msg = "我爱北京天安门" print(msg.encode(encoding="utf-8")) print(msg.encode(encoding="utf-8").decode())
运行结果:
b’\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8’
我爱北京天安门
六、列表和元组操作
1.查。在列表中取一个值:
1.想取出列表中的“guohong”。
names = ["guohong","Ginni","liante","Jason fan"] print(names) print(names[0])##"0"是列表中从左到右第一位,即“guohong”
运行结果:
[‘guohong’, ‘Ginni’, ‘liante’, ‘Jason fan’]
guohong
2.想取出列表中的“liante”
names = ["guohong","Ginni","liante","Jason fan"] print(names) print(names[2])##"2"是列表中从左到右第三位,即“liante”
运行结果:
[‘guohong’, ‘Ginni’, ‘liante’, ‘Jason fan’]
liante
2.在列表中取两个值:
1.在列表中取出中间的“Ginni”和“liante”
names = ["guohong","Ginni","liante","Jason fan"] print(names) print(names[1:3])###切片。“顾头不顾尾,取1,不包括3”
运行结果:
[‘guohong’, ‘Ginni’, ‘liante’, ‘Jason fan’]
[‘Ginni’, ‘liante’]
2.取列表中最后一个值(已知列表长度的情况下)
names = ["guohong","Ginni","liante","Jason fan"] print(names) print(names[3])
运行结果:
[‘guohong’, ‘Ginni’, ‘liante’, ‘Jason fan’]
Jason fan
3.取列表中最后一个值(不知列表长度的情况下)
names = ["guohong","Ginni","liante","Jason fan"] print(names) print(names[-1])
运行结果:
[‘guohong’, ‘Ginni’, ‘liante’, ‘Jason fan’]
Jason fan
4.取列表中最后两个值
names = ["guohong","Ginni","liante","Jason fan"] print(names) print(names[-2:])
运行结果:
[‘guohong’, ‘Ginni’, ‘liante’, ‘Jason fan’]
[‘liante’, ‘Jason fan’]
5.在列表中追加一个人。(增)
names = ["guohong","Ginni","liante","Jason fan"] names.append("cuntian") print(names) print(names[-2:])
运行结果:
[‘guohong’, ‘Ginni’, ‘liante’, ‘Jason fan’, ‘cuntian’]
[‘Jason fan’, ‘cuntian’]####cuntian被追加到了列表最后一位
6.把fujiayu放在列表中第二个位置
names = ["guohong","Ginni","liante","Jason fan"] names.append("cuntian") names.insert(1,"fujiayu") print(names) print(names[-2:])
运行结果:
[‘guohong’, ‘fujiayu’, ‘Ginni’, ‘liante’, ‘Jason fan’, ‘cuntian’]
[‘Jason fan’, ‘cuntian’]
7.在列表:[‘guohong’, ‘fujiayu’, ‘Ginni’, ‘liante’, ‘Jason fan’, ‘cuntian’]中,把Ginni换成wuzhihui.(改)
names = ["guohong","Ginni","liante","Jason fan"] names.append("cuntian") names.insert(1,"fujiayu") names[2] = "wuzhihui" print(names)
运行结果:
[‘guohong’, ‘fujiayu’, ‘wuzhihui’, ‘liante’, ‘Jason fan’, ‘cuntian’]
8.在列表:[‘guohong’, ‘fujiayu’, ‘wuzhihui’, ‘liante’, ‘Jason fan’, ‘cuntian’]中,删除’fujiayu’(删)
方法1:
names = ["guohong","Ginni","liante","Jason fan"] names.append("cuntian") names.insert(1,"fujiayu") names[2] = "wuzhihui" print(names)
运行结果:
[‘guohong’, ‘wuzhihui’, ‘liante’, ‘Jason fan’, ‘cuntian’]
方法2:
names = ["guohong","Ginni","liante","Jason fan"] names.append("cuntian") names.insert(1,"fujiayu") names[2] = "wuzhihui" del names[1] print(names)
运行结果:
[‘guohong’, ‘wuzhihui’, ‘liante’, ‘Jason fan’, ‘cuntian’]
方法3:
names = ["guohong","Ginni","liante","Jason fan"] names.append("cuntian") names.insert(1,"fujiayu") names[2] = "wuzhihui" names.pop(1)###()里不写下标数字的话,默认是删除最后一个元素 print(names)
运行结果:
[‘guohong’, ‘wuzhihui’, ‘liante’, ‘Jason fan’, ‘cuntian’]
七、
八、
九、
十、
- 【零基础入门学习Python笔记007】了不起的分支和循环1:打飞机框架
- python基础入门学习笔记(Python环境搭建)
- 【零基础入门学习Python笔记010】一个打了激素的数组1
- Python编程:从入门到实践 学习笔记 基础知识(六)函数
- Python 学习笔记(一):基础与入门
- 【零基础入门学习Python笔记012】一个打了激素的数组3
- python学习笔记day1:基础入门
- 【零基础入门学习Python笔记011】一个打了激素的数组2
- 【零基础入门学习Python笔记016】中文编码
- 零基础入门学习Python学习笔记第六讲【元组】
- Python编程:从入门到实践 学习笔记 基础知识(五)用户输入与While循环
- 【零基础入门学习Python笔记003】插曲之变量和字符串|课习题答案
- 【零基础入门学习Python笔记012】一个打了激素的数组3
- VS2013中Python学习笔记[基础入门]
- 【Python学习笔记】-Python基础入门
- python基础入门学习笔记(3)
- 【零基础入门学习Python笔记014】字符串:各种奇葩的内置方法
- python基础入门学习笔记(1)
- 【零基础入门学习Python笔记002】用Python设计第一个游戏:课后测试集答案
- 【零基础入门学习Python笔记009】了不起的分支和循环3