写点什么

挑战 30 天学完 Python:Day12 模块 Module

作者:MegaQi
  • 2023-04-22
    上海
  • 本文字数:3483 字

    阅读完需:约 11 分钟

📘 Day 12🎉 本系列为 Python 基础学习,原稿来源于英文项目,大奇主要是对其本地化翻译、逐条验证和补充。此系列适合零基础同学,或仅了解 Python 一点知识,但又没有系统学习的使用者。总之如果你想提升自己的 Python 技能,欢迎加入《挑战 30 天学完 Python》

作者:大奇 MegaQi | Info 签约作者 ,专注测试开发技术实战干货分享,欢迎访问主页长期关注。


模块 Modules

什么是 Module

模块是在应用程序中一个包含一组代码或一组函数的文件。模块可以是包含单个变量、函数或大型代码库的文件。

创建 Module

要创建一个 module 我们在 python 脚本中写下我们的代码,并将它保存为 .py 的文件。现在让我们尝试在项目文件夹中创建一个名为mymodule.py的文件。让我们在这个文件中编写一些代码。


这份文件你也可以从项目源代码目录 12_Day_Modules 获取


# mymodule.pydef generate_full_name(firstname, lastname):    space = ' '    fullname = firstname + space + lastname    return fullname

def sum_two_nums(num1, num2): return num1 + num2

gravity = 9.81person = { "name": "Qi", "age": 20, "country": "China", "city": 'ShangHai'}
复制代码


在你自己的项目中创建一个 main.py 文件,然后导入 mymodule.py 模块文件。

导入 Module

要导入文件,我们只需使用 _import_ 关键字加文件名即可。


# main.pyimport mymoduleprint(mymodule.generate_full_name('Mega', 'Qi')) # Mega Qi
复制代码

从 Module 中导入函数

在一个文件中兴许包含很多的函数方法,我们可以通过不同的方式进行导入。


# main.pyfrom mymodule import generate_full_name, sum_two_nums, person, gravityprint(generate_full_name('Mega', 'Qi'))print(sum_two_nums(1, 9))mass = 100weight = mass * gravityprint(weight)print(person['name'])
复制代码

从模块导入函数并重命名

在模块的导入的同时,我们也可以进行别名设置。


# main.py filefrom mymodule import generate_full_name as fullname, sum_two_nums as total, person as p, gravity as g
print(fullname('Mega', 'Qi'))print(total(1, 9))mass = 100weight = mass * gprint(weight)print(p)print(p['name'])
复制代码

导入内置模块

与其他编程语言一样可以导入内置模块,通过使用关键字 import 导入文件/函数。现在让我们导入一些常用的模块。这些内置模块如:math, datetime, os,sys, random, statistics, collections, json, re

os 模块

使用 python 中 os 模块可以自动执行许多系统操作。Python 中的 OS 模块提供了诸如:创建、更改当前工作目录、删除目录(文件夹)、获取其内容、更改和标识当前目录等函数。


# 导入os模块import os# 创建文件夹os.mkdir('directory_name')# 切换到当前刚才创建的directory_name文件夹os.chdir('directory_name')# 获取当前的工作路径目录os.getcwd()# 切换到上级目录os.chdir('..')# 删除文件夹os.rmdir('directory_name')
复制代码

sys 模块

内置模块sys提供了一些 python 运行时环境操作的部分方法和变量。功能 sys.argv 获取传递给 Python 脚本命令行参数列表。列表索引 0 始终是文件的名,后边从 1 开始的是真正的命令行参数。


例子代码 script.py 文件:


import sys# print(sys.argv[0], argv[1],sys.argv[2])  # 命令行执行将打印: 文件名 参数1 参数2print('Welcome {}. Enjoy  {} challenge!'.format(sys.argv[1], sys.argv[2]))
复制代码


现在让我们来看看,在命令行中执行写的这个脚本将如何:


python script.py Qi 30DaysOfPython
复制代码


执行结果:



一些有用的 sys 命令:


import sys# 退出sys.exit()
# python可以处理或存储为变量的最大值sys.maxsize
# 获取系统配置环境变量sys.path
# 获取当前python版本sys.version
复制代码


上边 maxsize 大小取决于系统:


  • 32 位:该值将为 2^31-1,即 2147483647

  • 64 位:该值将为 2^63-1,即 9223372036854775807

statistics 模块

统计模块提供数值数据的数学统计功能。本模块中定义的常用统计函数: mean, median, mode, stdev 等。


from statistics import * # 导入所有 statistics modulesages = [20, 20, 4, 24, 25, 22, 26, 20, 23, 22, 26]print(mean(ages))       # 算术平均值 21.09090909090909print(median(ages))     # 方法返回数值数据的中值 22print(mode(ages))       # 法计算给定数值或名义数据集的众数 20print(stdev(ages))      # 计算标准差 6.106628291529549
复制代码

math 模块

此模块包含许多数学运算和常量。


