<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Python3的一些常用語法和屬性

      1、切片

      平常我們要想取 list 或者 tuple 中指定索引范圍的元素,可能需要通過循環,比較麻煩。Python 中提供了切片(Slice)操作符,能大大簡化這種操作。

      >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
      
      # 取前3個元素,用一行代碼就可以完成切片:
      >>> L[0:3]
      ['Michael', 'Sarah', 'Tracy']
      
      # 也可以從索引1開始,取出2個元素出來:
      >>> L[1:3]
      ['Sarah', 'Tracy']
      
      # 也支持倒數切片:
      >>> L[-2:]
      ['Bob', 'Jack']
      >>> L[-2:-1]
      ['Bob']

      L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引012,正好是3個元素。

      如果第一個索引是0,還可以省略:

      >>> L[:3]
      ['Michael', 'Sarah', 'Tracy']

      用法示例:

      >>> L = list(range(100))
      >>> L
      [0, 1, 2, 3, ..., 99]
      
      #前10個數:
      >>> L[:10]
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      
      #后10個數:
      >>> L[-10:]
      [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
      
      #前10個數,每兩個取一個:
      >>> L[:10:2]
      [0, 2, 4, 6, 8]
      
      #所有數,每5個取一個:
      >>> L[::5]
      [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
      
      #甚至什么都不寫,只寫[:]就可以原樣復制一個list:
      >>> L[:]
      [0, 1, 2, 3, ..., 99]

       

      tuple 也可以用切片操作,只是操作的結果仍是tuple。字符串'xxx'也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串。

      #tuple切片操作
      >>> (0, 1, 2, 3, 4, 5)[:3]
      (0, 1, 2)
      
      #字符串切片操作
      >>> 'ABCDEFG'[:3]
      'ABC'
      >>> 'ABCDEFG'[::2]
      'ACEG'

      在很多編程語言中,針對字符串提供了很多各種截取函數(例如,substring),其實目的就是對字符串切片。Python沒有針對字符串的截取函數,只需要切片一個操作就可以完成,非常簡單。

       

      2、迭代(for循環)

      如果給定一個list或tuple,我們可以通過for循環來遍歷這個list或tuple,這種遍歷我們稱為迭代(Iteration)。Python的for循環不僅可以用在list或tuple上,還可以作用在其他可迭代對象上。只要是可迭代對象,都可以迭代。

      默認情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同時迭代key和value,可以用for k, v in d.items()

      >>> d = {'a': 1, 'b': 2, 'c': 3}
      >>> for key in d:
      ...     print(key)
      ...
      a
      c
      b

      字符串也是可迭代對象,因此,也可以作用于for循環:

      >>> for ch in 'ABC':
      ...     print(ch)
      ...
      A
      B
      C

      我們可以通過 Python 內置的enumerate函數將一個list變成索引-元素對,這樣就可以在for循環中同時迭代 list 的索引和元素本身:

      >>> for i, value in enumerate(['A', 'B', 'C']):
      ...     print(i, value)
      ...
      0 A
      1 B
      2 C

       

      2.1、如何判斷對象是否是可迭代對象

      我們可以通過 collections 模塊的 Iterable 類型來判斷如何判斷一個對象是否是可迭代對象:

      >>> from collections import Iterable
      >>> isinstance('abc', Iterable) # str是否可迭代
      True
      >>> isinstance([1,2,3], Iterable) # list是否可迭代
      True
      >>> isinstance(123, Iterable) # 整數是否可迭代
      False

       

      3、推導式語法(一行代碼創建list、set、dictionary)

      列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創建list的生成式。

      舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))

      >>> list(range(1, 11))
      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

      但如果要生成[1x1, 2x2, 3x3, ..., 10x10]可能我們就需要用到循環。

      但是在 Python 中,用列表生成式則可以用一行語句代替循環生成所需的list。寫列表生成式時,for前面的是一個表達式,把要生成的元素的組成規則放到前面,后面跟for循環,就可以把list創建出來。

      #用循環創建,略顯麻煩:
      >>> L = []
      >>> for x in range(1, 11):
      ...    L.append(x * x)
      ...
      >>> L
      [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
      
      #用列表生成式一行代碼即可創建:
      >>> [x * x for x in range(1, 11)]
      [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
      
      #for循環后面還可以加上if判斷,這樣就可以篩選出僅偶數的平方:
      >>> [x * x for x in range(1, 11) if x % 2 == 0]
      [4, 16, 36, 64, 100]

      還可以使用兩層循環,可以生成全排列:

      >>> [m + n for m in 'ABC' for n in 'XYZ']
      ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

      集合和字典同時也支持這種語法:

      #推導式生成集合
      a = {x for x in 'abracd' if x not in 'abc'}   #{'r', 'd'}
      
      #推導式生成字典
      {x: x**2 for x in (2, 4, 6)}  #{2: 4, 4: 16, 6: 36}

       

      4、__name__屬性(注意是雙下劃線)

      一個模塊被另一個程序第一次引入時,其主程序將運行。如果我們想在模塊被引入時,模塊中的某一程序塊不執行,而僅在該模塊自身運行時才執行,此時我們可以用__name__屬性來進行控制:

      #!/usr/bin/python3
      # Filename: using_name.py
      
      if __name__ == '__main__':
         print('程序自身在運行')
      else:
         print('我來自另一模塊')

      運行如下:

      #執行腳本本身
      
      $ python using_name.py
      程序自身在運行
      
      #在其他模塊引入該模塊
      
      $ python
      >>> import using_name
      我來自另一模塊

      每個模塊都有一個__name__屬性,當其值是'__main__'時,表明該模塊自身在運行,否則是被引入。

       

      5、異常的捕獲和拋出(try...except、raise)

      5.1、try...except

      python 中捕獲用 try... except 語法:

      import sys
      
      try:
          f = open('myfile.txt')
          s = f.readline()
          i = int(s.strip())
      except OSError as err:
          print("OS error: {0}".format(err))
      except ValueError:
          print("Could not convert data to an integer.")
      except:
          print("Unexpected error:", sys.exc_info()[0])
          raise

       

      5.2、try...except...else

      try/except 語句還有一個可選的 else 子句,如果使用這個子句,那么必須放在所有的 except 子句之后。else 子句將在 try 子句沒有發生任何異常的時候執行。

       

      for arg in sys.argv[1:]:
          try:
              f = open(arg, 'r')
          except IOError:
              print('cannot open', arg)
          else:
              print(arg, 'has', len(f.readlines()), 'lines')
              f.close()

      使用 else 子句比把所有的語句都放在 try 子句里面要好,這樣可以避免一些意想不到,而 except 又無法捕獲的異常。

       

      5.3、try...except..finally

      try-finally 語句無論是否發生異常都將執行最后的代碼。

       

      以下實例中 finally 語句無論異常是否發生都會執行:

      try:
          runoob()
      except AssertionError as error:
          print(error)
      else:
          try:
              with open('file.log') as file:
                  read_data = file.read()
          except FileNotFoundError as fnf_error:
              print(fnf_error)
      finally:
          print('這句話,無論異常是否發生都會執行。')

       

      5.4、拋出異常

      Python 使用 raise 語句拋出一個指定的異常,raise 唯一的一個參數指定了要被拋出的異常。它必須是一個異常的實例或者是異常的類(也就是 Exception 的子類)。

      raise [Exception [, args [, traceback]]]

      實例:

      x = 10
      if x > 5:
          raise Exception('x 不能大于 5。x 的值為: {}'.format(x))

      如果你捕獲了一個異常,但并不想去處理它,那么一個簡單的 raise 語句就可以再次把它拋出:

      try:
            raise NameError('HiThere')
      except NameError:
            print('An exception flew by!')
            raise
      
      #異常被拋出
      An exception flew by!
      Traceback (most recent call last):
        File "<stdin>", line 2, in ?
      NameError: HiThere

       

      6、global 和 nonlocal關鍵字

      當函數的內部作用域想修改外部作用域的變量時,就要用到global和nonlocal關鍵字。

      以下實例修改全局變量 num:

      #!/usr/bin/python3
       
      num = 1
      def fun1():
          global num  # 需要使用 global 關鍵字聲明
          print(num) 
          num = 123
          print(num)
      fun1()
      print(num)

      上面代碼將依次輸出:1  123   123

      如果要修改嵌套作用域(非全局作用域)中的變量則需要 nonlocal 關鍵字了,如下實例:

      #!/usr/bin/python3
      
      #下面將依次輸出  100  100
       
      def outer():
          num = 10
          def inner():
              nonlocal num   # nonlocal關鍵字聲明
              num = 100
              print(num)
          inner()
          print(num)
      outer()

       

      posted @ 2021-01-10 16:23  wenxuehai  閱讀(311)  評論(0)    收藏  舉報
      //右下角添加目錄
      主站蜘蛛池模板: 国内精品久久久久影院网站| 又爽又黄又无遮挡的视频| 国产色无码专区在线观看| 性做久久久久久久| 日本一区二区a√成人片| 亚洲精中文字幕二区三区| 久久精品高清一区二区三区| 麻豆一区二区三区香蕉视频| 亚洲国产成人综合精品| 国产精品先锋资源站先锋影院| 阳谷县| 人人妻人人澡人人爽人人精品av | 亚洲日韩精品无码一区二区三区| 中文字幕乱码中文乱码毛片| 亚洲国产欧美在线人成AAAA| 自拍第一区视频在线观看| 国产 亚洲 制服 无码 中文| 尉氏县| 国产成人精品视频网站| 在线一区二区中文字幕| 天堂在/线中文在线资源 官网| 欧美亚洲一区二区三区在线| 久久一夜天堂av一区二区| 午夜一区欧美二区高清三区 | 国产精品va无码一区二区| 无码人妻精品一区二区三区蜜桃 | 亚洲一区二区约美女探花| 亚洲欧美人成电影在线观看| 天天躁久久躁日日躁| 亚洲精品综合一区二区三区| 精品一区二区亚洲国产| 人妻体内射精一区二区三区| 亚洲熟妇色自偷自拍另类| 精品尤物国产尤物在线看| 1024你懂的国产精品| 又黄又刺激又黄又舒服| 久久综合色最新久久综合色| 国产精品污双胞胎在线观看| 无码专区视频精品老司机| 亚洲中文字字幕精品乱码| 久久久亚洲欧洲日产国码606|