百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Python模块(十九)(python 模块)

toyiye 2024-09-16 06:12 7 浏览 0 评论

模块允许逻辑地组织Python代码。 将相关代码分组到一个模块中,使代码更容易理解和使用。 模块是一个具有任意命名属性的Python对象,可以绑定和引用。

简单来说,模块是一个由Python代码组成的文件。模块可以定义函数,类和变量。 模块还可以包括可运行的代码。

示例

下面是一个名称为aname的模块的Python代码通常位于一个名称为aname.py的文件中。以下是一个简单模块的例子:support.py -

def print_func( par ):
 print "Hello : ", par
 return

1.import语句

可以通过在其他Python源文件中执行import语句来将任何Python源文件用作模块。导入具有以下语法 -

import module1[, module2[,... moduleN]

当解释器遇到导入语句时,如果模块存在于搜索路径中,则导入该模块。搜索路径是导入模块之前解释器搜索的目录的列表。例如,要导入模块hello.py,需要将以下命令放在脚本的顶部 -

#!/usr/bin/python3
# Import module support
import support
# Now you can call defined function that module as follows
support.print_func("Maxsu")

当执行上述代码时,会产生以下结果 -

Hello : Maxsu

不管模块被导入多少次,模块只能加载一次。这样可以防止模块执行重复发生,如果有多个导入。

2.from…import语句

Python from语句允许将模块中的特定属性导入到当前的命名空间中。 from...import具有以下语法 -

from modname import name1[, name2[, ... nameN]]

例如,要从模块 fib 导入函数fibonacci,请使用以下语句 -

#!/usr/bin/python3
# Fibonacci numbers module
def fib(n): # return Fibonacci series up to n
 result = []
 a, b = 0, 1
 while b < n:
 result.append(b)
 a, b = b, a + b
 return result
>>> from fib import fib
>>> fib(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

此语句不会将整个模块fib导入到当前命名空间中; 它只是将fibonacci从模块fib引入导入模块的全局符号表。

3.from…import *语句

也可以使用以下import语句将模块中的所有名称导入到当前命名空间中 -

from modname import *

这提供了将所有项目从模块导入到当前命名空间中的简单方法; 但是,这个说法应该谨慎使用。

4.执行模块作为脚本

在模块中,模块的名称(作为字符串)可用作全局变量__name__的值。模块中的代码将被执行,就像您导入它一样,但是__name__设置为“__main__”。

在模块的最后添加这个代码 -

#!/usr/bin/python3
# Fibonacci numbers module
def fib(n): # return Fibonacci series up to n
 result = []
 a, b = 0, 1
 while b < n:
 result.append(b)
 a, b = b, a + b
 return result
if __name__ == "__main__":
 f = fib(100)
 print(f)

运行上述代码时,将显示以下输出。

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

5.定位模块

当导入模块时,Python解释器将按以下顺序搜索模块 -

  • 当前目录。
  • 如果没有找到该模块,Python会在shell变量PYTHONPATH中搜索每个目录。
  • 如果其他所有失败,Python将检查默认路径。 在UNIX上,此默认路径通常是/usr/local/lib/python3/ 或者 /usr/sbin/

模块搜索路径作为sys.path变量存储在系统模块sys中。sys.path变量包含当前目录PYTHONPATH和依赖于安装的默认值。

6.PYTHONPATH变量

PYTHONPATH是一个环境变量,由目录列表组成。 PYTHONPATH的语法与shell变量`PATH```的语法相同。

这是一个典型的Windows系统上的PYTHONPATH -

set PYTHONPATH = c:\python34\lib;

这里是UNIX系统的典型PYTHONPATH -

set PYTHONPATH = /usr/local/lib/python

7.命名空间和范围

变量是映射到对象的名称(标识符)。 命名空间是变量名(键)及其对应对象(值)的字典。

  • Python语句可以访问本地命名空间和全局命名空间中的变量。如果本地和全局变量具有相同的名称,则局部变量会影响全局变量。
  • 每个函数都有自己的本地命名空间。 类方法遵循与普通函数相同的范围规则。
  • Python对于变量是本地还是全局都进行了有根据的判断。它假定在函数中分配值的任何变量都是本地的。
  • 因此,为了将值分配给函数内的全局变量,必须首先使用global语句。
  • 语句global VarName告诉Python VarName是一个全局变量。Python停止搜索本地命名空间的变量。

例如,在全局命名空间中定义一个变量Money。 在函数Money中为Money赋值,因此Python将Money作为局部变量。

但是,如果在设置之前就访问了本地变量Money的值,它会产生一个错误:UnboundLocalError。 这里可以通过取消注释global语句来解决问题。如下示例代码 -

#!/usr/bin/python3
Money = 2000
def AddMoney():
 # Uncomment the following line to fix the code:
 # global Money
 Money = Money + 1
print (Money)
AddMoney()
print (Money)

8.dir( )函数

dir()内置函数返回一个包含由模块定义的名称的字符串的排序列表。这个列表包含模块中定义的所有模块,变量和函数的名称。 以下是一个简单的例子 -

#!/usr/bin/python3
# Import built-in module math
import time
content = dir(time)
print (content)

当执行上述代码时,会产生以下结果 -

['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']

这里,特殊的字符串变量__name__是模块的名称,__file__是加载模块的文件名。

9.globals()和locals()函数

globals()和locals()函数可用于返回全局和本地命名空间中的名称,具体取决于它们被调用的位置。

  • 如果locals()从一个函数中调用,它将返回从该函数本地访问的所有名称。
  • 如果从函数中调用globals(),它将返回从该函数全局访问的所有名称。

这两个函数的返回类型是字典。 因此,可以使用keys()函数提取名称。

10.reload()函数

当将模块导入到脚本中时,模块的顶级部分的代码只能执行一次。

因此,如果要重新执行模块中的顶级代码,可以使用reload()函数。reload()函数再次导入以前导入的模块。 reload()函数的语法是这样的 -

reload(module_name)

这里,module_name是要重新加载的模块的名称,而不是包含模块名称的字符串。 例如,要重新加载hello模块,请执行以下操作 -

reload(hello)

11.Python中的包

Python中的包是一个分层文件目录结构,它定义了一个由模块和子包和子子包组成的Python应用程序环境,等等。

在package目录中创建两个目录:pkg和pkg2, 然后分别在这两个目录中创建两个文件:a.py和b.py。该文件具有以下一行源代码 -

文件: pkg/a.py -

#!/usr/bin/python3
#coding=utf-8
# save file: pkg/a.py
def fun():
 print ("I'm pkg.a.fun() ")

文件: pkg/b.py -

#!/usr/bin/python3
#coding=utf-8
# save file: pkg/b.py
def fun():
 print ("I'm pkg.b.fun() ")

文件: pkg2/a.py -

#!/usr/bin/python3
#coding=utf-8
# save file: pkg2/a.py
def fun():
 print ("I'm pkg2.a.fun() ")

文件: pkg2/b.py -

#!/usr/bin/python3
#coding=utf-8
# save file: pkg2/b.py
def fun():
 print ("I'm pkg2.b.fun() ")

在package目录中创建一个主程序文件:main.py,用于演示如何调用包中的各个文件 -

#!/usr/bin/python3
#coding=utf-8
# save file: phone/pots.py
import pkg.a as a
import pkg.b as b
import pkg2.a as a2
import pkg2.b as b2
a.fun()
b.fun()
a2.fun()
b2.fun()
import pkg2.a
import pkg2.b
print('----------- another way -----------------')
pkg2.a.fun()
pkg2.b.fun()

整个代码的目录如下所示 -

package

|- pkg

|- __init__.py

|- a.py

|- b.py

|- pkg2

|- __init__.py

|- a.py

|- b.py

当执行上述代码时,会产生以下结果 -

I'm pkg.a.fun() 
I'm pkg.b.fun() 
I'm pkg2.a.fun() 
I'm pkg2.b.fun() 
----------- another way -----------------
I'm pkg2.a.fun() 
I'm pkg2.b.fun()

在上面的例子中,将每个文件中的一个函数作为示例,但是可以在文件中编写多个函数。还可以在这些文件中定义不同的Python类,然后可以使用这些类来创建包。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码