第八章 模块

来源:互联网 发布:网络购彩票恢复了吗 编辑:程序博客网 时间:2024/04/29 21:25
部分分别转载自网上博客。。。参考的太多了。。。就不列了。。。
第八章 模块
模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。
____________________________________________________

使用sys模块

import sysprint 'The command line arguments are:'for i in sys.argv:                print iprint '\n\nThe PYTHONPATH is', sys.path, '\n'


当Python执行import sys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。注意,初始化过程仅在我们第一次输入模块的时候进行。
sys.argv变量是一个字符串的 列表(见第十四章的笔记sys.argv
'using_sys.py'是sys.argv[0]、'we'是sys.argv[1]、'are'是sys.argv[2]以及'arguments'是sys.argv[3]。
----------------------------------------

sys.path

包含输入模块的目录名列表。我们可以观察到sys.path的第一个字符串表示当前工程的目录,也就是说python首先会在当前工作目录寻找模块。你可以直接输入位于当前目录的模块。否则,你得把你的模块放在sys.path所列的目录之一。

当然,我们也可以自行添加要搜索路径。调用列表的append方法即可:
import sys
sys.path.append(r'D:/xx/PythonSERVER/python31/Code')
#并不是永久保存的方法,重启就又没了
————————————————————————————————————————

字节编译的.pyc文件

pyc是二进制文件,所以你用记事本打开它的时候只会看到乱码。
py文件作为模块被import的时候,python为了提高解析速度,对所有这些作为模块的py文件先作一个类似编译的动作,产生相应的pyc文件。这样当有别的程序再次import这些模块时,python就不用再重新解析py文件,而是读入pyc文件就可以了。
为什么需要pyc文件?这个需求太明显了,因为py文件是可以直接看到源码的,如果你是开发商业软件的话,不可能把源码也泄漏出去,所以就需要编译为pyc后,再发布出去。
————————————————————————————————————————

import或者from...import的区别

eg:
import sys
print ('The command line arguments are:')
for i in sys.argv:
    print (i)
print ('\n The python path',sys.path)

from sys import argv,path#导入特定的成员
print('path:',path)

如果你想在程序中用argv代表sys.argv,则可使用:from sys import argv。
一般说来,应该避免使用from..import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突
——————————————————————————————————————————

模块的__name__

通过__name__我们可以找出每一个模块的名称,一般__name__的值有种:
1 一是主模块名称为:"__main__"(可以理解为直接运行的那个文件),
2 那些被主模块导入的模块名称为:文件名字(不加后面的.py)。
有__name__是很有用的,因为我们可以通过 if __name__ == 'xxx' 判断来执行那些模块,那些模块不被执行。另外:每个Python程序也是一个模块。它扩展名为:.py扩展名。
if __name__ == '__main__':        print 'This program is being run by itself'else:        print 'I am being imported from another module'
输出:
$ python using_name.py
This program is being run by itself
$ python
>>> import using_name
I am being imported from another module
>>>
-------------------------------------------
首先:我们创建模块:hello.py
version='1.0'
def sayHello():
   print ('Hello world')

def modelName():
    return __name__
#返回它自己的名称

以上语句注意: 这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。

然后:我们在test.py中来调用此模块:test.py
import sys,hello
sys.path.append('D:/xx/PythonSERVER/python31/Code')
#提供搜索路径
print(__name__) #此处打印主模块的名称:__main__
hello.sayHello()
print('Version',hello.version)
print('Model Name',hello.modelName()
)#打印被导入模块的名称: hello

我们使用from..import...
from hello import *
print(__name__)
#此处打印主模块的名称:__main__
sayHello()
print('Version',version)
print('Model Name',modelName())
#打印被导入模块的名称: hello
——————————————————————————————————————————

dir和help

是Python中两个强大的built-in函数,

比如查看list的所以属性:dir(list)
输出:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

然后查看list的pop方法的作用和用法:
help(list.pop)
输出:……
——————————————————————————————————————————

dir函数

列出模块定义的标识符。标识符有函数、类、变量
当为dir()提供一个模块名时,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。
例如:接着LS的LS那个hello.py的例子做。
>>> a=8>>> dir()['__builtins__', '__doc__', '__name__', '__package__', 'a', 'hello', 'modelName', 'sayHello', 'sys', 'version']>>> del a>>> dir()['__builtins__', '__doc__', '__name__', '__package__', 'hello', 'modelName', 'sayHello', 'sys', 'version']
——————————————————————————————————————————

del()

用于list列表操作,删除一个或者连续几个元素
>>> a = [-1, 3, 'aa', 85] # 定义一个list
>>> del a[0] # 删除第0个元素
>>> del a[2:4] # 删除从第2个元素开始,到第4个为止的元素。包括头不包括尾
>>> del a # 删除整个list
__________________________________________________________________________

python 里面的单下划线与双下划线的区别(私有和保护)

Python 用下划线作为变量前缀和后缀指定特殊变量。

_xxx 以单下划线开头的表示的是protected类型的变量,不能直接访问的类属性,需通过类提供的接口进行访问,不能用于’from module import *’ 导入。即保护类型只能允许其本身与子类进行访问。
__xxx 双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以。
__xxx__ 定义的是特列方法。像__init__之类的

避免用下划线作为变量名的开始。因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号。一般来讲,变量名__xxx被看作是“私有 的”,在模块或类外不可以使用。
________________________________________________________________________________
原创粉丝点击