转载:知乎朱嘉盛“网工手艺”专栏
https://www.zhihu.com/people/zhu-jia-sheng-71
image.png
《网工工程师python之路》作者王印,知乎艺名:弈心
B站视频课程链接:https://www.bilibili.com/video/BV1gf4y1p7Kz
接上篇:网工Python之路之基础笔记(一)



布尔值概念

计算机0和1组成,数字电路高低电平。《易经》围绕阴阳铺开。《道德经》提及了“有无相生,难易相成,长短相较,高下相倾,音声相和,前后相随。”
Python中的布尔值为True,False,主要作用是来判断条件是否成立。如果条件成立则Python返回True,否则Python返回False。
首字母必须大写,如果写成true,false了,就不是布尔值,而可能是变量名(不过不建议变量名用这些= =)
来说再多不如来动手敲一敲。
image.png

与布尔运算相关运算符

  • 比较运算符 | 运算符 | 中文含义 | 备注 | | —- | —- | —- | | == | 等于 | 特别注意,=是赋值号,不是等于号 | | != | 不等于 |

    | | > | 大于 |

    | | < | 小于 |

    | | >= | 大于等于 | “小于”或者“等于” | | <= | 小于等于 | “大于”或者“等于” |

还是那句话,来说再多不如来动手敲一敲。
image.png

  • 逻辑运算符 | 运算符 | 中文含义 | 备注 | | —- | —- | —- | | and | 与运算 | and左右两边要同时成立 | | or | 或运算 | and左右两边任一成立即可 | | not | 非运算 | 取反操作 |

敲敲敲!
image.png

  • 成员运算符 | 运算符 | 中文含义 | 备注 | | —- | —- | —- | | in | 被包含 | 前是仔,后是母 | | not in | 不被包含 | 留意“被”字 |

我想作为网络工程师,这些的返回稍微敲一敲体验下就能理解到位。这两个成员运算符在Python自动化运维中,经常被我们用在判断设备CLI回显报文是否满足要求的场景。
image.png

  • bool()

对所有为空的对象,永远返回False。

**
解释
None
0 整数零
0.0 浮点数零
0j 长整型零
‘’ 空字符串
[] 空列表
{} 空字典
() 空元组

上面的敲啥都能返回Fasle,大家敲一下就知道了,我就不贴图了。
我们来看下面的。最开始会不会觉得有点绕,再想想就可以理解了。
image.png
我们可以用help(bool)看看python怎么定义bool的。

集合

Python中,“集合”可以说是特殊的列表。列表可以有重复的元素,而集合不允许这样。另外,集合是无序的。字典则是有序的、带键值对的集合。
image.png
无序不能索引,自然也没办法定位。来,看这个。
image.png
我们使用集合基本上就是围绕着它“不重复”、“无序”这两个特点。

  • add()

给集合增加元素。
image.png

  • remove()

给集合删除元素。
image.png

  • rozenset()

冻结集合,顾名思义,保持不变。总结个口诀吧“加不了,删不掉”!来,敲一下感受下。
image.png

元组

元组也是特殊的列表,是一个一旦创建了,就“加不了”、“删不掉”元素的列表,但它有序的,可重复。
建元组的两种方法如下:
vendors1 = (‘Cisco’,’Juniper’,’Huawei’)
vendors2 = tuple((‘Cisco’,’Juniper’,’Huawei’))
image.png
看一下元组的类型。
image.png

  • 切片,索引

它是有序的,那么索引啊,切片啊就跟列表是一模一样的。不多说了,我们直接来体验一把。
image.png

  • 不能增删改

列表中涉及的一些增删改操作,我们在元组中全部失效。这块是不是就有点像frozenset()了呀?!实际上,如果我们确实要改变一个元组的内容,可以重新组合下构建一个新的元组,然后再赋值给原来的那个变量。(假装对元组进行了修改= =哈哈)
image.png

  • index()

通过元素的值来定位元素的索引号。
image.png
如果元素是重复的,通过元素的值进行index,则返回最小的索引序号。
image.png

  • count()

计算元组中同个元素的个数。换句话说,就是一个元组中,某个元素重复了几次。
image.png

小结

frozenset()集合日常使用很少吧,反正我没用过。需要固定不变,我们就用元组就好了。知道有frozenset()集合的意义可能在于哪天可以看懂别人的代码吧。下面我做了个表总结下列表、元组、集合、frozenset的差别。

比较 有序 可重复 增删改 索引、切片 index()
列表
元组 ×
集合 × × × ×
frozenset × × × × ×

顺便提一句,网络工程师经常用set()来对一些数据做去重操作(比较牛逼的说法叫“把数据洗一下”、“洗数据”)。比如原始记录有很多不同的IP地址对应少数几个网络号,只需要网络号的话,set()一下就出来。
广告

image.pngimage.png