📘 Day 12🎉 本系列为 Python 基础学习,原稿来源于英文项目,大奇主要是对其本地化翻译、逐条验证和补充。此系列适合零基础同学,或仅了解 Python 一点知识,但又没有系统学习的使用者。总之如果你想提升自己的 Python 技能,欢迎加入《挑战 30 天学完 Python》
作者:大奇 MegaQi | Info 签约作者 ,专注测试开发技术实战干货分享,欢迎访问主页长期关注。
模块 Modules
什么是 Module
模块是在应用程序中一个包含一组代码或一组函数的文件。模块可以是包含单个变量、函数或大型代码库的文件。
创建 Module
要创建一个 module 我们在 python 脚本中写下我们的代码,并将它保存为 .py
的文件。现在让我们尝试在项目文件夹中创建一个名为mymodule.py
的文件。让我们在这个文件中编写一些代码。
这份文件你也可以从项目源代码目录 12_Day_Modules 获取
# mymodule.py
def generate_full_name(firstname, lastname):
space = ' '
fullname = firstname + space + lastname
return fullname
def sum_two_nums(num1, num2):
return num1 + num2
gravity = 9.81
person = {
"name": "Qi",
"age": 20,
"country": "China",
"city": 'ShangHai'
}
复制代码
在你自己的项目中创建一个 main.py 文件,然后导入 mymodule.py 模块文件。
导入 Module
要导入文件,我们只需使用 _import_
关键字加文件名即可。
# main.py
import mymodule
print(mymodule.generate_full_name('Mega', 'Qi')) # Mega Qi
复制代码
从 Module 中导入函数
在一个文件中兴许包含很多的函数方法,我们可以通过不同的方式进行导入。
# main.py
from mymodule import generate_full_name, sum_two_nums, person, gravity
print(generate_full_name('Mega', 'Qi'))
print(sum_two_nums(1, 9))
mass = 100
weight = mass * gravity
print(weight)
print(person['name'])
复制代码
从模块导入函数并重命名
在模块的导入的同时,我们也可以进行别名设置。
# main.py file
from 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 = 100
weight = mass * g
print(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 参数2
print('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 大小取决于系统:
statistics 模块
统计模块提供数值数据的数学统计功能。本模块中定义的常用统计函数: mean, median, mode, stdev 等。
from statistics import * # 导入所有 statistics modules
ages = [20, 20, 4, 24, 25, 22, 26, 20, 23, 22, 26]
print(mean(ages)) # 算术平均值 21.09090909090909
print(median(ages)) # 方法返回数值数据的中值 22
print(mode(ages)) # 法计算给定数值或名义数据集的众数 20
print(stdev(ages)) # 计算标准差 6.106628291529549
复制代码
math 模块
此模块包含许多数学运算和常量。
import math
print(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 pi
print(pi)
复制代码
同时也可以导入多个函数
from math import pi, sqrt, pow, floor, ceil, log10
print(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 PI
print(PI)
复制代码
字符串模块
字符串模块在很多方面都是非常有用的模块。下面的例子展示了字符串模块的一些用法。
import string
# ascii字母
print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
# 展示所有数字
print(string.digits) # 0123456789
# 展示标点标点符号
print(string.punctuation) # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
复制代码
Random 模块
到目前为止,您已经熟悉了导入模块用法。让我们在导入另外一个模块来最后熟悉它。 模块 random 它给返回一个 0 到 0.9999 之间的随机数。当然它有很多模块,但在本篇中只用到 random 和 randint 。
from random import random, randint
print(random()) # 它返回一个介于0到0.9999之间的值
print(randint(5, 20)) # 它返回一个[5,20]的随机整数
复制代码
🌕 你已经坚持学习更高级的内容了。继续前进!你刚刚完成了第 12 天的挑战,你在通往伟大的道路上前进了 12 步。现在按例来做一些练习吧,来消化和巩固下学习成功。
💻 第 12 天练习
练习 1 级
编写一个 random_user_id 函数,它的功能是随机生成 6 位字符(包括字母和数字)。
print(random_user_id());
'1ee33d'
复制代码
修改上边方法。声明一个名为 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
复制代码
编写一个名为 rgb_color_gen 函数。它将生成 rgb 颜色(3 个值,每个值从 0 到 255)。
print(rgb_color_gen())
# rgb(125,244,255) - 输出格式
复制代码
练习 2 级
编写一个函数 list_of_hexa_colors,它返回数组中任意数量的十六进制颜色(在 #之后写入的六个十六进制数)。十六进制数字系统由 16 个符号组成,0-9 和字母表的前 6 个字母 a-f。
编写一个函数 list_of_rgb_colors,它返回任意数量的 RGB 颜色数组。
编写一个函数 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 级
调用你的编写的函数 shuffle_list,它接受一个列表作为参数,并返回一个打乱的列表。
编写一个函数,返回由 0-9 范围内的 7 个随机数组成的数组。所有的数字必须是唯一的。
🎉 CONGRATULATIONS ! 🎉
评论