11. 用别人写好的代码,完成我的工作,剩下的时间去摸鱼

梦想橡皮擦 等级 646 0 0
标签: Python

今天是持续写作的第 11 / 100 天。 如果你有想要交流的想法、技术,欢迎在评论区留言。

Python 为何那么多人都喜欢,就是因为很多大佬给我们造好了“轮子”了,拿着大佬的轮子,我骄傲~

十一、Python 模块的设计与应用

模块是一个概念,它包含 1~N 个文件,如果文件是 Python 代码文件(就是.py 结尾的文件),那每个文件中可以包含函数,类等内容。

在公司工作,很多项目都是协作开发来完成,一个项目后面可能存在很多工程师,为了开发方便,每个人负责的功能函数或者类都尽量封装在一个模块中,模块英文请记住 module,有的地方叫做 ,也有的地方叫做 包(package),对于现阶段的你来说,当成一样的内容就好。

互联网上存在大量的开源模块,这些模块最大的优势就是免费,很多时候使用这些模块能极大的提高编码效率,这也是很多人喜欢 Python 的原因之一。

11.1 将函数放到模块中

模块学习的过程,不能按照语法结构来学习,它是一种抽象的知识,是一种代码的设计方式。例如将写好的函授放到模块中。

# 声明一个宫保鸡丁的函数
def kung_pao_chicken(*ingredients):
    """
    这个函数用于输出宫保鸡丁的主料
    """
    print("宫保鸡丁的主料有:")
    for item in ingredients:
        print(item)

# 声明一个鱼香肉丝的函数
def yu_shiang_shredded_pork(**args):
    """
    这个函数目的获取用户输入进来的参数
    """
    print("鱼香肉丝需要啥")
    for item in args.items():
        print(item)

以上内容声明了两个函数,当然函数名你必须好评,翻译的准确有意义。

接下来就将上面的函数整合到一个模块中去,建立一个新的文件 stir_fry.py 然后将两个函数复制到新的文件中。

stir_fry.py 文件包含那两个函数

好了,完成任务,一个模块创建完毕了,这个 stir_fry.py 文件就是一个模块。

你现在脑中肯定出现黑人问号脸了,What?这就完了。是的,完了,一个低配模块完成。

下面就可以拿着这个模块给别人使用去了。会写模块成为大佬之后,就可以给新入行的菜鸟指点江山,写模块了。

11.2 应用函数模块

11.2.1 import 导入模块

在另一个文件中,可以通过 import 模块名 导入一个模块,例如导入刚才创建的 stir_fry 模块。

注意要新建一个文件,文件名随意但是不要与模块同名。

import stir_fry # 注意导入模块不能带中划线,所以模块的文件名也不能带下划线。

如果想要使用模块中的函数,只需要参考下述语法格式即可。

模块名.函数名称()

通过 stir_fry 调用模块中的函数。

import stir_fry

stir_fry.kung_pao_chicken("黄瓜", "胡萝卜", "鸡胸肉", "花生米")
stir_fry.yu_shiang_shredded_pork(old="橡皮擦的鱼香肉丝放鱼", new="大佬的鱼香肉丝不放鱼")

当通过 import stir_fry 导入模块之后,该模块内的所有函数都一次性导入到新文件中了。

11.2.2 导入模块某个函数

如果不想导入模块的所有函数,而只导入某个函数,使用一下语法可以解决该问题。

from 模块名 import 函数名

修改上一节案例:

from stir_fry import kung_pao_chicken

kung_pao_chicken("黄瓜", "胡萝卜", "鸡胸肉", "花生米")
# 下面的函数无法调用,因为未导入
yu_shiang_shredded_pork(old="橡皮擦的鱼香肉丝放鱼", new="大佬的鱼香肉丝不放鱼")

直接导入模块中的函数,使用时不需要通过 模块名. 的方式调用,直接书写函数名即可。

导入模块中多个函数

语法格式如下:

from 模块名 import 函数名1,函数名2,...

导入模块所有函数

语法格式如下:

from 模块名 import *

11.2.3 as 别名

刚才通过模块导入函数你应该发现一个潜在的问题,就是函数名称太长怎么办,除了名称太长,还存在一种情况,模块中的函数名称与当前文件中函数的名称,存在重名的风险。此时可以学习一个新的内容,通过 as 给模块导入进来的函数起个别名,然后在该文件都使用别名进行编码。

语法格式如下:

from 模块名 import 函数名 as 别名

上述内容应用到案例中如下述代码:

from stir_fry import kung_pao_chicken as pao

pao("黄瓜", "胡萝卜", "鸡胸肉", "花生米")

as 别名也可直接作用于模块,语法格式如下:

import 模块名 as 别名

11.3 将类放到模块中

随着程序设计变的越来越复杂,只把函数放到模块中已经不能满足要求了,需要将更高级的内容放到模块中,也就是类。

