目 录
集合,切片,字符串,基本数据处理,输入输出,自定义函数,控制流,正则表达式
网络编程,多线程,sys,optparse
1 Python规范
(1)缩进
Python对代码缩进是硬性要求,严格使用缩进来体现代码的逻辑从属关系。一般以4个空格(或一个TAB)为一个缩进单位,并且相同级别的代码块应具有相同的缩进量。
(2)续行
行尾使用续行符“\”表示下一行代码仍属于本条语句,或者使用圆括号把多行代码括起来表示是一条语句。
(3)注释
有两种常用的注释形式:#和三引号。井号#用于单行注释;三引号""" """常用于大段说明性文本的注释,也可以用于界定包含换行符的长字符串。
2 基础语法
2.1 集合
1)列表:https://www.w3school.com.cn/python/python_lists.asp
- 所有元素放在一对方括号中,相邻元素之间使用逗号分隔,如: [12, 45, 'hello']。
- 存放多个数据的有序容器【添加顺序与显示顺序一致】。
- 为数据设置对应的编号称为索引、下标【从0开始】。
- 可以通过索引和下标操作容器中的数据。
- 同一个列表中元素的数据类型可以各不相同。
列表推导式
【将要存放于列表中的元素 元素的来源 (对元素的筛选)】
list =[i for i in range(1,100) if i % 3 == 0 and i % 10 ==3]
2)元组:https://www.w3school.com.cn/python/python_tuples.asp
- 可以通过把若干元素放在一对圆括号中创建元组,如果只有一个元素的话则需要多加一个逗号,例如(3,)。
- 可以使用tuple()函数把列表、字典、集合、字符串以及range对象、map对象、zip对象或其他类似对象转换为元组。
- 元组是不可变的,不能直接修改元组中元素的值,也不能为元组增加或删除元素。
3)字典:https://www.w3school.com.cn/python/python_dictionaries.asp
- 存放的是具有映射关系的数据,数据成对出现,如:source_dict = {'语文':77,'数学': 78,'政治':77}
- 成对出现的数据称为键值对key:value
- key称为键,要求:唯一的,数据不允许发生变化
- value = source_dict.get('语文') , value1 = source_dict.get('历史',0)#存在则覆盖,不存在则创建
for ele in source_dict:
print(ele) #拿到的是键
for v in source_dict.values():
print(v)
for item in source_dict.items():
print(item) #输出的是键值对,元组格式(,)
for k,v in source_dict.items():
print(k,v)
4)集合:https://www.w3school.com.cn/python/python_sets.asp
- Python集合是无序、可变的容器对象,放在一对花括号中,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,不允许重复,如:{"apple", "banana", "cherry"}。
- 集合中只能包含数字、字符串、元组等不可变类型的数据,而不能包含列表、字典、集合等可变类型的数据,包含列表等可变类型数据的元组也不能作为集合的元素。
- 集合中的元素是无序的,元素存储顺序和添加顺序并不一致。
- 集合不支持使用下标直接访问特定位置上的元素,也不支持使用random中的choice()函数从集合中随机选取元素,但支持使用random模块中的sample()函数随机选取部分元素。
2.2 切片
是用来获取列表、元组、字符串等有序序列中部分元素的一种语法。在形式上,切片使用 2个冒号分隔的3个数字 来完成。
[start:end:step]
其中第一个数字start表示切片开始位置,默认为0;
第二个数字end表示切片截止(但不包含)位置(默认为列表长度);
第三个数字step表示切片的步长(默认为1),省略步长时还可以同时省略最后一个冒号。当step为负整数时,表示反向切片,这时start应该在end的右侧。
2.3 字符串
Python 中的字符串是表示 unicode 字符的字节数组。但是,Python 没有字符数据类型,单个字符就是长度为 1 的字符串。
字符串属于不可变对象,所有方法都是返回处理后的字符串或字节串,不对原字符串进行任何修改。
创建:单引号=双引号;三引号(多行文本)
s = 'hello nice'
#想把第一个字符改为H
new_s = 'H' + s[1:]
print(new_s)
或者:
n_nums = map(str,nums)
print("-".join(n_nums))
map(函数,容器)
将容器中的元素通过指定函数的作用变化成对应的结果
函数有自定义函数和内置函数(python提供的)
现在需要一个函数的功能是把数据变成字符串这个函数,系统提供了str(数据)
常用方法
输出格式:
字符串输出格式
占位符
%s ---填充任意类型数据
%d ---填充整形数据
%0nd ---按照n位数格式化数据
%f ---填充浮点型数据
%.nf ---保留n位小数
urls = 'aaa%02d'
for i in range(8,12):
print(urls % i)
使用format:
格式化字符串的函数 str.format(),基本语法是通过 {} 和 : 来代替以前的 % 。
1.填充
key填充: print("网站名:{name}, 地址 {url}".format(name=str1, url=str2))
位置填充:print("网站名:{0}, 地址 {1}".format(str1,str2))
列表填充:print('{names[0]} , {names[1]}'.format(names=list))
print('{0[0]} , {0[1]}'.format(list))
2.数字格式化
>>> print("{:.2f}".format(3.1415926))
>>> 3.14
{:.2f} 保留小数点后两位
{:+.2f} 带符号保留小数点后两位
{:.0f} 不带小数
{:0>2d} 数字补零 (填充左边, 宽度为2)
{:x<4d} 数字补x (填充右边, 宽度为4)
{:,} 以逗号分隔的数字格式
{:.2%} 百分比格式
{:.2e} 指数记法
{:>10d} 右对齐 (默认, 宽度为10)
{:<10d} 左对齐 (宽度为10)
{:^10d} 中间对齐 (宽度为10)
3.时间格式化
now=datetime.now()
print '{:%Y-%m-%d %X}'.format(now)
4.进制转换
print("{0:,} in hex is: {0:#x}, in oct is {0:#o}".format(5555555))
#x表示格式化为十六进制数
5.转义{和}符号
'{{ hello{0} }}'.format('python’)
f = ' hello {0} '.format
f('python’)
2.4 数据类型转换
(1)int()、float()、complex()
(2)bin()、oct()、hex() 把整数转换为二进制,八进制,十六进制
(3)ord()、chr()、str() 返回字符的ASCII码,
(4)list()、tuple()、dict()、set()
(5)eval()
2.5 输入输出
(1)内置函数input
input()用来接收用户的键盘输入,不论用户输入什么内容,input()一律作为字符串对待,
(2)内置函数print
print()用于以指定的格式输出信息,语法格式为:
print('-'*50) #重复50次
2.6 自定义函数
lambda 函数是一种小的匿名函数。lambda 函数可接受任意数量的参数,但只能有一个表达式。
表达式————lambda arguments : expression
实例————x = lambda x: x+2
def name(data):return data
必选参数 (data)
默认参数 (data,p=2)
可变参数 (*args)
关键字参数 (**args)
补充:模块
每一个后缀为.py的文件都被视作一个Python模块,可以被其它Python程序调用(import)。
每个Python脚本在运行时都有一个__ name__ 属性, 通过它可以识别程序的使用方式,即程序是在作为模块被导入,还是在独立运行。
如果是在作为模块被导入,那么__name__ 属性的值就被自动设置为模块名;
如果是在独立运行,那么__ name__ 属性的值会被自动设置为字符串“_main_“
2.7 控制流
if
if else
if elif else
for 用来遍历容器
for i in list
for i in range(a,b)
[i++ for i in list if i >2]
2.8 正则表达式
re.match(r'匹配符',str)
匹配符
. 任意字符
[0-9] 匹配任意一个数字
[a-z] 匹配一个字母
() 指定字符
(qq.com | 163.com) 找是否有小括号里的内容的
? 出现最多1次
+ 出现最少一次
* 出现任意次
{n,m} n=<前面字符串匹配位数<=m
{n} 匹配n次
*和+ 贪婪匹配 能匹配多少就匹配多少
*?和+?非贪婪匹配 尽可能的少匹配
^ 开始
$ 结束
2.9 random
random.choice() #指定容器中获取一个元素
random.randint()#指定的整数区间去一个(a,b】
random.sample()#不重复
2.10 异常处理
try:
except Exception as e:
print("异常时执行")
else:
print("正确时执行")
3 深入学习
3.1 网路编程
Import socket
socket.setdefaulttimeout(2)
S = Socket.socket()
s.connect((“192.168.1.12”,21))
ans = s.recv(1024)
print (ans)
Python 提供了两个级别访问的网络服务:
低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求:
格式:socket.socket([family[, type[, protocal]]])
参数
family: 套接字家族可以使AF_UNIX或者AF_INET
type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
protocol: 一般不填默认为0
函数
3.2 多线程
当进程被创建时,操作系统会自动为之创建一个线程,称为主线程,主线程再根据需要动态创建其它子线程。通过threading模块中的Thread()类可以创建和管理线程对象。
import threading
threading.Thread(target=None, name=None, args=())
参数
target 是函数名字,需要调用的函数。
name 设置线程名字。
args 函数需要的参数,以元祖( tuple)的形式传入
函数
run(): 用以表示线程活动的方法。
start():启动线程活动。
join(): 等待至线程中止。
isAlive(): 返回线程是否活动的。
getName(): 返回线程名。
setName(): 设置线程名。
3.3 sys
sys.argv变量是一个字符串的列表。
当我们执行"python using_sys.py a b c "的时候,后面跟着的内容被作为参数传递给程序,Python为我们把它存储在sys.argv变量中。
(1)参数获取
脚本文件‘using_sys.py'是sys.argv[0]
'a'是sys.argv[1]
'b'是sys.argv[2]
'c'是sys.argv[3]
sys.argv是输出所有参数
sys.startswith() 是用来判断一个对象是以什么开头的
(2)sys.exit()退出程序。
sys.exit()会引发一个异常:SystemExit,如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获此异常的代码,那么这些代码还是会执行。捕获这个异常可以做一些额外的清理工作。
注意,os._exit()会直接将python程序终止,之后的所有代码都不会继续执行。
sys.exit(1), 退出当前程序,并返回SystemExit异常。0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获。
sys. exit(0),正常退出。
sys. exit(“程序退出”),显示一段提示信息退出。
3.4 optparse
from optparse import OptionParser
usage="python -f <target file> -p/-P <target ports>" #用于显示帮助信息
parser=OptionParser(usage) #创建对象实例
parser.add_option('-f','--file',type='string',dest='filename') ##需要的命令行参数
parser.add_option('-P','-p',type='string',help='target ports' ,default="20,21",dest='Ports') ## -p/-P 都可以
(options,args)=parser.parse_args()
print(options.filename)
print(options.Ports)
利用add_ option()方法添加选项。-f和--file分别表示长短选项名,长选项可以省略。type指定了 参数类型,默认为string, dest指定将参数赋值给哪个变量。
利用parse_ args()方法来获取定义的选项和参数,parse_ args()方法返回两个值, 其中options对象保存了所传递进来的参数值。
通过options. filename和options.address的方式调用参数值。