自定义模块的使用|学习笔记

简介: 快速学习自定义模块的使用

开发者学堂课程【Python 入门 2020年版自定义模块的使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/639/detail/10363


自定义模块的使用

 

1.定义

一个模块本质上就是一个 py  文件

自己定义一个模块,其实就是自己写一个 py 文件

2.规则

(1) .举例为 Import 04- 我的模块  如果一个 py 文件想要当作一个模块,这个文件名一定要遵守命名规则。

(2) .规则是,由数字,字母下划线组成,不能以数字开头。注意,只有严格遵守这些规则才可以被导入,其他一概不可。

由此可看,04- 我的模块是不可以的,这时可以自己写一个,举例,命名为,my moudule。

3.导入模块

导入了一个模块,就能使用这个模块里的变量和函数

(1) .Import my_moudule

举例:

比如 my_moudule 里有一个变量,

a=‘hello’

有一个函数是  def test():

print(‘我是 my_moudule 模块里的 test方法’)

验证一下,Print(‘my_moudule.a’)运行的结果就是 hello

my_moudule.test() 运行之后的可过就是我是 my_moudule 模块里的 test方法

(2).from demo import*

举例:

比如设为 demo

定义为 m=‘yes’

n=100

def test():

print(‘我是 demo 模块里的 test 方法’)

def foo():

Print(‘我是 demo 模块里的 foo 方法’)

(3).Import my_moudule 和 from demo import*  没有太大的区别。但是也是有区别的,区别在于,Import my_moudule 导入了模块,要用模块名.变量名。比如 print(my_moudule.a)。

还有模块名.函数名。

比如 my_moudule.test()。from demo import*  是没有把 demo 导进来。验证识输入 print(m),test(),验证后的结果为 yes,我是 demo 里的 test。

使用 from  import* 导入这个模块‘所有’的变量和函数。

本质上是读取模块里 _all_ 属性,看这个属性里定义了哪些变量和函数。如果模块里没有定义 _all_ 才会导入不以_开头的变量和函数。

举例:

_all_=[‘m’.‘test’]

这时填写 print(n) 运行,结果会报错。

如果不写 _all_=[‘m’.‘test’] 就会把

m=‘yes’

n=100

def test():

print(‘我是 demo 模块里的 test 方法’)

def foo():

Print(‘我是 demo 模块里的 foo 方法’)都给导入进来。

也就是说如果写了 _all_=[‘m’.‘test’] 就会限定,但是不写就不会被限定,可以都被导入。注意,如果用 import demo也是可以被使用的。

并不是说不能用,只是 from demo import*的这种形式是不能被用的。

4.区别

(1).使用  from    import* 导入这个模块里所有的变量和函数。import my_moudule 导入了模块,导入时需要有模块名点(.)变量名和模块名点(.)函数名。

(2).from demo import* 写法,不再需要写模块名。而 from demo import* 并没有把 demo 导进来。

5.延伸知识

(1).使用  from 模块名  import* 这种方式无法导入

①.举例,命名为 hello,填写

X=’hello’

Y=1000

以 from hello import* 来导,这时运行的结果为

print(x)

print(y)

总结便是,没有设置 _all_ 会读取以_开始的所有变量的函数

②.举例,测试有下划线时

_age=19

验证 print(_age)是读取不了的

总结便是,以一个下划线开始变量,建议只在本模块里使用,别的模块导不进来。

③.但是,如果坚持想导进来也是可以的,这时可以用 Import hello。验证 Print (hello._age)的结果为 hello,1000,19, 可以看出这种方法也是可以的。

(2).不建议使用以一个下划线开头的模块

如果使用可能会报错

①.举例为 datetime 模块里的_is_leap(year)检测是否为闰年的模块。

使用  from datetime import*

检测 _is_leap(2000 )是会报错的。以一个下划线开始的函数和变量是不能够用 from datetime import* 导入进来的。

②.如果坚持使用,比方使用 import datetime

检测 datetime._is_leap(2000) 也是会报错的。所以,不建议使用,如果强行用,可能会导致崩掉。

(3).强行不让使用的方法:

①.可以在 datetime 里的 is_leap 可以看到

_days_in_montth(year, month):

"year, month -> number of days in that month in that year. assert 1 <= month <= 12, month

if month == 2 and is_leap(year):

return 29

return DAYS_IN_MONTH[month]

运行之后发现 is_leap 内部是经常用的。之后会发现,做了一个操作,此操作为

del (_DAYNAMES,_DAYS_BEFORE_MONTH,_DAYS_IN_MONTH, _DI100Y,_DI4Y,_EPOCH,_MAXORDINAL,_MONTHNAMES,_build_struct_t_check_date_fields,_check_int_field,_check_time_fields_check_tzinfo_arg,_check_tzname,_check_utc_offset,_cm_date_class,_days_before_month,_days_before_year, _day_format_time,_format_offset,is_leap,_isoweek1monday,_ord2ymd,_time,_time_class,_tzinfo_class,_wrap_strft,divide_and_round,_parse_isoformat_date,_parse_isoform_parse_hh_mm_ss_ff)。

其中可以找到加粗的字体,is_leap。这时由于 del,is_leap是不能够使用了。

②.可以填写 del_age,这时可以不被使用

举例为,def bar():

print(‘我是 hello 里的 bar 函数,我只能 hello 文件内部使用’)

这时,检测 print(‘我是 hello 里的 bar 函数,我只能 hello 文件内部使用’)是可以被使用的。

这时如果想删除,就可以填写 del(_age_bar),检测后会发现是崩掉的。

相关文章
|
6月前
|
Python
理解模块功能
理解模块功能
64 8
|
2月前
|
Shell Linux Python
你知道创建模块都有哪些方式吗?
你知道创建模块都有哪些方式吗?
26 0
|
6月前
|
JavaScript 前端开发
若依 自定义实现导入功能
若依 自定义实现导入功能
132 1
|
移动开发 前端开发 Java
自定义框架_最后处理 | 学习笔记
快速学习自定义框架_最后处理,介绍了自定义框架_最后处理系统机制, 以及在实际应用过程中如何使用。
自定义框架_最后处理 | 学习笔记
|
物联网 Android开发 芯片
JDY-10M 模块介绍 | 学习笔记
快速学习 JDY-10M 模块介绍
JDY-10M 模块介绍 | 学习笔记
|
XML Java 数据格式
自定义框架配置解析 | 学习笔记
快速学习自定义框架配置解析,介绍了自定义框架配置解析系统机制, 以及在实际应用过程中如何使用。
自定义框架配置解析 | 学习笔记
|
开发者 Python
导入模块 | 学习笔记
快速学习导入模块
导入模块 | 学习笔记
|
Java 开发者
后台分类模块之相关类之创建 | 学习笔记
快速学习后台分类模块之相关类之创建
|
监控 NoSQL Java
自定义 Hea1thIndicator |学习笔记
快速学习自定义 Hea1thIndicator
|
开发者 Python
导入模块的五种方法| 学习笔记
快速学习导入模块的五种方法
下一篇
无影云桌面