小知识点随记

一.__init__.py文件的用处

1.在py2中引用其他文件夹中的模块的时候,需要先建立一个__init__.py文件

1)在python3里面要是导入其他目录下的python文件的话:

如:from 第七周作业.core.login import login 

注意:第七周作业.core是文件夹的名字,login是py文件名,login 是函数名

2)在python2里面如果要导入其他目录下的python文件的话,需要在这个文件下面建一个__init__.py文件

如果还是引用上面login 函数的话,需要先在core文件夹下建立一个__init__.py文件,那么他下面的函数或者文件才可以被引用

如:from 第七周作业.core.login import login 

2.直接导入一个包

__init__.py就是区分普通文件夹和包的,当文件夹中存在__init__.py文件的时候,这个文件夹就是一个包

导入一个包的实质就是把这个目录下的__init__.py文件从上到下执行一次

假如hhh文件夹下有一个文件__init__.py,内容为:

print("今天天气真好!")

在文件夹test里直接import hhh 就可以了,执行结果就是:今天天气真好

程序的入口在哪个目录下,那么当前目录就再程序入口的目录下

例子:如果想在day7的文件夹test.py里引用包里的my.py文件的话

3.在引用包的时候,也操作其下面的py文件,采用hhh.my.my_func()的方式

1.由于引用包的实质是将包里的__init__.py内容执行一遍,那么需要先在__init__.py文件中导入my.py文件

2.虽然my.py文件和__init__.py在一个文件夹hhh下,可是程序的入口test.py在day7个目录下,那么当前目录就再day7的目录下,不可以用import my 代码从day7目录下导入my,需要使用from  . import my,在__init__.py所在的文件下导入my

3.在入口test.py里面直接引用hhh包就可以,如下图: 

上述是在运行入口使用hhh.my.my_func()的方式例子,方然也可以用py3中的那样from hhh.my import my_func也可以,不用在__init__.py文件里from  . import my

二.贪婪模式与非贪婪模式

假如取标题中的URL,如下图:

1.贪婪模式,如下,他会把需要匹配的后面的内容不需要的也给全部返回来的

2.非贪婪模式:默认是贪婪模式的,要是想要非贪婪模式的话,就需要在后面加上一个?号

该网站可以查找一些常用的正则表达式http://tool.oschina.net/regex

 三.os模块中的system命令和open命令的区别

1.system命令,执行的py文件的编码是UTF-8的,在windows中显示的结果是JDK格式的,所以显示乱码,使用read的时候python之间将显示的时候转为UTF-8了,所以显示是正确的,不会乱码

import os
os.system('ipconfig') # 这个方法,能执行命令,但是没办法获取结果
res=os.system('ipconfig')
print(res) #打印出来是一个0,如果输入的命令不存在的话,返回的结果就是1了
# 返回结果:
# Windows IP ����
#
#
# ��̫�������� ��̫��:
#
# ý��״̬ . . . . . . . . . . . . : ý���ѶϿ�����
# �����ض��� DNS ��׺ . . . . . . . :
# 0

 2.open命令,直接用open的话,返回的是内存地址

eg1:

import os
os.popen('ipconfig')
res=os.popen('ipconfig')
print(res) #返回的是一个内容地址<os._wrap_close object at 0x000000EDF095B748>

 eg2:需要使用read方法获取一下,返回的是执行命令之后的返回结果

import os
res=os.popen('ipconfig').read()
print(res)
返回结果:
Windows IP 配置
返回结果
以太网适配器 以太网:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 2:

区别就是system没有返回值,open有返回值,当需要查询操作命令的返回结果的时候,就可以用open方法;执行的py文件的编码是UTF-8的,在windows中显示的结果是JDK格式的,所以显示乱码,使用read的时候python将显示的内容转为UTF-8了,所以显示是正确的,不会乱码

LInux下top命令是动态的监控服务器的资源,CUP、内存的使用率,这样的命令使用popen就不太好用了,直接用就会报错了

top -n 1每次只取一次,这样的话才可以获取到如:

import os
res=os.popen('top -n 1').read()
print(res)

四.zip函数,循环的时候同时循环两个list,字符串也可以,只有个数一样的都可以
eg1:
list1=[1,2,3]
list2=['xiaoming','niuniu','MLing']
for i,k in zip(list1,list2):
print(i,k)

返回结果:

1 xiaoming
2 niuniu
3 MLing

eg:2
list1="1234"
list2="MLIng"
for i,k in zip(list1,list2):
print(i,k)
返回结果:

1 M
2 L
3 I
4 n

注意:循环的列表或者字符串的个数最好一样不一样的话,只循环到都一样的部分



原文地址:https://www.cnblogs.com/MLing/p/7096662.html