小白学Python

您所在的位置:网站首页 python调用自定义模块 小白学Python

小白学Python

2022-05-28 14:59| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

自定义模块导入:

要求:

模块文件后缀必须以.py结尾

模块文件名必须是合法的标识符

避免名称和内建模块名冲突

导入方式:

import语句

from import 语句

from import * 语句

正确的模块名:

mymod.py avde.py abc123.py

错误的模块名:

123.py abc.cpp math.py

示例见:

mymod.py #自定义模块函数

test_mymod.py #主模块(用来导入和调用mymod里的函数)

# mymod.py

'''此示例自定义模块此模块内有两个函数和两个字符串'''

def myfac(n):print("正在计算%d!的阶乘" % n)def mysum(n):print("正在计算%d的和" % n)

name1 = "Audi"name2 = "BYd"

print("mymod 模块被加载")

# test_mymod.py

#此模块将作为主模块来导入mymod模块#用mymod里的函数和数据,组成我的程序

import mymod #不加.py 会自动去找mymod.py文件#调用方法2from mymod import myfac, mysum, name2#调用方法3from mymod import *

mymod.myfac(6)mymod.mysum(100)print(mymod.name2)

运行 test_mymod.py 将调用 mymod.py 中的全局变量 “myfac”、“mysum”、“name2”

结果如下:

import 语句 搜索模块的路径顺序

搜索内建模块索引程序的运行时路径(当前工作目录)sys.py(模块的搜索路径)提供的路径

sys.path是一个列表,里面放的都是模块的搜索路径

模块化编程的优点:

有利于多人合作开发使代码更加利于维护提高代码的复用率模块化编程有助于解决函数名和变量名冲突(重名)问题,模块内的变量作用域为模块内全局(不同的变量内可以有相同的全局变量)

模块的加载过程:

在模块导入时,模块内的所有语句都会执行如果一个模块已经导入,则再次导入是不会重新执行模块内的语句

模块的重新加载:

import mymodimport impimp.reload(mymod) #重新加载已加载的mymod模块#注意:此做法通常只在开发阶段调试使用

模块被导入的执行过程:

先搜索相关的路径,找到.py文件判断是否由此文件对应的.pyc文件,如果没有.pyc文件,则用.py文件生成.pyc文件如果存在.pyc文件,需要判断.py文件是否比.pyc文件新,如果新则重新生成.pyc,然后再加载.pyc文件

pyc文件(相当于加载的缓存程序),模块的编译文件

编译 解释执行

模块的属性:

模块的文档字符串:

__doc__属性

作用:用来绑定文档字符串

示例见:mymod__doc__.py

#mymod__doc__.py

import mymodprint(mymod.__doc__)

运行结果如下:

__file__属性:

作用:用来绑定模块对应的文件路径名

注意:内建函数没有__file__属性(如:math)

示例见:mymod__file__.py

#mymod__file__.py

import mymodprint(mymod.__file__)

运行结果如下:

__name__属性

作用:

用来记录模块自身的名字用来判断是否为主模块

注意:主模块是指程序汇总的第一执行起来的模块

说明:

当此模块作为主模块运行时,__name__属性 绑定 '__main__’

当此模块不作为主模块运行时,此__name__属性绑定模块名

如:mymod.py 的模块名为 ‘mymod’

模块的 __all__列表:

模块中的 __all__列表是一个用来存放可导出属性的字符串列表

作用:

限定在用from xxx import * 导入时,只导入 __all__列表内的属性

注意:此__all__列表,只对 from import * 语句有效

示例见:

第一步:建立一个模块 mymod3.py

# mymod3.py#首先 建立一段函数def f1():f2()f3()

def f2():pass

def f3():pass

name1 = 'aaaa'name2 = 'bbbb'

第二步:建立导入模块 示例见 import_mymod3.py

#import_mymod3.py

from mymod3 import *p = dir()print(p)

第三步:运行import_mymod3.py

模块中 mymod3.py 变量 f1 f2 f3 name1 name2,被导入

第四步:如果 只想导入" f1 , name1 " , 其他" f2 , f3 , name2 "不被导入

接下来使用 __all__函数,示例如下

#mymod.py'''此__all__列表只限制from import * 语句的导入当用 from mymod import * 时,只导入 f1 和 name1'''

__all__ = ['f1','name1']def f1():f2()f3()

def f2():pass

def f3():pass

name1 = 'aaaa'name2 = 'bbbb'

接下来运行: import_mymod3.py

将会只导入 f1 , name1

模块的隐藏属性

模块汇总以 下划线(_) 开头的属性, 在from import * 语句导入时

将不被导入,通常称为这些属性为隐藏属性

示例见:mymod4.py

# mymod4.py

'''下划线开头的属性,将在from mymod4 import * 语句'''

def f():passdef _f1():passdef __f2():pass

name1 = "aaaa"_name1 = "bbbb"

建立导入模块 示例见 import_mymod3.py

# import_mymod4.py

from mymod4 import *p = dir()print(p)

运行 import_mymod4.py

标准库模块

随机模块 random

作用:

用于模拟或生成随机数的模块(摇塞子)

import random as RR.random() #返回一个[0,1)之间的随机实数R.uniform(a,b) #返回[a,b]之间的随机实数R.randint(a,b) #返回[a.b]范围内的整数(包含a,b)R.randrange([start,] stop[,step]) #返回range(start,stop,step)中的随机数字R.choice(seq) #从序列中返回随意元素R.shuffle(seq[,random]) #随机指定序列的顺序(乱序序列)R.sample(seq,n) #从序列汇总选择n个随机且不重复的元素

练习:

1.猜数字游戏

随机生成一个0~100的整数,用变量x绑定

让用户输入一个数字y,输出数字的结果

如果y大于x,则提示“您猜大了”,继续让用户猜下去

如果y小于x,则提示“您猜小了”,继续猜

如果y等于x,,则提示“恭喜您猜对了”,打印出猜数字的次数,然后退出程序

注意:知道猜对才能退出

import random as Rx = R.randint(0, 100)# print(x)

times = 0 #记录猜数字的次数while True:y = int(input("请输入(0~100)的整数:"))times += 1if y > x:print("您猜大了")elif y < x:print("您猜小了")else: #y = xprint("恭喜您猜对了")breakprint("您共踩了%d次" % times)

运行结果:

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3