Python安全攻防之第二章Python语言基础

news2024/11/16 19:45:19

2.3 Python模块的安装与使用

  1. python模块的安装

pip3 install 模块名称

py -3 -m pip install 模块名称

  1. python模块的导入与使用

(1)Import模块名称

采用“Import模块名称”方式时,需要在对象前面加上模块名称作为前缀,具体形式为“模块名称.对象”,如下列命令所示:

(2)From 模块名称 import 对象名

使用“From模块名称import对象名”方式仅导入明确指定的对象,这样可以使程序员只输入少量的代码,并且不需要使用模块名称作为前缀

虽然此方法有很多好处,但是如果多个模块中有同名的对象,这种方式将导致只有最后一个导入的模块中的同名对象生效。

2.4 Python序列

python序列:列表、元组、字典

2.4.1 列表

方括号的叫列表[]

(1)创建列表

(2)删除列表

(3)在列表尾部添加元素

list.append(需要添加的元素)

list.extend(需要添加的列表)

(4)在列表的指定位置插入元素

list.insert(7,demo)

(5)删除列表中首次出现的元素

list.remove(0)

(6)删除并返回被删除元素的下标

list.pop() 默认删除最后一个元素

list.pop(0) 删除下标为0的元素

(7)统计并返回该元素在列表中的数量

list.count()

(8)将列表list中的所有元素逆

list.reverse()

(9)对列表中list中的元素进行排序

key:用来指定排序一局

reverse:False升序、True降序

2.4.2 元组

元组中的所有元素都在一对圆括号中,元素之间用逗号隔开。

元组与列表不同,元组属于不可变序列,一旦创建后便无法对元素进行增删改查,

1、元素的访问速度要比列表快得多。

2、由于不能更改元组中的元素,其代码更加安全。

2.4.3 字典

不同于在渗透测试中使用的字典,Python中的字典是包含若干“键:值”元素的可变序列,字典中的每一个元素都包含用冒号分开的“键”和“值”,不同元素之间用逗号隔开,所有元素放在一对大括号“{”和“}”中。另外,需要注意的是字典中的“键”不能重复,而“值”可以重复。

(1)通过dict()创建字典

(2)修改字典中的元素

dic['age']=24

(3)为字典添加新元素

dic['hobby']='game'

(4)返回字典中的所有元素

dic.items()

(5)删除字典中的元素

del dic['sex']

2.5 Python控制结构

顺序结构:

条件结构:

循环结构:是通过重复有规律性的操作,从而减少代码量,使代码表达更为简洁

2.5.1 选择结构

print('please input your scores:')
score=int(input())
if(score>80):
    print('优秀')
if(score>=60):
    print('及格')
if(score<60):
    print('不及格')

2.5.2 循环结构

  1. for循环

当循环次数有界限时,即知道要循环多少次时,用for循环

用for循环求解1+2+3+ …+100

sum=0
for i in (1,99):
    sum=sum+i
print(sum)

2.while循环

当循环次数无界限时使用while循环。

print('please input a num:')
x=int(input())
i=0
sum=0
while i<=x:
    sum=sum+i
    i=i+1
print(sum)
print('please input a num:')
x=int(input())
sum=0
while x!=0:
    sum=sum+x
    x=x-1
else:
    print(sum)

2.6 文件处理

文本文件中存储的是常规字符串,由文本行组成,每行通常由换行符“\n”结尾。

  1. 打开文件并创建对象

通过open()函数就可以指定模式打开指定文件,并创建文件对象,

open(file[, mode='r'[, buffering=-1]])

buffering:指定读写文件的缓冲模式,数值为0表示不缓存,数值为1表示使

用行缓存模式,数值大于1表示缓冲区的大小,默认值为-1。

二进制文件和非交互文本文件以固定大小的块为缓冲单位,等价于io。

  1. 对文件内容进行操作

(1)向文本文件中写入内容

w:写入模式。文件存在会清空文件,文件不存在,会创建文件

x:写入模式。文件存在会抛出异常,文件不存在,会创建文件

a:追加模式。也是写入模式的一种,不覆盖原文件,会追加到原文件后面。

s='hello world!\n'
f=open('demo.txt','x')
f.write(s)
f.close()

