资讯详情

今天要学习的技术点,Python 筛选数字,模块导入,特殊变量__all__ 实战博客

??? 大家好,我是 ,10 致力于年产研经验 Python 传播相关技术栈 ?? ?? 如果这篇文章感觉不错,用小手点赞。 ?? ?? 如果本文发现错误,请在评论区纠正。 ?? ?? ?? ???

阅读前,可以去看《滚雪球系列专栏》 Python。 Python二分查找,字符串模板,textwrap模块,每天写写Python自然就会了,每日Python第2天

《滚雪球学 Python》专栏订阅地址

每天学一点,所以这个系列的专栏不超过每篇文章 3000 字(含代码)

?? 最近更新:2022 年 4 月 9 日,橡皮擦第一 612 篇原创博客

文章目录

    • ?? 搜索计数低于 2 的数字
    • ?? Python 模块导入
    • ?? 使用 from ... import ... 导入模块
    • ?? `__all__` 变量
    • ?? 在数组中找到目标数字的接近值

?? 搜索计数低于 2 的数字

系统初始化一个纯数字列表,如命名为 my_list,在列表中发现的数量低于 2 所有数字。

先模拟一些数据: 例如: 操作 my_list = [1,2,3,3,4,5,5 之后,返回 1,2,6; 操作 my_list = [1,2,3,3] 之后,返回 1,2

在这种情况下,列表可以从小到大排序,然后通过列表来判断当前元素和下一个元素的大小。如果重复,将该值存储在新的数组中。

最后,通过比较两个列表的差异来获取最终数据。

def find_over_two(nums):     nums = sorted(nums)     temp = []     output = []     for i in range(len(nums) - 1):         if nums[i] == nums[i   1]:             temp.append(nums[i])             i  = 1      for i in nums:         if i not in temp:             output.append(i)     return output   if __name__ == '__main__':     my_list = [1, 2, 3, 3, 4, 4, 5, 5, 6]

    out = find_over_two(my_list)
    print(out)

⛳️ Python 模块导入

在 Python 代码的编写过程中,经常碰到需要使用第三方模块,或者使用团队其它人编写的模块,此时就应用到模块导入相关概念了。

模块导入的标准语法结构为:

import 模块名称 as 别名

其中 as + 别名 在模块名称比较简单的时候,可以直接省略。别名原理类似下述代码:

import wo_shi_mo_kuai
ws = wo_shi_mo_kuai

上述代码较于 as 的缺点是,会在名称空间中产生两个变量,多一点点的的空间消耗。

import 语句不要求必须出现在文件的开头,任意位置都可以进行导入操作。

新建一个 tools.py 文件,编写如下代码:

def show():
    print("我是橡皮擦")

在当前目录新建立一个 user.py 文件,然后导入刚才创建好的文件。

import tools
tools.show()

⛳️ 使用 from … import … 导入模块

import 导入模块的方式会把全部内容进行导入,如果仅需要指定部分,可以使用 from...import... 导入模块中的指定成员。

例如下述代码:

from tools import show

除此之外,在 from 后面可以使用相对路径,例如下述代码:

from .DIR import 成员名

相对路径的逻辑与文件目录访问基本一致,可以使用 . 表示当前目录,.. 表示父级目录。

在 import 关键字之后还可以使用 *,表示导入全部成员,默认不包括下滑线 _ 开头的成员,当然也可以在模块中使用 __all__ 变量, import 默认导入该声明中的变量。

  • 如果模块定义了 __all__,默认导入该变量中的所有成员;
  • 如果无 __all__,导入非 _ 开头的变量。

⛳️ __all__ 变量

很多时候,我们并不希望模块成员被全部导入,最好只导入我们需要的部分。这样就用到了 __all__ 变量。 __all__ 变量是一个序列,其中的每一个元素都是字符串,因为它可以是列表,元组类型,并且其中的元素要出现在当前名称空间中(也可以是其它模块导入的)

接下来我们在 tools.py 文件中声明三个函数:

def show1():
    print("我是橡皮擦")

def show2():
    print("我是梦想橡皮擦")

def show3():
    print("我是大佬")

__all__ = ['show1', 'show2']

在另一个文件 use.py 中,使用 from tools import *,会发现只有 show1show2 函数被导入。

from tools import *

show1()
show2()
show3()

⛳️ 在数组中找到目标数字接近值

系统输入一个数组,然后给出一个目标数字,接下来计算数组中的任意两个数字之和,得到一个最接近目标数字的值。

先编写 Demo,提供一个目标数字 20,提供一个数组 [1,3,4,5,6,10,21],得到最接近的数字是 16。

  1. 将数字按照从小到大进行排序,大于等于目标数字的所有值,都被舍去。
  2. 依次迭代所有剩余数字,计算每 2 个数字之和,将所有结果存储到一个新的数组中
  3. 去除新数组中大于目标数字的所有数字
  4. 获取新数组中的最大数字。

将上述梳理出的逻辑,重现到代码中,得到如下所示结果。

arr = [1, 3, 4, 5, 6, 10, 21]
target = 20
arr = sorted(arr)
last_arr = [i for i in arr if i < target]
print("获取最终的数组如下")
print(last_arr)


# 计算所有数字之和
def get_score(new_arr):
    if len(new_arr) < 2:
        return []

    temp = []
    start = new_arr[0]

    for num in new_arr[1:]:
        item = start + num
        temp.append(item)
    return temp


all_totla = []
for index, item in enumerate(last_arr):
    all_totla += get_score(last_arr[index:])

# 重新排序
all_totla = sorted(all_totla)

# 获取最大值
last_o_arr = [i for i in all_totla if i < target]

print(last_o_arr[-1])

📣📣📣📣📣📣 🌻 本文如果发现错误,欢迎在评论区中指正哦 💗

欢迎大家订阅专栏 ⭐️ ⭐️ 《Python 爬虫 120》⭐️ ⭐️

标签: mo高压共轨传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司