美文网首页
Python基础知识记录

Python基础知识记录

作者: loongod | 来源:发表于2020-10-14 17:35 被阅读0次

    一、Python数据类型转换

    函数 描述
    int(x [,base]) 将x转换为一个整数
    long(x [,base] ) 将x转换为一个长整数
    float(x) 将x转换到一个浮点数
    complex(real [,imag]) 创建一个复数
    str(x) 将对象 x 转换为字符串
    repr(x) 将对象 x 转换为表达式字符串
    eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
    tuple(s) 将序列 s 转换为一个元组
    list(s) 将序列 s 转换为一个列表
    set(s) 转换为可变集合
    dict(d) 创建一个字典。d 必须是一个序列 (key,value)元组。
    frozenset(s) 转换为不可变集合
    chr(x) 将一个整数转换为一个字符
    unichr(x) 将一个整数转换为Unicode字符
    ord(x) 将一个字符转换为它的整数值
    hex(x) 将一个整数转换为一个十六进制字符串
    oct(x) 将一个整数转换为一个八进制字符串

    二、Python随机数函数

    需要导入 random

    import random
    
    函数 描述
    choice(seq) 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
    randrange ([start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
    random() 随机生成下一个实数,它在[0,1)范围内。
    seed([x]) 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
    shuffle(lst) 将序列的所有元素随机排序
    uniform(x, y) 随机生成下一个实数,它在[x,y]范围内。

    三、Python转义字符

    转义字符 描述
    \ (在行尾时) 续行符
    \\ 反斜杠符号
    \' 单引号
    \" 双引号
    \a 响铃
    \b 退格(Backspace)
    \e 转义
    \000
    \n 换行
    \v 纵向制表符
    \t 横向制表符
    \r 回车
    \f 换页
    \oyy 八进制数,yy 代表的字符,例如:\o12 代表换行
    \xyy 十六进制数,yy 代表的字符,例如:\x0a 代表换行
    \other 其它的字符以普通格式输出

    四、数组

    4.1 Python列表脚本操作符
    Python 表达式 结果 描述
    len([1, 2, 3]) 3 长度
    [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
    ['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
    3 in [1, 2, 3] True 元素是否存在于列表中
    for x in [1, 2, 3]: print x, 1 2 3 迭代
    4.2 Python列表截取
    Python 表达式 结果 描述
    L[2] 'Taobao' 读取列表中第三个元素
    L[-2] 'Runoob' 读取列表中倒数第二个元素
    L[1:] ['Runoob', 'Taobao'] 从第二个元素开始截取列表
    4.3 Python列表函数&方法
    序号 函数
    1 cmp(list1, list2) 比较两个列表的元素
    2 len(list) 列表元素个数
    3 max(list) 返回列表元素最大值
    4 min(list) 返回列表元素最小值
    5 list(seq) 将元组转换为列表
    序号 方法
    1 list.append(obj) 在列表末尾添加新的对象
    2 list.count(obj) 统计某个元素在列表中出现的次数
    3 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    4 list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
    5 list.insert(index, obj) 将对象插入列表
    6 list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
    7 list.remove(obj) 移除列表中某个值的第一个匹配项
    8 list.reverse() 反向列表中元素
    9 list.sort(cmp=None, key=None, reverse=False) 对原列表进行排序

    五、字典

    序号 函数及描述
    1 dict.clear() 删除字典内所有元素
    2 dict.copy() 返回一个字典的浅复制
    3 dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
    4 dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
    5 dict.has_key(key) 如果键在字典dict里返回true,否则返回false
    6 dict.items() 以列表返回可遍历的(键, 值) 元组数组
    7 dict.keys() 以列表返回一个字典所有的键
    8 dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
    9 dict.update(dict2) 把字典dict2的键/值对更新到dict里
    10 dict.values() 以列表返回字典中的所有值
    11 pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
    12 popitem() 返回并删除字典中的最后一对键和值。

    六、日期和时间

    import time
    import calendar

    6.1 time 模块
    • 获取当前时间
    ticks = time.time()
    当前时间戳: 1599991315.920578
    
    • 本地时间
    localtime = time.localtime(time.time())
    本地时间: time.struct_time(tm_year=2020, tm_mon=9, tm_mday=13, tm_hour=18, tm_min=1, tm_sec=55, tm_wday=6, tm_yday=257, tm_isdst=0)
    
    • 获取格式化的时间
    localtime = time.asctime( time.localtime(time.time()) )
    格式化时间: Sun Sep 13 18:04:21 2020
    
    • 格式化日期
    符号 描述
    %y 两位数的年份表示(00-99)
    %Y 四位数的年份表示(000-9999)
    %m 月份(01-12)
    %d 月内中的一天(0-31)
    %H 24小时制小时数(0-23)
    %I 12小时制小时数(01-12)
    %M 分钟数(00-59)
    %S 秒(00-59)
    %a 本地简化星期名称
    %A 本地完整星期名称
    %b 本地简化的月份名称
    %B 本地完整的月份名称
    %c 本地相应的日期表示和时间表示
    %j 年内的一天(001-366)
    %p 本地A.M.或P.M.的等价符
    %U 一年中的星期数(00-53)星期天为星期的开始
    %w 星期(0-6),星期天为星期的开始
    %W 一年中的星期数(00-53)星期一为星期的开始
    %x 本地相应的日期表示
    %X 本地相应的时间表示
    %Z 当前时区的名称
    %% %号本身

    五、函数

    可更改(mutable)与不可更改(immutable)对象
    python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list, dict 等则是可以修改的对象。

    • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a

    • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身 la 没有动,只是其内部的一部分值被修改了。

    python 函数的参数传递

    • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是 a 的值,没有影响 a 对象本身。比如在 fun(a) 内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

    • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响

    python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

    六、模块

    support.py 文件

    supDic = {
        "name": "loongod",
        "age": 31,
        "weight": 120
    }
    
    
    def printPersonName(person):
        print("this person's name ", person)
        return
    
    6.1 import

    当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。

    搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support.py,需要把命令放在脚本的顶端:

    # 导入模块
    import support
     
    # 现在可以调用模块里包含的函数了
    support.printPersonName("Runoob")
    

    一个模块只会被导入一次,不管你执行了多少次 import。这样可以防止导入模块被一遍又一遍地执行。

    6.2 from…import 语句

    Pythonfrom 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:

    from modname import name1[, name2[, ... nameN]]
    

    例如,要导入模块 supportprintPersonName 函数,使用如下语句:

    from support import printPersonName
    // 调用如下
    printPersonName('loongod')
    

    这个声明不会把整个 support 模块导入到当前的命名空间中,它只会将 support 里的 printPersonName 单个引入到执行这个声明的模块的全局符号表。

    6.3 from…import* 语句

    把一个模块的 所有内容全都导入 到当前的命名空间也是可行的,只需使用如下声明:

    from modname import *
    

    这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

    例如我们想一次性引入 math 模块中所有的东西,语句如下:

    from math import *
    
    6.4 搜索路径

    当你导入一个模块,Python 解析器对模块位置的搜索顺序是:

    1. 当前目录
    2. 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
    3. 如果都找不到,Python 会察看默认路径。UNIX下,默认路径一般 为 /usr/local/lib/python/

    模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

    七、文件 I/O

    • input([prompt]) :标准输入读入一行文本,默认的标准输入是键盘
    7.1 打开和关闭文件

    ** open 函数 **

    你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。

    语法:file object = open(file_name [, access_mode][, buffering])

    各个参数的细节如下:

    • file_name :file_name变量是一个包含了你要访问的文件名称的字符串值。
    • access_mode :access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
    • buffering : 如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
    模式 描述
    t 文本模式 (默认)。
    x 写模式,新建一个文件,如果该文件已存在则会报错。
    b 二进制模式。
    + 打开一个文件进行更新(可读可写)。
    U 通用换行模式(不推荐)。
    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
    w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    下图很好的总结了这几种模式:

    image
    模式 r r+ w w+ a a+
    + + + +
    + + + + +
    创建 + + + +
    覆盖 + +
    指针在开始 + + + +
    指针在结尾 + +

    read() 方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。

    fileObject.read([count])

    在这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。

    close() 方法:

    当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。

    tell() 方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。

    seek(offset [,from]) 方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

    如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

    # 打开一个文件
    fo = open("foo.txt", "r+")
    str = fo.read(10)
    print "读取的字符串是 : ", str
     
    # 查找当前位置
    position = fo.tell()
    print "当前文件位置 : ", position
     
    # 把指针再次重新定位到文件开头
    position = fo.seek(0, 0)
    str = fo.read(10)
    print "重新读取字符串 : ", str
    # 关闭打开的文件
    fo.close()
    
    7.2 File 对象的属性

    一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
    以下是和file对象相关的所有属性的列表:

    属性 描述
    file.closed 返回true如果文件已被关闭,否则返回false。
    file.mode 返回被打开文件的访问模式。
    file.name 返回文件的名称。
    file.softspace 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。

    file 方法

    序号 方法及描述
    1 file.close()关闭文件。关闭后文件不能再进行读写操作。
    2 file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
    3 file.fileno()返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
    4 file.isatty()如果文件连接到一个终端设备返回 True,否则返回 False。
    5 file.next()返回文件下一行。
    6 file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有。
    7 file.readline([size])读取整行,包括 "\n" 字符。
    8 file.readlines([sizeint])读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
    9 file.seek(offset[, whence])设置文件当前位置
    10 file.tell()返回文件当前位置。
    11 file.truncate([size])截取文件,截取的字节通过size指定,默认为当前文件位置。
    12 file.write(str)将字符串写入文件,返回的是写入的字符长度。
    13 file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
    7.3 重命名和删除文件

    Python的os模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件。
    要使用这个模块,你必须先导入它,然后才可以调用相关的各种功能。
    rename()方法:
    rename()方法需要两个参数,当前的文件名和新文件名。

    语法:os.rename(current_file_name, new_file_name)

    import os
     
    # 重命名文件test1.txt到test2.txt。
    os.rename( "test1.txt", "test2.txt" )
    

    remove()方法, 你可以用remove()方法删除文件,需要提供要删除的文件名作为参数。

    语法:os.remove(file_name)

    import os
     
    # 删除一个已经存在的文件test2.txt
    os.remove("test2.txt")
    
    7.4 Python里的目录

    所有文件都包含在各个不同的目录下,不过Python也能轻松处理。os模块有许多方法能帮你创建,删除和更改目录。

    函数 语法 解释
    mkdir() os.mkdir("newdir") 可以使用 os 模块的 mkdir() 方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。
    chdir() os.chdir("newdir") 可以用 chdir() 方法来改变当前的工作目录。像当与cdnewdir的目录里面了,chdir() 方法需要的一个参数是你想设成当前目录的目录名称。
    getcwd() os.getcwd() 显示当前的工作目录
    rmdir() os.rmdir('dirname') 删除目录,目录名称以参数传递。在删除这个目录之前,它的所有内容应该先被清除。

    八、类

    类的专有方法:

    1. __init__ : 构造函数,在生成对象时调用
    2. __del__ : 析构函数,释放对象时使用
    3. __repr__ : 打印,转换
    4. __setitem__ : 按照索引赋值
    5. __getitem__: 按照索引获取值
    6. __len__: 获得长度
    7. __cmp__: 比较运算
    8. __call__: 函数调用
    9. __add__: 加运算
    10. __sub__: 减运算
    11. __mul__: 乘运算
    12. __truediv__: 除运算
    13. __mod__: 求余运算
    14. __pow__: 乘方

    九、Python3 标准库概览

    9.1 os 模块
    >>> import  os
    >>> os.getcwd()      # 获取当前的工作目录
    'C:\\Python34'
    >>> os.chdir('/server/accesslogs')   # 修改当前的工作目录
    >>> os.system('mkdir today')   # 执行系统命令 mkdir 
    
    9.2 shutil 模块
    >>> import shutil
    >>> shutil.copyfile('data.db', 'archive.db')
    >>> shutil.move('/build/executables', 'installdir')
    
    9.3 文件通配符

    glob模块提供了一个函数用于从目录通配符搜索中生成文件列表:

    >>> import glob
    >>> glob.glob('*.py')
    ['primes.py', 'random.py', 'quote.py']
    
    9.4 命令行参数

    通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量。例如在命令行中执行 "python demo.py one two three" 后可以得到以下输出结果:

    >>> import sys
    >>> print(sys.argv)
    ['demo.py', 'one', 'two', 'three']
    

    大多脚本的定向终止都使用 sys.exit()

    9.5 字符串正则匹配

    re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案:

    >>> import re
    >>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
    ['foot', 'fell', 'fastest']
    >>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
    'cat in the hat'
    
    9.6 数学

    math 模块为浮点运算提供了对底层C函数库的访问:

    >>> import math
    >>> math.cos(math.pi / 4)
    0.70710678118654757
    >>> math.log(1024, 2)
    10.0
    

    random 提供了生成随机数的工具。

    >>> import random
    >>> random.choice(['apple', 'pear', 'banana'])
    'apple'
    >>> random.sample(range(100), 10)   # sampling without replacement
    [30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
    >>> random.random()    # random float
    0.17970987693706186
    >>> random.randrange(6)    # random integer chosen from range(6)
    4
    
    9.7 访问互联网

    有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib:

    >>> from urllib.request import urlopen
    >>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
    ...     line = line.decode('utf-8')  # Decoding the binary data to text.
    ...     if 'EST' in line or 'EDT' in line:  # look for Eastern Time
    ...         print(line)
    
    <BR>Nov. 25, 09:43:32 PM EST
    
    >>> import smtplib
    >>> server = smtplib.SMTP('localhost')
    >>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
    ... """To: jcaesar@example.org
    ... From: soothsayer@example.org
    ...
    ... Beware the Ides of March.
    ... """)
    >>> server.quit()
    

    注意第二个例子需要本地有一个在运行的邮件服务器。

    9.8 日期和时间

    datetime模块为日期和时间处理同时提供了简单和复杂的方法。
    支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。
    该模块还支持时区处理:

    >>> # dates are easily constructed and formatted
    >>> from datetime import date
    >>> now = date.today()
    >>> now
    datetime.date(2003, 12, 2)
    >>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
    '12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
    
    >>> # dates support calendar arithmetic
    >>> birthday = date(1964, 7, 31)
    >>> age = now - birthday
    >>> age.days
    14368
    
    9.9 数据压缩

    以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile。

    >>> import zlib
    >>> s = b'witch which has which witches wrist watch'
    >>> len(s)
    41
    >>> t = zlib.compress(s)
    >>> len(t)
    37
    >>> zlib.decompress(t)
    b'witch which has which witches wrist watch'
    >>> zlib.crc32(s)
    226805979
    

    相关文章

      网友评论

          本文标题:Python基础知识记录

          本文链接:https://www.haomeiwen.com/subject/nohbektx.html