Python学習ノート(3)-高度な特性

3281 ワード

1.スライス
  • 構文:list=list[開始インデックス:カットオフインデックス:間隔数]
  • の説明:strまたはlistについては[0]集合インデックスを使用して要素を取得することができるが、個別の数字をインデックスとして取得できる要素は、スライスによって取得できる要素の一部または全部がリストに戻るタイプである.すなわち、集合内のインデックスが0であれば
  • を書かなくてもよい.
  • 例えば
  • 定义集合,也可以string = "string"

    string = ["s", "t", "r", "i", "n", "g"]

    中间取值,返回['r', 'i', 'n']

    string[-4:-1]

    取前三个,0可以不写,返回['s', 't', 'r']

    string[:3]

    取后三个,0可以不写,返回['i', 'n', 'g']

    string[-3:]

    取偶数位,返回['s', 'r', 'n']

    string[:6:2]

    2. 列表生成式

    • 语法:[表达式 for if]
    • 解释:
      目的是为了快速的生成list集合
      表达式:list中每一个元素将以什么方式呈现
      for:for循环,可以有多个
      if:必须跟在for后面,可有可无
      讲解:如例1拆分开来,将从for开始,range(10)会生成从0到9的十个数进行循环遍历,每次取得的值赋予num变量,第一次循环时,num变量的值为0,这时候如果后面有if语句,就会执行if语句进行判断,该值是否需要保存,if中返回True的话则保存,反之则跳转到下一次循环,如果没有if语句默认直接保存,保存的形式按照例1中表达式是直接保存,不做任何运算,保存完之后list中的数据应该是[0]。
    • 例子

    例1 返回 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    [num for num in range(10)]

    例2 返回 ['bx', 'by', 'bz']

    [x + y for x in "abc" if x == "b" for y in "xyz" if 1 == True]

    3. 生成器 Generator

    • 语法:(表达式 for if)
    • 解释:用法和列表生成式几乎一样,只是将[]中括号变成了小括号()
    • 区别:列表生成式执行完后会立即生成一个list,里面包括了计算出的所有值,而生成器执行完后会得到一个generator的对象,对象里面保存的是每一个值应得的计算方式,而具体的值却还没有生成,等你需要用的时候,可以将其值一一取出
    • 例子1

    定义生成器

    a = (x for x in range(10))

    输出生成器信息 返回 at 0x00000056E0CCA5C8>

    a

    取出生成器中的值 返回 0

    next(a)

    取出生成器中的值 返回 1

    next(a)

    取出生成器中的值 返回 2

    next(a)

    • 例子2

    定义生成器

    a = (x for x in range(10) if x % 2 != 0)

    输出生成器信息 返回 at 0x00000056E0CCA570>

    a

    取出生成器中的值 返回 1 3 5 7 9

    for b in a: print(b)

    • 例子3

    定义函数

    def gen(num):
    # for循环
    for i in range(num):
    # 中断返回
    yield(i)

    获取函数生成器

    n = gen(6);

    循环打印生成器内容 返回 0 1 2 3 4 5

    for x in n:
    print(x)

    4. 捕获异常

    • 语法:try [except] [finally]
    • 例子:

    专业抛异常30年

    def ec30(year):
    if not isinstance(year, int):
    raise TypeError("错误的年份!")
    if year < 10:
    return "Perfect Excetpion"
    else:
    raise Exception(str(year) + "年")
    return "你能看到这句话吗?"

    捕获异常

    try:
    result = ec30(5)
    print(result)
    except Exception as ex:
    print("居然会出现错误?", ex)
    else:
    print("完美!")
    finally:
    print("这句话会在什么时候出现?")

    • 结果:

      ec30(5)
    • Perfect Excetpion
      完璧!
      この言葉はいつ現れますか.
      ec30(15)
      エラーが発生するなんて?15年
      この言葉はいつ現れますか.
      ec 30(「15」)にエラーが発生するとは?間違った年!この言葉はいつ現れますか.