(2)读取文件中的内容

r:读模式(默认模式,可以省略),如果文件不存在,则抛出异常。

·+:读写模式(可与其他模式组合使用)。

f=open('demo.txt','r')
print(f.readline())
print(f.read())

readline():读取第一行

read():读取全部内容

3.关闭文件对象

当操作完文件内容以后,一定要关闭文件对象,这样才能确保所做的修改都保存到了文件当中

f.close()

文件操作一般都要遵循“打开→读写→关闭”的基本流程,但是如果文件读写

操作代码引发了异常,就很难保证文件能够被正常关闭。可以使用上下文管理关

键字with来避免产生这个问题。关键字with能够自动管理资源,总能保证文件正

确关闭,并且可以在代码执行结束后自动还原开始执行代码块时的现场。

with open('demo.txt','a') as f:
    f.write('hello world \n')
    

2.7 异常处理结构

Python中提供了很多不同形式的异常处理结构,其基本思路都是先尝试执行

代码,再处理可能发生的错误。

1.try…except…结构

try子句中的代码块为可能引发异常的语句,except子句用来捕获相应的异常。也可以解

释为,当try子句代码块执行异常并且被except子句捕获时,执行except子句的代码块

score=input('请输入成绩:')
try:
    score=int(score)
    if(60<score<100):
        print('及格了')
    else:
        print('没及格')
except Exception as e:
    print('你的输入有误')

2.try…except…else…结构

如果try中的代码出现异常,则执行except中的异常处理代码。

如果没有异常,则执行else中的代码

score=input('请输入成绩:')
try:
    score=int(score)
except Exception as e:
    print('输入的数值有误会')
else:
    if(60<score<100):
        print('及格了')
    else:
        print('没及格')

3.try…except…finally…结构

在try…except…finally…结构中,无论try子句是否正常执行,finally子句中的代码块总会得到执行。在日常开发过程中,该结构通常用来做清理工作,释放try子句中申请的资源。

a=int(input('a:'))
b=int(input('b:'))
try:
    div=a/b
    print(div)
except Exception as e:
    print('error')
finally:
    print('finally')

2.8 Socket网络编程

Socket是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立了一个通信管道。

在实际应用中,一些远程管理软件和网络安全软件大多依赖于Socket来实现特定功能,由于TCP(Transmission Control Protocol,传输控制协议)方式在网络编程中应用得非常频繁,此处将对TCP编程进行讲解并给出具体应用实例。

编写TCP时一般会用到的Socket模块,其方法主要包括:

·connect(address):连接远程计算机。

·send(bytes[,flags]):发送数据。

·recv(bufsize[,flags]):接收数据。

·bind(address):绑定地址。

·listen(backlog):开始监听,等待客户端连接。

·accept():响应客户端的一个请求,接受一个连接。

使用TCP进行通信,首先需要在客户端和服务端建立连接,并且要在通信结束后关闭连接以释放资源。由于TCP是面向连接的,因此相对于UDP提供更高的可靠性。下面通过示例展示如何通过TCP进行通信。

例如,设计一个对话系统“小艾”。该应用分为两部分,一部分为服务端,一部分为客户端。客户端发送请求信息,服务端返回应答信息。两部分的代码如下所示

#服务端代码
import socket
language={'what is your name':'I am Tom','how old are you':'25','bye':'bye!'}
host="127.0.0.1"
port=4444
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port)) //绑定地址
s.listen(1) //开启监听
print('listen at port 4444')
conn,addr=s.accept() //接受客户端请求
print('Connect by:',addr)
while True:
    data=conn.recv(1024) //接收数据
    data=data.decode()
    if not data:
        break
    print('Received message:',data)
    conn.sendall(language.get(data,'Nothing').encode()) //发送数据
    print(language.get(data,'Nothing'))
conn.close()
s.close()
import socket,sys
host="127.0.0.1"
port=4444
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
    s.connect((host,port)) //链接远程计算机
except Exception as e:
    print('server not found!')
    sys.exit()
while True:
    c=input('you say:')
    s.sendall(c.encode()) //发送数据
    data=s.recv(1024) //接受数据
    data=data.decode()
    print('Received:',data)
    if c.lower()=='再见':
        break