首先在 dog_module.py 文件中定义一个类。

class Dog():
    def __init__(self):
        self.name = "小狗"

    def say(self):
        print("汪汪汪")

此时的 dog_module 就是模块的名称,而在该模块中只有一个类 Dog,也可以在该模块中多创建几个类,例如:

class Dog():
    def __init__(self):
        self.name = "小狗"

    def say(self):
        print("汪汪汪")

class Cat():
    def __init__(self):
        self.name = "小猫"

    def say(self):
        print("喵喵喵~")

11.3.1 import 导入模块(类)

与导入模块的函数部分知识一样,如果希望导入一个模块中的类,可以直接通过下述语法格式实现:

import 模块名

使用模块中的类,语法格式如下:

模块名.类名

具体代码不在演示,自行完成吧。

11.3.1 导入模块某个类

导入模块的类和导入模块的的函数用法是一致的。

新建一个 demo.py 文件,在该文件导入 dog_module 模块中的类。

# 导入 dog_module 模块中的狗类
from dog_module import Dog

dog = Dog()
dog.say()

从模块中导入多个类

该方式与函数的导入也一致,语法格式如下:

from 模块名 import 类名1,类名2,类名3...

导入模块中所有类

from 模块名 import *

学到这里,你应该已经发现导入模块中的函数与导入模块中的类,从代码编写的角度几乎看不出区别,对比着学习即可。

导入类的时候也可以应用别名,同样使用 as 语法。

11.4 常见模块

学习到这里你对模块是什么,模块怎么用已经有了一个基本认知,接下来先不用自己写一个特别牛的模块,我们先把一些常见的模块应用起来。

11.4.1 随机数 random 模块

通过随机数模块可以获取到一个数字,它的使用场景非常广,例如游戏相关开发、验证码相关、抽奖相关,学习了随机数之后可以完成一些非常不错的小案例。

randint 方法

导入随机数模块之后,可以通过 randint 方法随机生成一个整数,例如下述代码:

import random # 导入随机数模块

num = random.randint(1,10)
print(num)

反复运行代码会得到一个 1~10 之间的数字,由此可以 randint 方法中的参数含义。

randint(min,max) # min 最小值,max 最大值

你可以尝试给 randint 函数起一个别名吗?

choice 方法

通过 choice 方法可以配合列表实现一些效果,choice 可以随机返回列表中的一个元素。

import random  # 导入随机数模块

play = random.choice(["足球", "篮球", "乒乓球", "棒球"])
print(play)

如果你想知道 choice 方法的具体用法,还记得怎么查询吗?

import random  # 导入随机数模块

print(help(random.choice))

shuffle 方法

该方法可以将一个列表的顺序打乱。

import random  # 导入随机数模块

my_list = ["足球", "篮球", "乒乓球", "棒球"]
random.shuffle(my_list)
print(my_list)

简单挑选了 random 模块中的三个方法做为说明,对于模块的学习,后面将为每个模块单开一篇文章书写。

11.4.2 时间 time 模块

时间模块是 Python 中非常重要的一个内置模块,很多场景都离不开它,内置模块就是 Python 安装好之后自带的模块。

time 方法 time 模块主要用于操作时间,该方法中存在一个 time 对象,使用 time 方法之后,可以获取从 1970年1月1日 00:00:00 到现在的秒数,很多地方会称作时间戳。

import time

print(time.time())

输出内容:

1606810686.3747146

sleep 方法 该方法可以让程序暂停,该方法的参数是的单位是

使用语法格式为:

import time
time.sleep(10) # 程序暂停 10 秒再执行

asctime 与 localtime 方法

以上两个方法都可以返回当前系统时间,只是展示的形式不同。

import time

print(time.asctime())

print(time.localtime())

time 模块涉及的方法先只涉及这么多,后续滚雪球学习过程中在继续补充。

Python 还内置了很多模块,例如 sys 模块、os 模块、json 模块、pickle 模块、shelve 模块、xml 模块、re 模块、logging 模块等等内容,后续都将逐步学习到,有可能需要分开专题给大家讲解。

11.5 这篇博客的总结

Python 模块,快速编码的一种途径,很多时候第三方模块可以帮你解决大多数常见编码场景,让你在编码的道路上飞奔。

🈚🈚🈚🈚🈚


收藏
评论区

相关推荐

