|
| 1 | +<div align="center"> |
| 2 | + <h1> 30 天 Python :第 12 天 - 模块 </h1> |
| 3 | + <a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/"> |
| 4 | + <img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social"> |
| 5 | + </a> |
| 6 | + <a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh"> |
| 7 | + <img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social"> |
| 8 | + </a> |
| 9 | + |
| 10 | +<sub>作者: |
| 11 | +<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br> |
| 12 | +<small>第二版: 2021 年 7 月</small> |
| 13 | +</sub> |
| 14 | + |
| 15 | +</div> |
| 16 | +</div> |
| 17 | + |
| 18 | +[<< 第 11 天](../11_Day_Functions/11_functions.md) | [第 13 天>>](../13_Day_List_comprehension/13_list_comprehension.md) |
| 19 | + |
| 20 | + |
| 21 | + |
| 22 | +- [📘 第 12 天](#-第12天) |
| 23 | + - [模块](#模块) |
| 24 | + - [什么是模块](#什么是模块) |
| 25 | + - [创建模块](#创建模块) |
| 26 | + - [导入模块](#导入模块) |
| 27 | + - [从模块中导入函数](#从模块中导入函数) |
| 28 | + - [从模块中导入函数并重命名](#从模块中导入函数并重命名) |
| 29 | + - [导入内置模块](#导入内置模块) |
| 30 | + - [OS 模块](#os-模块) |
| 31 | + - [Sys 模块](#sys-模块) |
| 32 | + - [统计模块](#统计模块) |
| 33 | + - [数学模块](#数学模块) |
| 34 | + - [字符串模块](#字符串模块) |
| 35 | + - [随机模块](#随机模块) |
| 36 | + - [💻 练习:第 12 天](#-练习-第12天) |
| 37 | + - [练习:级别 1](#练习-级别-1) |
| 38 | + - [练习:级别 2](#练习-级别-2) |
| 39 | + - [练习:级别 3](#练习-级别-3) |
| 40 | + |
| 41 | +# 📘 第 12 天 |
| 42 | + |
| 43 | +## 模块 |
| 44 | + |
| 45 | +### 什么是模块 |
| 46 | + |
| 47 | +模块是包含一组代码或一组函数的文件,可以包含在一个应用程序中。一个模块可以是包含单个变量、函数或大规模代码库的文件。 |
| 48 | + |
| 49 | +### 创建模块 |
| 50 | + |
| 51 | +要创建模块,我们在一个 Python 脚本中编写代码并保存为 .py 文件。 在项目文件夹中创建一个名为 mymodule.py 的文件。让我们在此文件中编写一些代码。 |
| 52 | + |
| 53 | +```py |
| 54 | +# mymodule.py 文件 |
| 55 | +def generate_full_name(firstname, lastname): |
| 56 | + return firstname + ' ' + lastname |
| 57 | +``` |
| 58 | + |
| 59 | +在项目目录中创建 main.py 文件并导入 mymodule.py 文件。 |
| 60 | + |
| 61 | +### 导入模块 |
| 62 | + |
| 63 | +要导入文件,我们使用 _import_ 关键字和文件名。 |
| 64 | + |
| 65 | +```py |
| 66 | +# main.py 文件 |
| 67 | +import mymodule |
| 68 | +print(mymodule.generate_full_name('Asabeneh', 'Yetayeh')) # Asabeneh Yetayeh |
| 69 | +``` |
| 70 | + |
| 71 | +### 从模块中导入函数 |
| 72 | + |
| 73 | +我们可以在一个文件中有很多函数,并且我们可以分别导入所有函数。 |
| 74 | + |
| 75 | +```py |
| 76 | +# main.py 文件 |
| 77 | +from mymodule import generate_full_name, sum_two_nums, person, gravity |
| 78 | +print(generate_full_name('Asabneh','Yetayeh')) |
| 79 | +print(sum_two_nums(1,9)) |
| 80 | +mass = 100 |
| 81 | +weight = mass * gravity |
| 82 | +print(weight) |
| 83 | +print(person['firstname']) |
| 84 | +``` |
| 85 | + |
| 86 | +### 从模块中导入函数并重命名 |
| 87 | + |
| 88 | +在导入过程中,我们可以重命名模块名称。 |
| 89 | + |
| 90 | +```py |
| 91 | +# main.py 文件 |
| 92 | +from mymodule import generate_full_name as fullname, sum_two_nums as total, person as p, gravity as g |
| 93 | +print(fullname('Asabneh','Yetayeh')) |
| 94 | +print(total(1, 9)) |
| 95 | +mass = 100 |
| 96 | +weight = mass * g |
| 97 | +print(weight) |
| 98 | +print(p) |
| 99 | +print(p['firstname']) |
| 100 | +``` |
| 101 | + |
| 102 | +## 导入内置模块 |
| 103 | + |
| 104 | +像其他编程语言一样,我们也可以通过使用关键字 _import_ 导入文件/函数来导入模块。让我们导入我们大多数时候会使用的常见模块。一些常见的内置模块:_math_、_datetime_、_os_、_sys_、_random_、_statistics_、_collections_、_json_、_re_ |
| 105 | + |
| 106 | +### OS 模块 |
| 107 | + |
| 108 | +使用 Python _os_ 模块可以自动执行许多操作系统任务。Python 中的 OS 模块提供了创建、更改当前工作目录和删除目录(文件夹)、获取其内容、更改和识别当前目录的函数。 |
| 109 | + |
| 110 | +```py |
| 111 | +# 导入模块 |
| 112 | +import os |
| 113 | +# 创建目录 |
| 114 | +os.mkdir('directory_name') |
| 115 | +# 更改当前目录 |
| 116 | +os.chdir('path') |
| 117 | +# 获取当前工作目录 |
| 118 | +os.getcwd() |
| 119 | +# 删除目录 |
| 120 | +os.rmdir() |
| 121 | +``` |
| 122 | + |
| 123 | +### Sys 模块 |
| 124 | + |
| 125 | +sys 模块提供用于操作 Python 运行时环境不同部分的函数和变量。函数 sys.argv 返回传递给 Python 脚本的命令行参数列表。此列表中索引 0 处的项始终是脚本的名称,索引 1 处是从命令行传递的参数。 |
| 126 | + |
| 127 | +示例 script.py 文件: |
| 128 | + |
| 129 | +```py |
| 130 | +import sys |
| 131 | +#print(sys.argv[0], argv[1],sys.argv[2]) # 这一行会打印出来:文件名 argument1 argument2 |
| 132 | +print('Welcome {}. Enjoy {} challenge!'.format(sys.argv[1], sys.argv[2])) |
| 133 | +``` |
| 134 | + |
| 135 | +现在要查看这个脚本的工作效果,我在命令行中写: |
| 136 | + |
| 137 | +```sh |
| 138 | +python script.py Asabeneh 30DaysOfPython |
| 139 | +``` |
| 140 | + |
| 141 | +结果: |
| 142 | + |
| 143 | +```sh |
| 144 | +Welcome Asabeneh. Enjoy 30DayOfPython challenge! |
| 145 | +``` |
| 146 | + |
| 147 | +一些有用的 sys 命令: |
| 148 | + |
| 149 | +```py |
| 150 | +# 退出 sys |
| 151 | +sys.exit() |
| 152 | +# 知道最大整数变量 |
| 153 | +sys.maxsize |
| 154 | +# 知道环境路径 |
| 155 | +sys.path |
| 156 | +# 知道使用的 Python 版本 |
| 157 | +sys.version |
| 158 | +``` |
| 159 | + |
| 160 | +### 统计模块 |
| 161 | + |
| 162 | +统计模块提供用于数值数据的数学统计的函数。这个模块中定义的流行统计函数:_mean_、_median_、_mode_、_stdev_ 等。 |
| 163 | + |
| 164 | +```py |
| 165 | +from statistics import * # 导入所有统计模块 |
| 166 | +ages = [20, 20, 4, 24, 25, 22, 26, 20, 23, 22, 26] |
| 167 | +print(mean(ages)) # ~22.9 |
| 168 | +print(median(ages)) # 23 |
| 169 | +print(mode(ages)) # 20 |
| 170 | +print(stdev(ages)) # ~2.3 |
| 171 | +``` |
| 172 | + |
| 173 | +### 数学模块 |
| 174 | + |
| 175 | +包含许多数学运算和常数的模块。 |
| 176 | + |
| 177 | +```py |
| 178 | +import math |
| 179 | +print(math.pi) # 3.141592653589793, pi 常数 |
| 180 | +print(math.sqrt(2)) # 1.4142135623730951, 平方根 |
| 181 | +print(math.pow(2, 3)) # 8.0, 指数函数 |
| 182 | +print(math.floor(9.81)) # 9, 向下取整 |
| 183 | +print(math.ceil(9.81)) # 10, 向上取整 |
| 184 | +print(math.log10(100)) # 2, 以 10 为底的对数 |
| 185 | +``` |
| 186 | + |
| 187 | +现在,我们已经导入了包含大量函数的 _math_ 模块,可以帮助我们进行数学计算。要检查模块中包含哪些函数,我们可以使用 _help(math)_ 或 _dir(math)_。这将显示模块中的可用函数。如果我们只想从模块中导入特定的函数,我们可以这样导入: |
| 188 | + |
| 189 | +```py |
| 190 | +from math import pi |
| 191 | +print(pi) |
| 192 | +``` |
| 193 | + |
| 194 | +也可以一次导入多个函数 |
| 195 | + |
| 196 | +```py |
| 197 | +from math import pi, sqrt, pow, floor, ceil, log10 |
| 198 | +print(pi) # 3.141592653589793 |
| 199 | +print(sqrt(2)) # 1.4142135623730951 |
| 200 | +print(pow(2, 3)) # 8.0 |
| 201 | +print(floor(9.81)) # 9 |
| 202 | +print(ceil(9.81)) # 10 |
| 203 | +print(math.log10(100)) # 2 |
| 204 | +``` |
| 205 | + |
| 206 | +但如果我们想要导入数学模块中的所有函数,可以使用 \* . |
| 207 | + |
| 208 | +```py |
| 209 | +from math import * |
| 210 | +print(pi) # 3.141592653589793, pi 常数 |
| 211 | +print(sqrt(2)) # 1.4142135623730951, 平方根 |
| 212 | +print(pow(2, 3)) # 8.0, 指数 |
| 213 | +print(floor(9.81)) # 9, 向下取整 |
| 214 | +print(ceil(9.81)) # 10, 向上取整 |
| 215 | +print(math.log10(100)) # 2 |
| 216 | +``` |
| 217 | + |
| 218 | +当我们导入时,我们也可以重命名函数名称。 |
| 219 | + |
| 220 | +```py |
| 221 | +from math import pi as PI |
| 222 | +print(PI) # 3.141592653589793 |
| 223 | +``` |
| 224 | + |
| 225 | +### 字符串模块 |
| 226 | + |
| 227 | +字符串模块是一个很有用的模块。下面的例子展示了字符串模块的一些用法。 |
| 228 | + |
| 229 | +```py |
| 230 | +import string |
| 231 | +print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |
| 232 | +print(string.digits) # 0123456789 |
| 233 | +print(string.punctuation) # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ |
| 234 | +``` |
| 235 | + |
| 236 | +### 随机模块 |
| 237 | + |
| 238 | +现在你已经熟悉了导入模块。让我们再进行一次导入以熟悉它。让我们导入 _random_ 模块,它会给我们一个 0 到 0.9999 之间的随机数。_random_ 模块有很多函数,但在本节中,我们将只使用 _random_ 和 _randint_。 |
| 239 | + |
| 240 | +```py |
| 241 | +from random import random, randint |
| 242 | +print(random()) # 它不需要任何参数;它返回一个介于 0 和 0.9999 之间的值 |
| 243 | +print(randint(5, 20)) # 它返回一个介于 [5, 20] 之间的随机整数(含边界) |
| 244 | +``` |
| 245 | + |
| 246 | +🌕 你走得很远了。继续努力!你刚刚完成第 12 天的挑战,现在你已经在通往伟大的路上迈出了 12 步。现在为你的大脑和肌肉做一些练习。 |
| 247 | + |
| 248 | +## 💻 练习:第 12 天 |
| 249 | + |
| 250 | +### 练习:级别 1 |
| 251 | + |
| 252 | +1. 编写一个生成六位数/字符 random_user_id 的函数。 |
| 253 | + ```py |
| 254 | + print(random_user_id()); |
| 255 | + '1ee33d' |
| 256 | + ``` |
| 257 | +2. 修改上一个任务。声明一个名为 user_id_gen_by_user 的函数。它不接受任何参数,但接受两个输入。一个输入是字符的数量,另一个输入是应生成的 ID 数量。 |
| 258 | + |
| 259 | +```py |
| 260 | +print(user_id_gen_by_user()) # 用户输入:5 5 |
| 261 | +#输出: |
| 262 | +#kcsy2 |
| 263 | +#SMFYb |
| 264 | +#bWmeq |
| 265 | +#ZXOYh |
| 266 | +#2Rgxf |
| 267 | + |
| 268 | +print(user_id_gen_by_user()) # 16 5 |
| 269 | +#1GCSgPLMaBAVQZ26 |
| 270 | +#YD7eFwNQKNs7qXaT |
| 271 | +#ycArC5yrRupyG00S |
| 272 | +#UbGxOFI7UXSWAyKN |
| 273 | +#dIV0SSUTgAdKwStr |
| 274 | +``` |
| 275 | + |
| 276 | +3. 编写一个名为 rgb_color_gen 的函数。它将生成 RGB 颜色(每个值范围从 0 到 255)。 |
| 277 | + |
| 278 | +```py |
| 279 | +print(rgb_color_gen()) |
| 280 | +# rgb(125,244,255) - 输出应该是这种形式 |
| 281 | +``` |
| 282 | + |
| 283 | +### 练习:级别 2 |
| 284 | + |
| 285 | +1. 编写一个函数 list_of_hexa_colors,它返回一个数组中的任意数量的十六进制颜色(六个十六进制数写在 # 后面。十六进制数字系统由 16 个符号组成,0-9 和 前 6 个字母 a-f。查看任务 6 的输出示例)。 |
| 286 | +2. 编写一个函数 list_of_rgb_colors,它返回一个数组中的任意数量的 RGB 颜色。 |
| 287 | +3. 编写一个函数 generate_colors,它可以生成任意数量的十六进制或 RGB 颜色。 |
| 288 | + |
| 289 | +```py |
| 290 | + generate_colors('hexa', 3) # ['#a3e12f','#03ed55','#eb3d2b'] |
| 291 | + generate_colors('hexa', 1) # ['#b334ef'] |
| 292 | + generate_colors('rgb', 3) # ['rgb(5, 55, 175','rgb(50, 105, 100','rgb(15, 26, 80'] |
| 293 | + generate_colors('rgb', 1) # ['rgb(33,79, 176)'] |
| 294 | +``` |
| 295 | + |
| 296 | +### 练习:级别 3 |
| 297 | + |
| 298 | +1. 调用你的函数 shuffle_list,它接受一个列表作为参数并返回一个打乱的列表。 |
| 299 | +2. 编写一个函数,它在 0-9 的范围内返回七个随机数的数组。所有数字必须是唯一的。 |
| 300 | + |
| 301 | +🎉 恭喜! 🎉 |
| 302 | + |
| 303 | +[<< 第 11 天](../11_Day_Functions/11_functions.md) | [第 13 天>>](../13_Day_List_comprehension/13_list_comprehension.md) |
0 commit comments