运行服务端:

运行客户端:

服务端根据建立的字典进行自动回复:

2.9 可执行文件的转换

将python程序打包成exe。

工具:PyInstaller

注意:用PyInstaller打包的执行文件,只能在与执行打包操作的系统类型相同的环境下运行。也就是说,这样的执行文件不具备可移植性,

2.9.1 在Windows系统下转换

  1. 下载:(https://pypi.org/project/PyInstaller)

  1. 安装: python setup.py install

  1. 打包:pyinstaller -F -i snail.ico shy.py

2.9.2 在Linux系统下转换

  1. 安装: python3 setup.py install

  1. 打包:pyinstaller -F shy.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nextcloud去掉URL中的index.php以及强制https(Win10子系统WSL)

一、Nextcloud去掉URL中的index.php 1、启用相关模块 cd /var/www/nextcloud #进入程序目录sudo chmod -R 777 .htaccess #设置.htaccess文件权限可读写sudo a2enmod envaudo a2enmod rewrite #启用rewrite模块2、修改nextcloud配置文件 vim /var/www/nextcloud/config/…

Redis数据备份与恢复

Redis数据备份与恢复 文章目录Redis数据备份与恢复1. Redis备份的方式2. RDB持久化2.1 什么是RDB&#xff1f;2.2 Fork操作2.3 save VS bgsave2.4 关于RDB备份的一些配置项2.5 RDB的备份与恢复2.6 RDB的自动触发2.7 RDB的优势与劣势3. AOF持久化3.1 什么是AOF&#xff1f;3.2 A…

hypothesis testing假设检验

假设检验是什么 比如一家巧克力工厂生产的巧克力每个1g&#xff0c;一个工人说&#xff0c;机器在维修之后生产的巧克力不是1g&#xff0c;为了验证工人说的是否正确&#xff0c;需进行假设检验。 随机挑选50个巧克力&#xff0c;计算平均重量。 H0&#xff1a;每个巧克力1g H…

Seatunnel-2.3.0源码解析

一、概述 SeaTunnel是一个简单易用的数据集成框架&#xff0c;在企业中&#xff0c;由于开发时间或开发部门不通用&#xff0c;往往有多个异构的、运行在不同的软硬件平台上的信息系统同时运行。数据集成是把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中&#x…

Spring学习笔记(二)【CGLIB浅拷贝BeanCopier的使用和详解】

CGLIB浅拷贝BeanCopier的使用和详解 一、bean拷贝工具 bean拷贝工具类比较 常用的bean拷贝工具类当中&#xff0c;主要有Apache提供的beanUtils、Spring提供的beanUtils、Cglib提供的beanCopier&#xff0c;性能上分析如下表所示&#xff08;该表来自网上的数据&#xff09; …

探索Apache Hudi核心概念 (3) - Compaction

Compaction是MOR表的一项核心机制&#xff0c;Hudi利用Compaction将MOR表产生的Log File合并到新的Base File中。本文我们会通过Notebook介绍并演示Compaction的运行机制&#xff0c;帮助您理解其工作原理和相关配置。 1. 运行 Notebook 本文使用的Notebook是&#xff1a;《A…

此战成硕,我成功上岸西南交通大学了~~~

友友们&#xff0c;好久不见&#xff0c;很长时间没有更一个正式点的文章了&#xff01; 是因为我在去年年底忙着准备初试&#xff0c;今年年初在准备复试&#xff0c;直到3月底拟录取后&#xff0c;终于可以写下这篇上岸贴&#xff0c;和大家分享一下考研至上岸的一个过程 文章…

springboot+thymeleaf实现发Html邮件自由

2019年&#xff0c;我刚接触测试架构和测试开发类的工作时&#xff0c;经常会有自动化发邮件的功能&#xff0c;大都是从各个平台自动化统计一些数据出来&#xff0c;每周定时发一封邮件给领导交差&#xff0c;回过头来再看看我发的邮件&#xff0c;不美观&#xff0c;不专业。…

Android Jetpack:现代化Android开发的利器

Android Jetpack&#xff1a;现代化Android开发的利器 引言 随着移动应用的快速发展和用户体验的不断提升&#xff0c;现代化的Android应用开发变得愈发复杂和多样化。为了提高开发效率、简化代码、加速应用迭代&#xff0c;Google推出了Android Jetpack组件&#xff0c;成为现…

springboot零基础到项目实战

推荐教程&#xff1a; springboot零基础到项目实战 SpringBoot这门技术课程所包含的技术点其实并不是很多&#xff0c;但是围绕着SpringBoot的周边知识&#xff0c;也就是SpringBoot整合其他技术&#xff0c;这样的知识量很大&#xff0c;例如SpringBoot整合MyBatis等等。因此…

gitlab-ce升级方法

Centos7升级gitlab-ce&#xff1a; 1、记录当前版本 在升级前一定要做好备份&#xff0c;记录自己当前的gitlab-ce的版本&#xff1a; yum list | grep gitlab-ce 2、编辑/etc/gitlab/gitlab.rb文件&#xff1a; 1&#xff09;将下面几行注释取消。 说明&#xff1a; 1&am…

pytorch进阶学习(二):使用DataLoader读取自己的数据集

上一节使用的是官方数据集fashionminist进行训练&#xff0c;这节课使用自己搜集的数据集来进行数据的获取和训练。所需资源教学视频&#xff1a;https://www.bilibili.com/video/BV1by4y1b7hX/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_sourc…

建立数据驱动,关键字驱动和混合Selenium框架这些你了解吗

一、什么是Selenium框架&#xff1f; Selenium框架是一种代码结构&#xff0c;用于简化代码维护和提高代码可读性。框架涉及将整个代码分成较小的代码段&#xff0c;以测试特定的功能。 该代码的结构使得“数据集”与实际的“测试用例”分开&#xff0c;后者将测试Web应用程序…

【PyTorch】第八节:数据的预处理

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;PyTorch 描述&#x1f3a8;&#xff1a;PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算数&#…

【NVIDIA GPU 入门】综述

系列文章目录 文章目录系列文章目录前言一、概述二、GPU架构基础2.1 GPU概述2.2 GPU的架构2.3 自主查询GPU相关信息三、CUDA编程概念3.1 CUDA线程模型3.1 线程层次结构1.引入库2.读入数据总结参考文献前言 GPU作为机器学习的基础运算设备&#xff0c;基本上是无人不知无人不晓。…

【bsauce读论文】PSPRAY-基于时序侧信道的Linux内核堆利用技术

会议&#xff1a;USENIX Security’23 作者&#xff1a;来自 Seoul National University 的 Yoochan Lee、Byoungyoung Lee 等人。 主要内容&#xff1a;由于Linux内核的堆分配器SLUB开启的freelist随机化保护&#xff0c;所以堆相关的内核漏洞利用成功率较低&#xff08;平均…

BEV(一)---lift splat shoot

1. 算法原理 1.1 2D坐标与3D坐标的关系 如图&#xff0c;已知世界坐标系上的某点P&#xff08;Xc&#xff0c; Yc&#xff0c; Zc&#xff09;经过相机的内参矩阵可以获得唯一的图像坐标p&#xff08;x&#xff0c; y&#xff09;&#xff0c;但是反过来已知图像上某点p&…

软考初级程序员--学习

1、十进制 转 二进制 1.1、整数十进制87 转换为 二进制为 1010111 1.2 、小数十进制0.125 转为 二进制 为 0.001 使用乘2取整法&#xff0c;一直乘到没有小数 2、二进制 转 十进制 2.1、二进制1010111 转换为 十进制 2.2、 二进制小数0.001 转 十进制 3、循环队列 计算长度通用…

周赛341(模拟、双指针、树上DP)

文章目录周赛341[6376. 一最多的行](https://leetcode.cn/problems/row-with-maximum-ones/)暴力模拟[6350. 找出可整除性得分最大的整数](https://leetcode.cn/problems/find-the-maximum-divisibility-score/)暴力模拟[6375. 构造有效字符串的最少插入数](https://leetcode.c…

JVM系统优化实践(15):GC可视化工具实践

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 线上系统的JVM监测要么使用jstat、jmap、jhat等工具查看JVM状态&#xff0c;或者使用监控系统&#xff0c;如Zabbix、Prometheus、Open-FaIcon、Ganglia等。作为…