python的requests模块的使用
前言: 在web后台开发过程中,会遇到需要向第三方发送http请求的场景,python中的requests库可以很好的满足这一要求,这里简要记录一下requests模块的使用! 说明: 这里主要记录一下requests模块的如下几点: 1.requests模块的安装 2.requests模块发送get请求 3.requests模块
python中的split()函数的用法
函数:split() Python中有split()和os.path.split()两个函数,具体作用如下: split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list) os.path.split():按照路径将文件名和路径分割开 一、函数说明 1、split()函数 语法:str.split(str
11. 用别人写好的代码,完成我的工作,剩下的时间去摸鱼
今天是持续写作的第 <font color"red"11</font / 100 天。 如果你有想要交流的想法、技术,欢迎在评论区留言。 Python 为何那么多人都喜欢,就是因为很多大佬给我们造好了“轮子”了,拿着大佬的轮子,我骄傲 十一、Python 模块的设计与应用 模块是一个概念,它包含 1N 个文件,如果文件是 Python 代码
我用python算出了同事的身份证号码!
为了一杯奶茶。 事情的经过是这样的: 我的同事李大伟最近出差去了。 昨晚睡觉前翻了翻朋友圈, 就跟他愉快地 互怼 交流了起来。 (https://imghelloworld.osscnbeijing.aliyuncs.com/4b9169e63d35ccae8b5216a50cfb9a8c.jp
我的python多线程和多进程
线程存在空闲 from multiprocessing.dummy import Poolfrom multiprocessing.dummy import Pool as ThreadPool pool ThreadPool(20) pool.map(job_worker, result_cursor)
我的python总结
建议刚开始学习直接使用ANACONDAhttps://www.anaconda.com/download/配置python环境变量https://docs.python.org/3.6/using/cmdline.htmlenvvarPYTHONMALLOCPython PEP8导包顺序1. Python标准
表弟的数学题,我竟然用了python才解出来
↑ 关注 + 置顶  有趣的不像个技术号 大家好,我是朱小五 本来这个周末过得开开心心,结果为了解一道数学题薅掉了一把头发、、、整整18根! 而且还是一道小学数学题!!! 到底是什么题呢?大家看看吧 既然表弟都求到我这了,那就随便的做一做嘛。 这不就是一道逻辑题嘛! 先假如丁错,则甲乙丙对,此时最小的abc(2^3)\(3^2)\750
我用python破解了同事的加密压缩包!
↑关注+置顶 有趣的不像个技术号 又是一杯奶茶。 事情的经过是这样的: 又是奶茶,行吧行吧。 快点开工,争取李大伟回来之前搞定。 李大伟说是6位数字密码 那么我们可以利用python生成全部的六位数字密码 生成从000000到99999的密码表 f  open('passdict.txt','w') for id in ran
我用python算出了同事的身份证号码!
为了一杯奶茶。 事情的经过是这样的: 我的同事李大伟最近出差去了。 昨晚睡觉前翻了翻朋友圈, 就跟他愉快地 互怼 交流了起来。 估计是他想起了我朱小五从不打无把握之赌,后面就怂了。 一杯奶茶嘛,也可以接受, 像杰伦一样快乐就好啦。 开工。 先看看李大伟的朋友圈中发的图片。 (该火车票来自其他平行世界,扫描可能发生奇怪现象) 车票中暴
凉凉!面试阿里我被Redis技术专题给搞的昏倒在地~
凉凉!面试阿里我被Redis技术专题给弄死了📚我本以为我可以像是别的博主一样去阿里面试随随便便,因为Redis,我直接被阿里大佬淦翻在地上好了不装了 没过没关系 我总结了一些这些最难的知识点!!!!然后自己总结归类再去百度查询了一些 最终得出这份Redis技术专题 题目开淦 Redis集群的主从复制模型是怎样的?为了是在部分节点失败或者大部分节点无法通信的情
python的学习难?你的方法不对罢了,看看我的。
1、选择Python版本对于使用python的人来说,python的版本就是我们的工作环境,因此,在学习之前需要考虑好学习哪个版本,python2和python3的版本不同,会存在一些差异,虽说不大,但直接学习python3 的话相对来说会好一点,而且跑一趟还能3相对来说对零基础的小白来说更加的友好,容易上手。2、学习Python基础知识Python 是一个
JAVA回调机制(CallBack)之小红是怎样买到房子的??
JAVA回调机制CallBack 序言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按
BI的过去和未来
#### 原文转载地址: [头条号](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.toutiao.com%2Fc%2Fuser%2Ftoken%2FMS4wLjABAAAAhrHHD-UwWfs7udM7xp7yMCib-817AacsGAhxa92Lx4g%2F) [IT
K8S为何杀死我的应用
#### 首发公众号:二进制社区,转载联系:binary0101@126.com ### 导读 "K8S为我们提供自动部署调度应用的能力,并通过健康检查接口自动重启失败的应用,确保服务的可用性,但这种自动运维在某些特殊情况下会造成我们的应用陷入持续的调度过程导致业务受损,本文就生产线上一个核心的平台应用被K8S频繁重启调度问题展开剖解,抽丝剥茧一
Stream的去重排序
1.List<Integer>排序 List<Integer> list = new ArrayList<>();list.add(50);list.add(25);list.add(25);list.add(98);list.add(32);List<Integer> collect = list.stream().distinct().sort