import mathprint(math.pi)           # 3.141592653589793, 圆周率(Pi)常量print(math.sqrt(2))      # 1.4142135623730951, 平方根print(math.pow(2, 3))    # 8.0, 指数函数print(math.floor(9.81))  # 9, 四舍五入取底print(math.ceil(9.81))   # 10, 四舍五入取高print(math.log10(100))   # 2.0, 以10为底的对数
复制代码


现在,我们已经导入了 math 模块,它包含了许多函数能帮助我们进行数学计算。那么如果要想查看模块都有那些函数,我们可以使用 help(math)dir(math) 来显示模块中可用的函数。如果我们只想从模块中导入一个特定的函数,我们按如下方式导入它:


from math import piprint(pi)
复制代码


同时也可以导入多个函数


from math import pi, sqrt, pow, floor, ceil, log10print(pi)print(sqrt(2))print(pow(2, 3))print(floor(9.81))print(ceil(9.81))print(log10(100))
复制代码


但如果我们想导入数学模块中的所有函数,我们可以使用 *


from math import *print(pi)print(sqrt(2))print(pow(2, 3))print(floor(9.81))print(ceil(9.81))print(log10(100))
复制代码


同上导入时,还可以为函数设置别名。


from math import pi as PIprint(PI)
复制代码

字符串模块

字符串模块在很多方面都是非常有用的模块。下面的例子展示了字符串模块的一些用法。


import string
# ascii字母print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
# 展示所有数字print(string.digits) # 0123456789
# 展示标点标点符号print(string.punctuation) # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
复制代码

Random 模块

到目前为止,您已经熟悉了导入模块用法。让我们在导入另外一个模块来最后熟悉它。 模块 random 它给返回一个 0 到 0.9999 之间的随机数。当然它有很多模块,但在本篇中只用到 randomrandint


from random import random, randintprint(random())   # 它返回一个介于0到0.9999之间的值print(randint(5, 20)) # 它返回一个[5,20]的随机整数 
复制代码


🌕 你已经坚持学习更高级的内容了。继续前进!你刚刚完成了第 12 天的挑战,你在通往伟大的道路上前进了 12 步。现在按例来做一些练习吧,来消化和巩固下学习成功。

💻 第 12 天练习

练习 1 级

  1. 编写一个 random_user_id 函数,它的功能是随机生成 6 位字符(包括字母和数字)。


     print(random_user_id());     '1ee33d'
复制代码


  1. 修改上边方法。声明一个名为 user_id_gen_by_user 的函数。它不设置参数,但它使用 input() 接受两个输入。其中一个输入是字符的数量,第二个输入是应该生成的 id 的数量。


      print(user_id_gen_by_user()) # 用户输入: 5 5      # 输出举例(因为是随机每次均不一样,所以以下值仅为举例):      #kcsy2      #SMFYb      #bWmeq      #ZXOYh      #2Rgxf            print(user_id_gen_by_user()) # 16 5      # 实际以你练习和输入的两个数为准      #1GCSgPLMaBAVQZ26      #YD7eFwNQKNs7qXaT      #ycArC5yrRupyG00S      #UbGxOFI7UXSWAyKN      #dIV0SSUTgAdKwStr
复制代码


  1. 编写一个名为 rgb_color_gen 函数。它将生成 rgb 颜色(3 个值,每个值从 0 到 255)。


    print(rgb_color_gen())    # rgb(125,244,255) - 输出格式
复制代码

练习 2 级

  1. 编写一个函数 list_of_hexa_colors,它返回数组中任意数量的十六进制颜色(在 #之后写入的六个十六进制数)。十六进制数字系统由 16 个符号组成,0-9 和字母表的前 6 个字母 a-f。

  2. 编写一个函数 list_of_rgb_colors,它返回任意数量的 RGB 颜色数组。

  3. 编写一个函数 generate_colors,它可以生成任意数量的 hexa 或 rgb 颜色。


    generate_colors('hexa', 3) # ['#b0c6e9', '#c06ee9', '#871ff7']     generate_colors('hexa', 1) # ['#3b2366']    generate_colors('rgb', 3)  # ['rgb(85,243,216)', 'rgb(22,39,233)', 'rgb(235,151,123)']    generate_colors('rgb', 1)  # ['rgb(221,103,205)']
复制代码

练习 3 级

  1. 调用你的编写的函数 shuffle_list,它接受一个列表作为参数,并返回一个打乱的列表。

  2. 编写一个函数,返回由 0-9 范围内的 7 个随机数组成的数组。所有的数字必须是唯一的。


🎉 CONGRATULATIONS ! 🎉

发布于: 14 小时前阅读数: 4
用户头像

MegaQi

关注

InfoQ签约作者 |公众号: 非典型性程序员 2018-02-15 加入

分享一些系列测试平台开发教程,也记录一些自己研究的技术,遇到的问题,总之想分享一些干货内容,愿给这个行业贡献微不足道的力量,不断突破不断成长。

评论

发布
暂无评论
挑战 30 天学完 Python:Day12 模块Module_挑战30天学完Python_MegaQi_InfoQ写作社区