zoukankan      html  css  js  c++  java
  • Python 基础学习笔记二(不断完善)

    if not的用法

    if not (1 > 2):        #如果()中的表达式为假
       print("hahaha")    #1 > 2结果是假,所以执行hahaha
    else:
       print("hihihi")

    结果:

    hahaha
    Process finished with exit code 0

     test 2

    if not 1:              #1为真,并不为假,因此不执行hahaha,执行hihihi
       print("hahaha")
    else:
       print("hihihi")

    结果:

    hihihi
    Process finished with exit code 0

    python 中非空即为真,空即为假,因此也常用来判断变量是否为空

    while(1):
       data = input()              #输入数据
       if not data:                   #如果data为假(即data为空)
           print("hahaha")
       else:                        #如果data不为空
           print("hihihi")

    结果:

    1
    hihihi
    2
    hihihi
    
    hahaha

    sys.stdin、sys.stdout和sys.stderr用法

    sys.stdin是标准化输入的方法

    import sys
    print('Plase input your name: ')
    name = sys.stdin.readline()
    print('Hello ', name)

    结果:

    Plase input your name:
    Ming
    Hello Ming

    python3 中使用 sys.stdin.readline() 可以实现标准输入,其中默认输入的格式是字符串,如果是 int,float 类型则需要强制转换。
    sys.stdin 用的较少,一般使用 stdout 和 stderr

    sys.stdout 是将标准输出重新定向到指定文件

    import sys
    temp = sys.stdout #将当前默认输出路径保存为temp
    sys.stdout = open('log', 'a')
    b = print('haha', file=sys.stdout)

    运行代码后打印信息不会在屏幕上显示,而是会写到 log 文件中

    sys.stderr 是将标准错误信息重定向输出到错误文件中

    import sys
    temp = sys.stdout #将当前默认输出路径保存为temp
    sys.stdout = open('errlog', 'a')
    b = print('haha', file=sys.stdout)

    运行代码后错误信息不会在屏幕上显示,会写入到 errlog 文件中
    在 linux 中可以不用指定 sys 的 stdout 和 stderr 文件,可以在 linux 运行文件时

    python test.py >log 2>errlog

    这样打印信息会在 log 文件中,错误信息会展示到 errlog 文件中
    其中

    • 2: 表示将标准错误信息流,

    • >errlog:表示将结果打印到errlog文件中

    StringIO实现内存缓冲区中读写数据  

    StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”,我们可以像操作磁盘文件那样来操作StringIO。这篇文章主要介绍了Python StringIO模块,此模块主要用于在内存缓冲区中读写数据。模块中只有一个StringIO类,所以它的可用方法都在类中,此类中的大部分函数都与对文件的操作方法类似。

    • s=StringIO.StringIO([buf])

    此实例类似于open方法,不同的是它并不会在硬盘中生成文件,而只寄存在缓冲区;可选参数buf是一个str或unicode类型。它将会与其他后续写入的数据存放在一起(注意,若要在初始化数据之后继续写入数据,则在写入数据之前,应先将读写位置移动到结尾,然后再写入,否则,初始化数据会被覆盖掉,因为读写位置默认是0)。

    StringIO类中的方法:

    • s.read([n]):参数n限定读取长度,int类型;缺省状态为从当前读写位置读取对象s中存储的所有数据。读取结束后,读写位置被移动。
    • s.readline([length]):参数length限定读取的结束位置,int类型,缺省状态为None:从当前读写位置读取至下一个以“ ”为结束符的当前行。读写位置被移动。
    • s.readlines([sizehint]):参数sizehint为int类型,缺省状态为读取所有行并作为列表返回,除此之外从当前读写位置读取至下一个以“ ”为结束符的当前行。读写位置被移动。
    • s.write(s):从读写位置将参数s写入给对象s。参数s为str或unicode类型。读写位置被移动。
    • s.writelines(list):从读写位置将list写入给对象s。参数list为一个列表,列表的成员为str或unicode类型。读写位置被移动。
    • s.getvalue():此函数没有参数,无论读写位置在哪里,都能够返回对象s中的所有数据。
    • s.truncate([size])1》有size参数:无论读写位置在哪里,都从起始位置开始,裁剪size字节的数据;不带size参数,将当前读写位置之前的数据,裁剪下来。
    • s.tell():返回当前读写位置。
    • s.seek(pos[,mode]):移动当前读写位置至pos处,可选参数mode为0时将读写位置移动至pos处,
    1. 为1时将读写位置从当前位置起向前或向后移动|pos|个长度,

    2. 为2时将读写位置置于末尾处再向前或向后移动|pos|个长度;

      mode的默认值为0。

    • s.close():释放缓冲区,执行此函数后,数据将被释放,也不可再进行操作。
    • s.isatty():此函数总是返回0。
    • s.flush():刷新内部缓冲区。

    实例1:

    #coding=UTF-8
    import StringIO
    s = StringIO.StringIO('python')
    s.seek(0, 2)  # 将读写位置移动到结尾
    s.write("aaaa")
    lines = ['xxxxx', 'bbbbbbb']
    s.writelines(lines)
    s.write("ttttttttt")
    print s.getvalue()
    #如果使用read方法获取其中的数据,必须通过seek先设置"文件指针"的位置。
    s.seek(0, 0)  # 使用s.read()来读取所有数据前,应将读写位置移动到开头
    print s.read()
    print s.len

    结果:

    pythonaaaaxxxxxbbbbbbbttttttttt
    pythonaaaaxxxxxbbbbbbbttttttttt
    31

    使用 enumerate 函数 可以返回下标

    例如

    for inx, val in enumerate(['uyy', 'dfdf']):
            print(inx)
            print(val)

    输出结果如下:

    0
    uyy
    1
    dfdf

    try except异常处理

    Python 中,用try except语句块捕获并处理异常,其基本语法结构如下所示:

    try:
        可能产生异常的代码块
    except [ (Error1, Error2, ... ) [as e] ]:
        处理异常的代码块1
    except [ (Error3, Error4, ... ) [as e] ]:
        处理异常的代码块2
    except  [Exception]:
        处理其它异常 

    该格式中,[] 括起来的部分可以使用,也可以省略。其中各部分的含义如下:

    • (Error1, Error2,...) 、(Error3, Error4,...):其中,Error1、Error2、Error3 和 Error4 都是具体的异常类型。显然,一个 except 块可以同时处理多种异常。

    • [as e]:作为可选参数,表示给异常类型起一个别名 e,这样做的好处是方便在 except 块中调用异常类型(后续会用到)。

    • [Exception]:作为可选参数,可以代指程序可能发生的所有异常情况,其通常用在最后一个 except 块。

    try except的基本语法格式可以看出,try 块有且仅有一个,但 except 代码块可以有多个,且每个 except 块都可以同时处理多种异常。

    举个例子:

    try:
        a = int(input("输入被除数:"))
        b = int(input("输入除数:"))
        c = a / b
        print("您输入的两个数相除的结果是:", c )
    except (ValueError, ArithmeticError):
        print("程序发生了数字格式异常、算术异常之一")
    except :
        print("未知异常")
    print("程序继续运行")

    程序运行结果为:

    输入被除数:a
    程序发生了数字格式异常、算术异常之一
    程序继续运行

    获取特定异常的有关信息

    通过前面的学习,我们已经可以捕获程序中可能发生的异常,并对其进行处理。但是,由于一个 except 可以同时处理多个异常,那么我们如何知道当前处理的到底是哪种异常呢?

    其实,每种异常类型都提供了如下几个属性和方法,通过调用它们,就可以获取当前处理异常类型的相关信息:

    • args:返回异常的错误编号和描述字符串;
    • str(e):返回异常信息,但不包括异常信息的类型;
    • repr(e):返回较全的异常信息,包括异常信息的类型。

    举个例子:

    try:
        1/0
    except Exception as e:
        # 访问异常的错误编号和详细信息
        print(e.args)
        print(str(e))
        print(repr(e))

     输出结果为:

    ('division by zero',)
    division by zero
    ZeroDivisionError('division by zero',)

    从程序中可以看到,由于 except 可能接收多种异常,因此为了操作方便,可以直接给每一个进入到此 except 块的异常,起一个统一的别名 e。

    在 Python 2.x 的早期版本中,除了使用 as e 这个格式,还可以将其中的 as 用逗号(,)代替。

     

    树林美丽、幽暗而深邃,但我有诺言尚待实现,还要奔行百里方可沉睡。 -- 罗伯特·弗罗斯特
  • 相关阅读:
    Flutter图片选择 image_picker(官方)插件使用详解
    androidstudo如何跨越这个厚厚的墙,亲测有效 Could not resolve com.android.tools.build:gradle:
    qwq。。胡诌qwq
    关于很狗的军训qwq
    Leetcode每日一题 503.下一个更大元素II
    C++ 关于volatlie
    C++虚成员函数与动态联编
    graphics pipeline
    pointer or function
    线段树
  • 原文地址:https://www.cnblogs.com/huansky/p/14507726.html
Copyright © 2011-2022 走看看