zoukankan      html  css  js  c++  java
  • Python基础知识

    Python解释器分类:
    1、CPython:这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器
    2、IPython:IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,
    但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
    CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
    3、PyPy:PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译
    (注意不是解释),所以可以显著提高Python代码的执行速度。
    绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码
    在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
    4、Jython:Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
    5、IronPython:IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,
    可以直接把Python代码编译成.Net的字节码。
    小结:Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是
    用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

    Python文本编辑器:
    在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。
    所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程序就可以反复运行了。
    推荐使用Notepad++,免费使用,有中文界面;
    请注意,用哪个都行,但是绝对不能用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会
    自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误。
    在Windows上不能直接运行py文件,在Mac和Linux上是可以的,方法是在.py文件的第一行加上一个特殊的注释:
    #!/usr/bin/env python3,然后,通过chomd命令给py文件以执行权限,就可以直接运行py文件了。
    小结:用文本编辑器写Python程序可以保存为后缀为.py的文件,就可以用Python直接运行这个程序了。

    print输出:
    用print()在括号中加上字符串,就可以向屏幕上输出指定的文字。
    print()函数可以接受多个字符串,用逗号“,”隔开,打印字符串时,遇到逗号会输出一个空格,起到拼接的作用
    input输入:
    input()可以让用户输入字符串,并存放到一个变量里,可以起到交互的作用
    input()在括号中可以写一个字符串来提示用户输入
    小结:任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,
    有了输出,程序运行后才能告诉用户任务的结果。
    输入是Input,输出是Output,因此,我们把输入输出统称为Input/Output,或者简写为IO。
    input()和print()是在命令行下面最基本的输入和输出,但是,用户也可以通过其他更高级的图形界面完成输入和输出,
    比如,在网页上的一个文本框输入自己的名字,点击“确定”后在网页上看到输出信息

    Python数据类型:
    1、整数
    2、浮点数(小数)
    3、字符串(用单引号或双引号或三引号括起来的任意文本)
    转义字符: 表示换行、 表示制表符等(r''表示''内部的字符串默认不转义)
    4、布尔值(True、False)
    5、列表
    6、元祖
    7、字典
    8、集合
    变量:
    变量名必须是大小写英文、数字和下划线的组合,且不能用数字开头
    小结:Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,
    而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。

    字符编码
    ASCII编码是1个字节(支持中文)
    Unicode编码字母中文都是2个字节
    UTF-8编码字母是1个字节,中文是3个字节

    ord()函数把字符转换成字符编码
    chr()函数把字符编码转换成字符

    bytes类型的数据用带b前缀的单引号或双引号表示,如x=b'ABC'
    encode()函数可以把str转换为bytes,如'ABC'.encode('utf-8')运行结果b'ABC',超过编码范围会报错
    decode()函数可以把bytes转换为str,如b'ABC'.decode('utf-8')运行结果'ABC'
    如果bytes中包含无法解码的字节,decode()方法会报错
    如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节,
    如b'ABC'.decode('utf-8',errors='ignore')运行结果'ABC'

    Python文件为防止乱码,通常在文件开头写上这两行:
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
    第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

    字符串操作:
    str.capitalize():将字符串的第一个字母大写
    str.count():获得字符串中某一子字符串的数目
    str.find():获得字符串中某一子字符串的起始位置,无则返回-1
    str.isalnum():检测字符串是否仅包含0-9A-Za-z
    str.isalpha():检测字符串是否仅包含A-Za-z
    str.isdigit():检测字符串是否仅包含数字
    str.islower():检测字符串是否均为小写字母
    str.isspace():检测字符串中所有字符是否均为空白字符
    str.istitle():检测字符串中的首字母是否为大写
    str.isupper():检测字符串是否均为大写字母
    str.join():连接字符串
    str.lower():将字符串全部转换为小写
    str.split():分割字符串
    str.swapcase():将字符串中大写字母转换为小写或小写字母转换为大写
    str.title():将字符串的首个字母转换为大写
    len(str):获取字符串长度
    字符串的格式化:
    >>> 'Hello, %s' % 'world'
    'Hello, world'
    >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
    'Hi, Michael, you have $1000000.'
    %运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,%f表示用浮点数替换,
    %x表示用十六进制整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
    字符串里的%是一个普通字符,可以用%%表示一个%
    另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{}
    如>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
    'Hello, 小明, 成绩提升了 17.1%
    小结:当str和bytes互相转换时,需要指定编码,最常用的编码是UTF-8。

    列表(list):
    list是一种有序的集合,可以随时添加和删除其中的元素。用len()函数可以获得list元素的个数
    可以用索引来访问list中的每一个元素,list的索引是从0开始的,当索引超出范围时,Python会报一个IndexError错误
    list的最后一个元素的索引可以用len(classmates) - 1表示,还可以用-1做索引,直接获取最后一个元素
    list的操作:
    list.append(x):列表尾部追加成员x
    list.count(x):返回列表中的参数x出现的次数
    list.extend(L):向列表中追加另一个列表L
    list.index(x):返回参数x在列表中的序号
    list.insert(index,object):向列表中指定位置(index)插入数据(object)
    list.pop():删除列表中尾部的成员并返回删除的成员,pop(i)可以删除指定位置的元素,i是索引位置
    list.remove(x):删除列表中的指定成员(有多个则只删除第一个)指定成员不存在则报错
    list.reverse():将列表中成员的顺序颠倒
    list.sort():将列表中成员排序(要求其成员可排序,否则报错)
    >>> alst = [1,2,3,4,5] #建立一个列表
    >>> alst.append(1) #列表尾部追加元素1,alst = [1,2,3,4,5,1]
    >>> alst.count(1) #统计1在列表中出现的次数,1出现2次
    >>>alst.exend([2,'insert']) #列表后追加另一个列表所有元素,alst = [1,2,3,4,5,1,2,'insert']
    >>> alst.index(2) #元素2在列表中首次出现的序号,2出现的序号为1
    >>> alst.insert(3,0) #在序号3处插入元素0,alst = [1,2,3,0,4,5,1,2,'insert']
    >>> alst.pop() #删除并返回列表最后一个元素,删除并返回'insert',alst = [1,2,3,0,4,5,1,2]
    >>> alst.remove(1) #删除列表中的元素(仅删除第一个),alst = [2,3,0,4,5,1,2]
    >>> alst.sort() #对列表元素进行排序,alst = [0,1,2,2,3,4,5]

    元祖(tuple):
    tuple是一种有序的集合,tuple一旦初始化就不能修改。用len()函数可以获得tuple元素的个数
    因为tuple不可变,所以代码更安全,能用tuple代替list就尽量用tuple
    元祖只有一个元素时必须加一个逗号来消除歧义:
    >>> t = (1)
    >>> t
    1
    >>> t = (1,)
    >>> t
    (1,)
    “可变的”tuple:
    >>> t = ('a', 'b', ['A', 'B'])
    >>> t[2][0] = 'X'
    >>> t[2][1] = 'Y'
    >>> t
    ('a', 'b', ['X', 'Y'])
    表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并
    没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能
    改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
    小结:list和tuple是Python内置的有序集合,一个可变,一个不可变。

    字典(dict):
    dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度
    为什么dict查找速度这么快?
    因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,
    直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。
    第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,
    这种查找速度都非常快,不会随着字典大小的增加而变慢。
    key不存在,dict就会报错,避免key不存在的错误的两种方法:
    一是通过in判断key是否存在
    二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value
    删除key的方法:pop(key)
    dict的key必须是不可变对象
    dict内部存放的顺序和key放入的顺序是没有关系的
    和list比较,dict有以下几个特点:
    查找和插入的速度极快,不会随着key的增加而变慢;
    需要占用大量的内存,内存浪费多。
    而list相反:
    查找和插入的时间随着元素的增加而增加;
    占用空间小,浪费内存很少
    字典操作:
    dic.clear():清空字典
    dic.copy():复制字典
    dic.get(k,[default]):获得键k对应的值,不存在则返回default
    dic.items():获得由键盒值组成的迭代器
    dic.keys():获得键的迭代器
    dic.pop(k):删除k:v成员对
    dic.values():获得值的迭代器
    dic.fromkeys(iter,value):以列表或元祖中给定的键建立字典,默认值为value
    dic.popitem():从字典中删除任意k:v项并返回它
    dic.setdefault(k,default):若字典中存在key值为k的,则返回其对应的值;否则,在字典中建立一个k:default字典成员

    集合(set):
    set是一组无序的、不可重复的集合
    重复元素在set中自动被过滤
    >>> s = set([1, 1, 2, 2, 3, 3])
    >>> s
    {1, 2, 3}
    通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    通过remove(key)方法可以删除元素
    >>> s.remove(4)
    >>> s
    {1, 2, 3}
    set可以做数学意义上的交集、并集等操作
    >>> s1 = set([1, 2, 3])
    >>> s2 = set([2, 3, 4])
    >>> s1 & s2
    {2, 3}
    >>> s1 | s2
    {1, 2, 3, 4}

    序列:
    序列表示索引为非负整数的有序对象的集合,包括前面所介绍的字符串、列表和元祖。
    字符串是字符的序列,列表和元祖则是任意Python数据类型或对象的序列。
    元祖是不可变的,字符串也是不可以变的(修改字符串就是重新创建一个字符串)。
    序列的切片方法:
    abc =[0,1,2,3,4,5,6,7]
    abc[:] #取全部成员数据项,abc =[0,1,2,3,4,5,6,7]
    abc[0:] #取全部成员数据项,abc =[0,1,2,3,4,5,6,7]
    abc[:-1] #取除最后一个成员之外的所有成员数据项,abc =[0,1,2,3,4,5,6,]
    abc[2:5] #取到[2,3,4]
    abc[::2] #每隔一个取一个成员,取到[0,2,4,6]
    abc[0:5:2] #从0至4每隔一个取一个成员,取到[0,2,4]
    abc[::-1] #从右至左取全部成员,abc =[7,6,5,4,3,2,1,0]
    abc[5:0:-2] #从5至0(不包括0)从右至左每隔一个取一个成员,取到[5,3,1]
    序列的内置操作:
    len(s):返回s的元素数(长度)
    min(s):返回s中的最小值
    max(s):返回s中的最大值
    sum(s):返回s中各项的和
    all(s):s中所有项为真,则返回真,否则返回假
    any(s):s中有一项为真,则返回真,否则返回假

    条件判断:
    if <条件判断1>:
    <执行1>
    elif <条件判断2>:
    <执行2>
    elif <条件判断3>:
    <执行3>
    else:
    <执行4>
    条件判断从上向下匹配,当满足条件时执行对应的块内语句,后续的elif和else都不再执行

    循环:
    Python的循环有两种
    一种是for...in循环,依次把可迭代对象中的每个元素迭代出来
    for循环的内置函数:
    enumerate(seq):编号迭代
    sorted(seq):排序迭代
    reversed(seq):翻转迭代
    zip(seq1,seq2,...):并行迭代
    >>>for i,item in enumerate('abc'):
    >>>print('第%d个字符是:%s'%(i,item))
    弟0个字符是:a
    弟1个字符是:b
    弟2个字符是:c
    >>>for i in sorted([3,1,6]):
    >>>print(i)
    1
    3
    6
    >>>a = (1,2)
    >>>c = (3,4)
    >>>a = (5,6,7)
    >>>for i,j,k in zip(a,b,c):
    >>>print('%d:%d:%d'%(i,j,k))
    1:3:5
    2:4:6
    并行迭代函数中序列值的长度不一致时,只遍历到最短的序列的长度
    第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环
    在循环中,break语句可以提前退出整个循环,continue语句可以跳过当前的这次循环,直接开始下一次循环,
    这两个语句通常都必须配合if语句使用。
    要特别注意,不要滥用break和continue语句。break和continue会造成代码执行逻辑分叉过多,容易出错。大多数循环
    并不需要用到break和continue语句,上面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break和continue语句。
    有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用Ctrl+C退出程序,或者强制结束Python进程。

  • 相关阅读:
    我的安全测试面试_自问自答,不亦乐乎
    Linux Shell 网络层监控脚本(监控包括:连接数、句柄数及根据监控反馈结果分析)
    netstat监控大量ESTABLISHED连接与Time_Wait连接问题
    详解 Spotlight on MySQL监控MySQL服务器
    详解 Spotlight on Unix 监控Linux服务器
    某听书网站系统漏洞,利用抓包拼接方式获取网站资源
    不懂得使用工具的测试不是好测试
    【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
    性能调优从哪里入手
    报文解析,从请求报文详细讲到响应码
  • 原文地址:https://www.cnblogs.com/luozhiyuan/p/10561541.html
Copyright © 2011-2022 走看看