Python笔记
Python学习笔记
第一章 搭建Python编程环境
1.1 安装Python、Sublime Text
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:21:23) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> printf("hello world!")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'printf' is not defined
>>> print("hello world!")
hello world!
开局手残printf直接error可还行
-
好喜欢Sublime的界面
1.2 在终端运行Python程序
使用命令cd(表示change directly,即切换目录)在文件系统中导航
使用命令dir(表示directory,即目录)可以显示当前目录中的所有文件
PS C:\Users\13666> cd Desktop\pythonwork
PS C:\Users\13666\Desktop\pythonwork> dir
目录: C:\Users\13666\Desktop\pythonwork
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/1/28 14:09 21 hello_world
PS C:\Users\13666\Desktop\pythonwork> python hello_world
helloworld
第二章 变量和简单数据类型
2.1 变量的命名
老生常谈了
- 变量名只能包含字母、数字和下划线。变量名只能以字母或下划线打头
- 变量名不能包含空格
- 关键字不能作为变量名
- 变量名应简短又具有描述性。命名abcd就挺捞的而且字面上看不出意义
- 慎用字母l和大写字母O,避免混淆
2.2 字符串
-
在python中,用引号括起来的都是字符串其中引号可以是单引号也可以是双引号
name="yu exungsh" print(name.title())
title()以首字母大写的方式显示每一个单词
upper()//全部大写
lower()//全部小写
2.2.1 f字符串
要在字符串中插入变量的值,可在前引号前加上字母f,再将要插入的变量放在花括号内。这样,当python显示字符串时,将把每个变量都替换为其值
first_name = "yu"
last_name = "exungsh"
full_name = f"{first_name}{last_name}"
print(full_name)
输出:yu exungsh
2.2.2 删除字符串两边空白
rstrip() //删除末尾空白
lstrip() //删除开头空白
strip() //删除两边空白
注意删除必须关联到变量
example = example.strip()
2.3 数
2.3.1 整数
python使用两个乘号表示乘法运算
>>>3 ** 3
27
2.3.2 浮点数
将任意两个数相除时,结果总是浮点数,即便这两个数都是整数且能相除(这个跟C还蛮不一样的诶)
-
数中的下划线
1000和100_0没什么不同,适用于整数和浮点数
2.3.3 同时给多个变量赋值
>>> x, y, z = 0, 0, 0
2.3.4 常量
在代码中,要指出应将特定的变量视为常量,可将其字母全部大写
NAME = "Exungsh"
2.4 注释
在python中,注释用井号(#)标识(只能注释一行,和C中 // 相似)
#I'm Exungsh
通过注释以清晰的自然语言对解决方案进行概述
2.5 The Zen of Python
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
第三章 列表简介
3.1 列表是什么
列表时一系列按特定顺序排列的元素组成,其中元素之间可以没有任何关系
3.1.1 访问列表元素
Hogwarts = ['Gryffindor','Hufflepuff','Ravenclaw','Slytherin']
print(Hogwarts[0])
输出结果为 Azkaban Gryffindor
也可以运用第二章的内容
print(Hogwarts[0].lower())
输出结果相同,只不过首字母被改为了小写
3.1.2 索引从0而不是1开始
-
特殊的点:python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1,可让python返回最后一个列表元素
这种约定适用于其他负数索引,比如-2返回倒数第二个列表元素
3.1.3 使用列表中的各个值
print(f"I'm in {Hogwarts[-1]}!!!")
>>> I'm in Slytherin!!!
3.2 修改、添加和删除元素
3.2.1 修改
Hogwarts = ['Gryffindor','Hufflepuff','Ravenclaw','Slytherin']
Hogwarts[0]='Azkaban'#对不起!
3.2.2 添加
Hogwarts = ['Gryffindor','Hufflepuff','Ravenclaw','Slytherin']
Hogwarts.append('Azkaban')
方法append()将元素添加到列表末尾(有点像C++的push_back)
3.2.3 插入
Hogwarts = ['Gryffindor','Hufflepuff','Ravenclaw','Slytherin']
Hogwarts.insert(0,'Azkaban')
insert()可以在列表任何位置添加新元素
例子中方法insert()在索引0处添加空间,存入'Azkaban'。这种操作将列表中既有的每个元素都右移了一个位置
3.2.4 删除
3.2.4.1 使用del语句删除元素
-
如果知道要删除元素所在位置,使用del
Hogwarts = ['Gryffindor','Hufflepuff','Ravenclaw','Slytherin'] Hogwarts.insert(0,'Azkaban') del Hogwarts[0]
Azkaban刚加进来就被删了
-
如果不知道 那就没办法
3.2.4.2 使用方法pop()删除元素
-
弹出任意位置元素
Hogwarts = ['Gryffindor','Hufflepuff','Ravenclaw','Slytherin'] winner = Hogwarts.pop(0)
谁是winner?
如果你不确定该用del语句还是pop()方法,下面是一个简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()
3.2.4.3 根据值删除元素
如果只知道要删除元素的值,可使用方法remove()
Hogwarts = ['Gryffindor','Hufflepuff','Ravenclaw','Slytherin']
Hogwarts.insert(0,'Azkaban')
Hogwarts.remove('Azkaban')
Azkaban刚加进来就被删了
注意:方法remove()只删除第一个指定的值。如果要删除的值可能在列表出现多次,就需要使用循环来确保每个值都删除
3.3 组织列表
3.3.1 使用方法sort()对列表永久排序
-
python方法sort()让你能够将列表元素按照字母顺序排列,且再也无法恢复到原来的排列顺序
-
也可以按照与字母顺序相反的顺序排列,只需要向sort()方法传递参数reverse=True即可,一样是永久性的
Hogwarts.sort() Hogwarts.sort(reverse=True) #结果为与字母顺序相反的排序列表
3.3.2 使用函数sorted()对列表临时排序
- 函数sorted()让你能够按照特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。即调用函数输出排序后的结果但不改变原来的顺序
- 也可以按照与字母顺序相反的顺序排列,只需要向sorted()函数传递参数reverse=True即可
3.3.3 倒着打印列表
使用方法reverse()反转列表元素排列顺序,永久性。但是可逆,再次调用reverse()即可。
Hogwarts.reverse()
3.3.4 确定列表长度
使用len()快速获悉列表的长度
>>> len(Hogwarts)
4
第四章 操作列表
4.1 遍历整个列表
magicians = ['kangkang','lihua','xiaoming']
for magician in magicians:
print(magician)
输出:
kangkang
lihua
xiaoming
for循环让python从列表magicians中取出一个名字,并将其与变量magician相关联。最后,打印前面赋给变量magician的名字。(有点C++范围for的感觉)
4.1.1 在for循环中执行更多操作
C语言中for循环如果要执行多行代码,会用花括号括起来。在python中在代码行 for magician in magicians 后面,每个缩进的代码行都是循环的一部分
4.1.2 在for循环结束后执行一些操作
取消缩进呗
4.2 避免缩进错误
-
忘记缩进
-
不必要缩进
message = "hello world" print(message) #错误,print()无需缩进,它并非循环的组成部分
-
循环后不必要缩进
把循环外的代码打在循环里了
-
遗漏了冒号
4.3 创建数值列表
4.3.1 使用函数range()
rang(1,5)只打印1~4,这是编程语言常见的差一行为的结果
-
使用range()时,如果输出不符合预期,请尝试将指定的值加1或减1
-
调用函数range()时,也可只指定一个参数,这样它将从0开始,例如,range(6)返回数0~5
for value in range(1,6): print(value)
4.3.2 使用range()创建数字列表
要创建数字列表,可使用函数list()将range()的结果直接转换为列表。如果将range()作为list()的参数,输出的将是一个数字列表
numbers = list(range(1,6))
print(numbers)
使用函数range()时,还可以指定步长。为此,可给这个函数指定第三个参数,python将根据这个步长来生成数
例如下面的代码打印1~10的偶数
even_numbers = list(range(2,11,2))
print(even_numbers)
更进一步:
squares = []
for value in range(1,11):
squares.append(value ** 2)
print(squares)
列表包含1~10的平方
4.3.3 对数字列表执行简单的统计计算
>>>digits = list(range(10))
>>>min(digits)
0
>>>max(digits)
9
>>>sum(digits)
45
这个功能比C香多了
4.3.4 列表解析
前面生成包含1~10的平方的列表square的代码有三四行,而列表解析让你只需编写一行代码就能生成这样的列表
squares = [value**2 for value in range(1,11)]
print(squares)
语法:先指定一个列表名,如square,然后指定一个左方括号,并定义一个表达式,用于生成要存储到列表中的值。在这个示例中,表达式为value**2。*注意这里的for语句末尾没有冒号
4.4 使用列表的一部分
处理列表中的部分元素,python称之为切片
4.4.1 切片
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数rang()一样,python在达到第二个索引之前的元素后停止。要输出前三个,需要指定索引0和3,这将返回索引0,1,2的元素
players = ['kangkang','lihua','xiaoming','exungsh','harry']
print(players[0:3])#打印索引0~2元素(和range类似有差一行为)
print(players[3])#同上
print(players[:4])#从头开始打印,到索引4停止,即索引0~3
print(players[2:])#从索引2开始打印,直到列表结束,即索引2~4
print(players[-3:])#从倒数第三个开始打印,直到列表结束
注意:可在表示切片的方括号内指定第三个值。这个值告诉python在指定范围内每隔多少元素提取一个
4.4.2 遍历切片
players = ['kangkang','lihua','xiaoming','exungsh','harry']
for player in players[3]:
print(player.title())
4.4.3 复制列表
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引 ( [ : ] ) 。这让python创建一个始于第一个元素、终于最后一个元素的切片,即整个列表的副本。
food = ['pizza','bread','rice']
my_food = food[:]
运行后food和my_food是两个内容相同,但是完全独立的列表,可以各自修改
但是如果忘记了加 [ : ] ,则完全不同
my_food = food
这种预付实际上是让python将新变量my_food关联到food,因此这两个变量指向同一个列表(与C++中的引用相似)
4.5 元组
有时你需要创建一系列不可修改的元素,元组可以满足这种需求。python将不能修改的值称为不可变的,而不可变的列表被称为元组。
定义元组
元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可使用索引来访问其元素,就像访问列表元素一样。
square = (200,50)
square[1]=100#错误
如果试图修改square中元素的值,将会报错。
严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果定义一个只包含一个元素的元组,必须在这个元素后面加上逗号:
test = (1,)
4.5.2 遍历元组中的所有值
像列表一样,也可以使用for循环遍历元组中的所有值,在此处不再赘述,可参考4.1 遍历整个列表
4.5.3 修改元组变量
虽然不能修改元组的元素,但是可以给储存运足的变量赋值。因此,如果要修改前述square,可重新定义整个元组
square = (200,50)
square = (200,100)
这是合法的。就这就这?搁这曲线救国呢
第五章 if语句
5.1 一个简单示例
cars = ['audi','bmw','toyota']
for car in cars:
if car == 'bmw':
print(car.upper())
else:
print(car.title())
我觉得主要还是缩进和格式的问题,要注意缩进以及冒号有没有漏打
5.2 条件测试
与C相同部分不再赘述,如==判断是否相等,!=判断是否不相等
特殊的:
5.2.1 检查多个条件
-
使用and检查多个条件
等同于&&
-
使用or检查多个条件
等同于||
5.2.2 检查特定值是否包含在列表中
要判断特定值是否已包含在列表中,可使用关键字in
>>>cars = ['audi','bmw','toyota']
>>>'audi' in cars
True
>>>'benz' in cars
False
5.2.3 检查特定值是否不包含在列表中
使用not in
好家伙言简意赅
5.2.4 布尔表达式
布尔表达式不过是条件测试的别名。与条件表达式一样,布尔表达式的结果要么为True,要么为False。
game_active = True
can_edit = False
5.3 if语句
5.3.1 简单的if语句
if condition:
do something
5.3.2 if-else语句
if condition:
do something
else:
do something else
5.3.3 if-elif-else结构
if ...:
do something
elif ...:
do something
elif ...:
do something
else ...:
do something
5.4 使用if语句处理列表
5.4.1 确定列表不是空的
if 列表名
如果非空返回ture
5.4.2 设置if语句的格式
唯一建议是在诸如==、>=、<=等比较运算符两边各加一个空格,增加代码可读性
第六章 字典
6.1 使用字典
在python中,字典是一系列键值对。每个键都和一个值相关联。你可以使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可以将任何python对象用作字典的值。
在python中,字典用放在花括号({})中的一系列键值对表示
inf = {'xing':'yu','ming':'xusheng','num':'032002337'}
键值对是两个相关联的值。指定键时,python将返回与之相关联的值。键和值之间用冒号分隔,而键值对之间用逗号分隔。
6.1.1 访问字典中的值
要获取与键相关联的值,可依次指定字典名和放在方括号内的键,如下所示:
inf = {'xing':'yu','ming':'xusheng','num':'032002337'}
print(inf['num'])
将返回字典inf中与 'num' 相关联的值:032002337
6.1.2 添加键值对
inf = {'xing':'yu','ming':'xusheng','num':'032002337'}
inf['class']=three
print(inf)
最后输出结果为:
inf = {'xing':'yu','ming':'xusheng','num':'032002337',class:'three'}
6.1.3 修改字典中的值
inf['class']='six'#我去六班找lygg
6.1.4 删除键值对
使用del语句删除不需要的信息,必须指定字典名和要删除的键
del inf['class']
6.1.5 由类似对象组成的字典
字典内容很多要分多行时:
输入左花括号后按回车,Tab,指定第一个键值对,并在后面加上逗号,回车,以此类推。
6.1.6 使用get()来访问值
使用键从字典访问值时,可能会引发问题:如果指定的键不存在就会出错。
inf = {'xing':'yu','ming':'xusheng','num':'032002337'}
school = inf.get('school','FZU')
如果字典有键 'school' ,将获得与之相关联的值;如果没有,将获得指定的默认值,比如此时会返回 'FZU' 。
如果指定的键有可能不存在,应考虑使用方法get()
调用get()时,如果没有指定第二个参数且指定的键不存在,python将返回值None,这个特殊值表示没有相对应的值。
6.2 遍历字典
6.2.1 遍历所有键值对
要编写遍历字典的for循环,可声明两个变量,用于存储键值对中的键和值。这两个变量可以使用任意名称。
inf = {'xing':'yu','ming':'xusheng','num':'032002337'}
for a,b in inf.items():
print(f"\na:{a}")
print(f"b:{b}")
输出结果:
a:xing
b:yu
a:ming
b:xusheng
a:num
b:032002337
for语句的第二部分包含字典名和方法items(),它返回一个键值对列表。接下来,for循环依次将每个键值对赋给指定的两个变量。
为节省时间不再继续记录笔记
python笔记暂时告一段落,后期继续学习会继续补充,python学习耗时两天半,比预计多了半天
pkts_file=rdpcap(‘test’)
pkt_list=pkts_file.res
dos_dict={}
for packet in pkt_list:
try:
if packet.getlayer(TCP).fields[‘flags’]==2:
source_ip = packet.getlayer(IP).fields[‘src’]
destination_ip = packet.getlayer(IP).fields[‘dst’]
destination_port = packet.getlayer(TCP).fields[‘’dport]
conn = source_ip,destination_ip,destination_port
conn_counts = dos_dict.get(conn,0)
dos_dict[conn] = conn_counts + 1