Python基础_网络自动化
安装
下载 PyCharm: Python IDE for Professional Developers by JetBrains
⼀、变量、常量:
在程序运⾏中能变的叫变量;不变的叫常量。
【常量】
相对于其它语⾔(如C 等),Python 并没有严格定义常量这个概念。约定俗成⽤全⼤写表示。如 PI (圆周率
π),MAX_BYTES(TCP 窗⼝⼤⼩ 65535)
【变量】
1、变量随⽤随写,不⽤事先申明,可以来回赋值不同类型的值,切换⾃如,所以说 Python 很⽅便。除把变量
理解成⼀个篮⼦装东⻄外,我更喜欢把变量理解成⼀个标签纸,赋值给谁就贴在谁的头上。
a = 1
print(type(a))
print(a)
输出:
<class 'int'>
1
2、变量可以⼤⼩写、下划线开头,不要以数字,特殊符号开头。建议咱们⽇常以⼩写字⺟开头且能⻅名知意就
好,不要太标新⽴异搞特殊符号。
3、变量名是区分⼤⼩写的,⽐如 Aa、AA、aA 是不同的变量
4、Python 的保留字不能⽤做变量,⽐如 def 、while 、for ……。很难全记住不过也没必要全记住,其实咱们
敲下去的时候,是保留字的会变颜⾊!
⼆、⽅法、函数:
⼤致类似,在 Python 初学者来说甚⾄可以混⽤这个概念,我们可以把它们当成是⽣产⼯具,给点什么⽣产资料
下去,然后就可以⽣产出我们要的产品来。
函数不需要跟对象关联,⽅法需要跟对象关联。换个说法,⽤到⽅法,我们需要说⽤到【谁的】⽅法,⽽函数
不⽤。再换个说法,函数⼀般需要参数,⽅法不⼀定要参数。(这个可能要感悟琢磨⼀下哈,现在不理解⽆所
谓,按“⽣产⼯具”加“⽣产原料”输出“产品”来理解即可吧。
print(dir(int))
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
print(dir(str))
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
其实呢,⽅法可以是类和对象的概念,类⾥⾯有属性和⽅法,暂不扯远。⽆论函数还是⽅法,都可以理解成前
⼈经验总结后,封装好了做了⼀个整理归纳和沉淀,我们现在要什么功能就相应调⽤就可以了。⽐如轮⼦有
了,底盘有了,⽅向盘有了,发动机有了,那我们就开始组装⻋辆轻松上路吧。
⼩结:
⽂⾸我⾃⼰吹⽜说⾃⼰弄Python"若⼲年"了,这期内容看起来很基础很基础了,我跟着指令敲起来、笔记做起
来,依然还是有些东⻄是新学到的。我们学习就是要动起来,光看视频不操作的话效果⾮常有限,⼀定要结合
实践,做点笔记,边做边学。
三、字符串:
1.字符串的表示
- 单引号 ‘’
- 双引号 “”
- 三引号 ‘’‘’‘’
引号必须得是英⽂字符,误⽤中⽂字符会报错。如字符⻓度短的,⽤单引号或双引号(三引号也⾏),但是不
要混⽤,即不要⼀边单引,⼀边双引或三引。如字符⻓度⻓,要跨⾏那种,⼀般都⽤三引号。
str1 = 'huawei'
str2 = "Cisco"
str3 = '''风萧萧兮易水寒,壮士一去兮不复还。(复还 一作:复反)
探虎穴兮入蛟宫,仰天呼气兮成白虹。(此句疑为后人补作)'''
print(str1)
print(str2)
print(str3)
输出:
huawei
Cisco
风萧萧兮易水寒,壮士一去兮不复还。(复还 一作:复反)
探虎穴兮入蛟宫,仰天呼气兮成白虹。(此句疑为后人补作)
2. 字符串的拼接
字符串拼接⽤ + 号,主要类型要是 str ,字符串类型,结果也是字符串类型
print(str1 + str2)
输出:
huaweiCisco
有时候遇到⼀些⾮字符串类型的变量需要拼接,如数值 int 类型等,可以先将其转换成字符串,然后再按上⾯的
套路,⽤ + 号进⾏拼接处理。
statement1 = '网段192.168.0.0/24 有'
quantity = 60
statement2 = '用户'
all_str = statement1 + str(quantity) + statement2
print(all_str)
输出:
网段192.168.0.0/24 有60用户字符串的⽅法
3. 字符串的⽅法
字符串的⽅法超级⽆敌多,平时也⽤不了那么多,关键是常⽤的能掌握,很特殊的要⽤到会查怎么⽤。这⾥先
从常⻅的字符串⽅法⼊⼿吧。
upper()、lower()
upper() ⽅法是把字符串变量⾥是英⽂的⽆论⼤⼩写,统统给变成⼤写,然后返回⼀个新的对象。特别注意,它
是返回个结果⽽已
lower() ⽅法是把字符串变量⾥是英⽂的⽆论⼤⼩写,统统给变成小写,然后返回⼀个新的对象。特别注意,它
是返回个结果⽽已
strip()
去掉⼀个字符串左右两边的特定字符串(默认是空格,其实也可以是别的字符),然后新返回。strip()的同⻔
师兄弟还有:rstrip()去掉右边,lstrip()去掉左边。
ipaddress = ' 192.15.1.1 '
print(ipaddress)
print(ipaddress.strip())
输出:
192.15.1.1
192.15.1.1
count()
count() ⽅法返回字符串⾥⾯含有多少个()⾥⾯的参数,注意这个⽅法⼀定要带参数(argument),否则会报错。
print(ipaddress.count('1'))
输出:
4
input()
ipaddress = input('请输入ip地址 \n')
print(ipaddress)
输出:
请输入ip地址
1.1.1.1
1.1.1.1
startswith()、endswith()
从前⾯的例⼦顺着下来,童鞋们应该有点感觉了吧?“望⽂⽣义”也能知道个七七⼋⼋了。这⾥主要说⼀下
Python 有个数值类型叫布尔类型(bool),返回的是 True(1)、False(0),主要是⽤来做判断的。startswith()
就是判断字符串是否以()内参数开头。同理,好基友 endswith() ⾮常相似,不再赘述。
print(ipaddress.startswith('192'))
print(ipaddress.startswith('12'))
print(ipaddress.endswith('5.1.1'))
输出:
True
False
True
isdigit()
说到布尔值,⻢上继续再推进,Python ⽅法中,⼀般以 is 开头的,通常返回值就是个布尔值,⽤来做判断
的。isdigit() ⽅法是判断⼀个字符串(注意,它已经是⼀个字符串了),内容是不是可以表示1个整数数字,
print(ipaddress.isdigit())
输出:
False
isalpha()
isdigit() ⽅法判断是否为纯整数数字,isalpha() ⽅法则是来判断是否为纯字⺟的,他们的操作对象都是字符
串,字符串,字符串。(中文和字母都算)
四、数值类型:
5中类型(布尔型、整型、⻓整型、浮点型、复数) ,对于咱们⽹⼯来说,重点掌握前
【整型】不带⼩数点的正数或负数。⽐如设备的端⼝数、槽位数量等。
【浮点型】带⼩数点的正数或负数。⽐如内存利⽤率、链路利⽤率、CPU利⽤率、温度湿度等。
【布尔型】真(True,1);假(False,0),通常⽤作判断,配合分⽀语句,⽐如链路利⽤率超 70%,CPU
利⽤率超过 50%,维度超过 65°C……
五、数值运算:
+ | - | * | / | % | // | ** |
---|---|---|---|---|---|---|
地板除 | 求幂 |
a = 2 ** 2
print(a)
a = 12 // 10
print(a)
输出:
4
1
六、运算符与字符串互动:
前⾯我们已经学习了变量、字符串,现在我们联动数值运算复习下,温故⽽知新。
1、字符串与【*】联动,如下:
a = "huawei"
print(a*5)
输出:
huaweihuaweihuaweihuaweihuawei
2、分割线妙⽤,如下:
a = '********' * 3
print(a)
输出:
************************
3、字符串与【+】联动,如下:
print('asd '+'asd')
输出:
asd asd
4、统计,累加 +=
b = 1
b += 1
print(b)
输出:
2
七、列表概念与元素:
有序的集合,⽤中括号[]括起来,从[]空列表开始,你想装啥就装啥。
list = [1,'huawei',3,[1,2],5]
print(list[3])
输出:
[1, 2]
list = [1,2,3,[1,2],5]
print(list[-2])
输出:
[1, 2]
print(list[::3])
输出:
[1, [1, 2]]
print(len(list))
输出:
5
⼋、列表⽅法与函
range()
⼤神视频中说 range(5) 如果在 Python2 的话,直接是返回⼀个列表 [0,1,2,3,4],但是我们已经是 Python3
了,后⾯估计也⼀般不⽤接触到 Python2,知道有这个情况就好。在 Python3 中,range(5) 返回的是⼀个
range 类型对象。
(如果直接返回列表,会消耗计算机资源,⽐如 range(1000000000),妈呀,这个直接返回⼀个巨⻓的列表,
卡卡卡卡啊,所以 Python3 做了优化。)
a = range(5)
print(type(a))
输出:
<class 'range'>
for i in range(0,20,2):
print(i)
输出:
0
2
4
6
8
10
12
14
16
18
append()
这个⽅法在列表末位添加元素。
interfaces = []
interfaces.append('gi0/0/1')
interfaces.append('gi0/0/2')
interfaces.append('gi0/0/3')
interfaces.append('gi0/0/4')
interfaces.append('gi0/0/5')
for i in interfaces:
print(i)
输出:
gi0/0/1
gi0/0/2
gi0/0/3
gi0/0/4
gi0/0/5
insert()
append() ⽅法只能⽤在列表末位添加元素的场景,远远不能满⾜我们⽇常的⽣产应⽤啊。于是 insert() ⽅法出
来露露脸。
interfaces = []
interfaces.append('gi0/0/1')
interfaces.append('gi0/0/2')
interfaces.append('gi0/0/3')
interfaces.append('gi0/0/4')
interfaces.append('gi0/0/5')
interfaces.insert(2,'a')
for i in interfaces:
print(i)
输出:
gi0/0/1
gi0/0/2
a
gi0/0/3
gi0/0/4
gi0/0/5
pop()
有添加就得有移除啊,来来来,来个移除的⽅法,移除操作后那个元素作为返回值的,其实就是弹出来你可以
⽤另外⼀个变量把它接起来。
interfaces = []
interfaces.append('gi0/0/1')
interfaces.append('gi0/0/2')
interfaces.append('gi0/0/3')
interfaces.append('gi0/0/4')
interfaces.append('gi0/0/5')
interfaces.insert(2,'a')
interfaces.pop()
for i in interfaces:
print(i)
输出:
gi0/0/1
gi0/0/2
a
gi0/0/3
gi0/0/4
九、字典概念与元素
概念
Python 中,字典是有序(3.7前⽆序,3.7后有序)的键值对集合,⽤⼤括号表示,元素之间⽤逗号隔开。键、
值的数据类型还挺多样的,但⽹⼯来说,普遍是字符串、整形、浮点型。
dict = {‘Vendor’:‘Cisco’,‘Model’:‘WS-C3750E-48PD-S’,‘Ports’:48,‘IOS’:‘12.2(55)SE12’,‘CPU’:36.3}
dict = {'Vendor':'Cisco','Model':'WS-C3750E-48PD-S','IOS':'12.2(55)SE12','CPU':36.3}
定位元素
dict(‘键’) ->值
print(dict['Vendor'])
输出:
Cisco
增加、修改元素
dict(‘键’) = 值
dict['Vendor'] = 'huawei'
print(dict['Vendor'])
输出:
huawei
删除元素
del dict[‘键’],del 其实不是⽅法,也不是函数,是⼀个“语句”,也可以叫指令吧。另有⼀个⽅法 pop() 可实现类似功能。
⽅法和函数:
print(dict.keys())
print(dict.values())
print(dict.items())
print(dict.get('Vendor'))
输出:
dict_keys(['Vendor', 'Model', 'Ports', 'IOS', 'CPU'])
dict_values(['huawei', 'WS-C3750E-48PD-S', 48, '12.2(55)SE12', 36.3])
dict_items([('Vendor', 'huawei'), ('Model', 'WS-C3750E-48PD-S'), ('Ports', 48), ('IOS', '12.2(55)SE12'), ('CPU', 36.3)])
huawei
十 、布尔值概念
Python中的布尔值为True,False,主要作⽤是来判断条件是否成⽴。如果条件成⽴则Python返回True,否则
Python返回False。
print(1 == 1)
print(1 != 1)
print(1 >= 2)
print(1 <= 2)
print(1 > 1)
print(1 < 1)
输出:
True
False
False
True
False
False
逻辑运算符
and or not
print(1 == 1 and 1 == 2)
print(1 != 1 or 1 == 1)
print(not(1 >= 2))
输出:
False
True
True
成员运算符
not in、 in
a = 'huawei'
b = 'h'
c = 'q'
print(b in a)
print(c not in a)
输出:
True
True
bool()
对所有为空的对象,永远返回False。
help(bool)
Help on class bool in module builtins:
class bool(int)
| bool(x) -> bool
|
| Returns True when the argument x is true, False otherwise.
| The builtins True and False are the only two instances of the class bool.
| The class bool is a subclass of the class int, and cannot be subclassed.
|
| Method resolution order:
| bool
| int
| object
| ……
十一、 集合
Python中,“集合”可以说是特殊的列表。列表可以有重复的元素,⽽集合不允许这样。另外,集合是⽆序的。字典则是有序的、带键值对的集合。
a = {"1.1.1","1.1.1","2.2.2"}
print(a)
输出:
{'1.1.1', '2.2.2'}
⽆序不能索引,⾃然也没办法定位。
C:\Users\82127\.conda\envs\pythonProject\python.exe E:/log/python/pythonProject/main.py
File "E:\log\python\pythonProject\main.py", line 2
print(a{0})
^
SyntaxError: invalid syntax
add()
给集合增加元素。
a = {"1.1.1","1.1.1","2.2.2"}
a.add("1.2.3")
print(a)
输出:
{'2.2.2', '1.2.3', '1.1.1'}
remove()
给集合删除元素。
a = {"1.1.1","1.1.1","2.2.2"}
a.remove("2.2.2")
print(a)
输出:
{'1.1.1'}
rozenset()
十二、元组
也是特殊的列表,是⼀个⼀旦创建了,就“加不了”、“删不掉”元素的列表,但它有序的,可重复。
建元组的两种⽅法如下:
vendors1 = ('Cisco','Juniper','Huawei')
vendors2 = tuple(('Cisco','Juniper','Huawei'))
print(vendors2)
print(vendors1)
print(type(vendors2))
输出
('Cisco', 'Juniper', 'Huawei')
('Cisco', 'Juniper', 'Huawei')
<class 'tuple'>
index()
vendors2 = tuple(('Cisco','Juniper','Huawei'))
print(vendors2.index("Huawei"))
输出:
2
count()
print(vendors2.count("Huawei"))
输出:
1
⼩结