亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

以后可得記住了--Python筆試面試題小結

系統 1623 0

1.字符串處理

將字符串中的數字替換成其兩倍的值,例如:

修改前:"AS7G123m (d)F77k"

修改后:"AS14G246m (d)F154k"

 ? 個人思路:先用正則表達式將其中的數字匹配出來進行乘2操作,然后將字符串根據其中的數字進行切割,得到一個字符列表,最終將乘以2后的數字和原有的字符進行拼接得到最后的結果。(我腦子比較笨,想不到別的,如果您有更好更簡便的方法,希望可以分享一下!)

            
               1
            
            
              import
            
            
               re

            
            
               2
            
            
               3
            
             text = 
            
              "
            
            
              AS7G123m (d)F77k
            
            
              "
            
            
               4
            
             nums = re.findall(r
            
              '
            
            
              (\d+)
            
            
              '
            
            , text)  
            
              #
            
            
               取出字符串中數字
            
            
               5
            
             double_nums = [2 * int(i) 
            
              for
            
             i 
            
              in
            
             nums]   
            
              #
            
            
               乘以2
            
            
               6
            
             the_str = []  
            
              #
            
            
               字符列表
            
            
               7
            
            
              for
            
             i 
            
              in
            
            
               nums:

            
            
               8
            
                 the_str.append(text.split(i, 1
            
              )[0])

            
            
               9
            
                 text = text.split(i, 1)[1
            
              ]

            
            
              10
            
             result = 
            
              ""
            
            
              #
            
            
               結果
            
            
              11
            
            
              for
            
             i 
            
              in
            
            
               range(len(double_nums)):

            
            
              12
            
                 result += the_str[i] +
            
               str(double_nums[i])

            
            
              13
            
             result +=
            
               text

            
            
              14
            
            
              print
            
            (result)
          

?

2.Python傳參是值傳遞還是引用傳遞?

?  答案是Python中傳遞參數是引用傳遞,那么要證明是引用傳遞呢?可以參考下面這個例子:

            
              1
            
            
              def
            
            
               f(x):

            
            
              2
            
            
              print
            
            
              (id(x))

            
            
              3
            
            
              4
            
            
              5
            
             a = 1

            
              6
            
            
              print
            
            
              (id(a))

            
            
              7
            
            
              f(a)

            
            
              8
            
            
              #
            
            
               140716760159264
            
            
              9
            
            
              #
            
            
               140716760159264
            
          

  這里分別打印了兩個地址,一個是對象a的地址,一個是傳入的參數x的地址,可以看到兩個地址是一樣的,這也就說明Python中的傳參使用的引用傳遞!需要注意的是: 對于不可變類型,在函數中對其操作并不會對原對象產生影響,但對于可變類型,在函數中對其操作則可能會改變其值 ,如下:

1)傳入的參數是不可變類型:

            
               1
            
            
              def
            
            
               f(x):

            
            
               2
            
                 x += 
            
              "
            
            
              666
            
            
              "
            
            
              #
            
            
               這里會創建一個新的對象
            
            
               3
            
            
              print
            
            
              (x)

            
            
               4
            
            
               5
            
            
               6
            
             s = 
            
              "
            
            
              777
            
            
              "
            
            
              #
            
            
               字符串不可變
            
            
               7
            
            
              print
            
            
              (s)

            
            
               8
            
            
              f(s)

            
            
               9
            
            
              print
            
            
              (s)

            
            
              10
            
            
              11
            
            
              #
            
            
               777
            
            
              12
            
            
              #
            
            
               777666
            
            
              13
            
            
              #
            
            
               777
            
          

2)傳入的參數是可變類型:

            
               1
            
            
              def
            
            
               f(x):

            
            
               2
            
                 x.append(4)  
            
              #
            
            
               修改原對象的值
            
            
               3
            
            
              print
            
            
              (x)

            
            
               4
            
            
               5
            
            
               6
            
             s = [1, 2, 3]  
            
              #
            
            
               列表可變
            
            
               7
            
            
              print
            
            
              (s)

            
            
               8
            
            
              f(s)

            
            
               9
            
            
              print
            
            
              (s)

            
            
              10
            
            
              11
            
            
              #
            
            
               [1, 2, 3]
            
            
              12
            
            
              #
            
            
               [1, 2, 3, 4]
            
            
              13
            
            
              #
            
            
               [1, 2, 3, 4]
            
          

?

3.淺拷貝與深拷貝的那些事

  在Python中,淺拷貝與深拷貝是一定要分清楚的!對于淺拷貝和深拷貝,可以這么理解:

  1) 淺拷貝:創建一個對象,但其中包含的是原對象中所包含項的引用,如果用引用的方式修改了其中的對象,就會對原對象進行改變。

  2) 深拷貝:創建一個對象,并且遞歸復制原對象中所包含的對象,此時修改數據不會對原對象產生影響。

在下面的代碼中包含了賦值、淺拷貝和深拷貝,在Python中賦值即引用對象,所以對c操作也就是對原對象a進行操作,對于淺拷貝對象b和d,對其中的引用進行操作會改變對a中的對象,而對深拷貝對象e進行操作就與原對象a無關了。

            
               1
            
            
              import
            
            
               copy

            
            
               2
            
            
               3
            
             a = [1, [2], 3
            
              ]

            
            
               4
            
             b = a[:]  
            
              #
            
            
               使用切片操作,淺拷貝
            
            
               5
            
             c = a  
            
              #
            
            
               賦值操作,即引用
            
            
               6
            
             d = a.copy()  
            
              #
            
            
               淺拷貝
            
            
               7
            
             e = copy.deepcopy(a)  
            
              #
            
            
               深拷貝
            
            
               8
            
            
               9
            
             b.append(4
            
              )

            
            
              10
            
             c.append(5
            
              )

            
            
              11
            
             d.append(6
            
              )

            
            
              12
            
             d[1].append(2
            
              )

            
            
              13
            
             e.append(7
            
              )

            
            
              14
            
             e[1].append(3
            
              )

            
            
              15
            
            
              16
            
            
              print
            
            (a)  
            
              #
            
            
               [1, [2, 2], 3, 5]
            
            
              17
            
            
              print
            
            (b)  
            
              #
            
            
               [1, [2, 2], 3, 4]
            
            
              18
            
            
              print
            
            (c)  
            
              #
            
            
               [1, [2, 2], 3, 5]
            
            
              19
            
            
              print
            
            (d)  
            
              #
            
            
               [1, [2, 2], 3, 6]
            
            
              20
            
            
              print
            
            (e)  
            
              #
            
            
               [1, [2, 3], 3, 7]
            
          

?

?4.Python一行式能干嘛?

  下面是一些Python一行式的示例,從中可以看出Python是非常簡潔和強大的!

  1)一行代碼輸出一百以內的奇數:

print([x for x in range(100) if x % 2])

  2)一行代碼求水仙花數:

print([x for x in range(100, 1000) if int(str(x)[0])**3 + int(str(x)[1])**3 + int(str(x)[2])**3 == x])

  3)一行代碼打印九九乘法表:

print("".join(["{} * {} = {}\t".format(x, y, x * y) if x != y else "{} * {} = {}\n".format(x, y, x * y) for x in range(1, 10) for y in range(1, x + 1)]))

  4)一行代碼實現IP地址轉換,如將192.168.12.1轉換成0b11000000 10101000 00001100 00000001:

print("0b"+" ".join(("00000000" + bin(int(i)).replace("0b", ""))[-8:] for i in ip.split(".")))

  5)一行代碼求1到10的和:

from functools import reduce; print(reduce(lambda x, y: x + y, [i for i in range(1, 11)]))

?

?5.下面這段代碼的結果是什么?

            
              1
            
            
              def
            
            
               mul():

            
            
              2
            
            
              return
            
             [
            
              lambda
            
             x: x * i 
            
              for
            
             i 
            
              in
            
             range(4
            
              )]

            
            
              3
            
            
              4
            
            
              5
            
            
              print
            
            ([m(2) 
            
              for
            
             m 
            
              in
            
             mul()])
          

  以上這段代碼輸出的結果是[6, 6, 6, 6],而不是[0, 2, 4, 6]!

  產生這個問題的原因在于Python閉包的延遲綁定。這意味著內部函數被調用時,參數的值在閉包內進行查找。所以當mul()返回的函數被調用時,i的值會在返回的函數里查找,而for循環完成后i的值為3,也就是i最終賦值為3。因此,每次返回的函數乘以傳入的值就是最后的結果,得到的結果就是[6, 6, 6, 6]。

  如果要解決這個問題,可以參考以下方法:

  1)使用Python生成器。

            
              1
            
            
              def
            
            
               mul():

            
            
              2
            
            
              for
            
             i 
            
              in
            
             range(4
            
              ):

            
            
              3
            
            
              yield
            
            
              lambda
            
             x: x *
            
               i

            
            
              4
            
            
              5
            
            
              6
            
            
              print
            
            ([m(2) 
            
              for
            
             m 
            
              in
            
             mul()])
          

  2)創造一個閉包,利用默認函數進行綁定。

            
              1
            
            
              def
            
            
               mul():

            
            
              2
            
            
              return
            
             [
            
              lambda
            
             x, i=i: x * i 
            
              for
            
             i 
            
              in
            
             range(4
            
              )]

            
            
              3
            
            
              4
            
            
              5
            
            
              print
            
            ([m(2) 
            
              for
            
             m 
            
              in
            
             mul()])
          

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费一级黄色录像 | 久久久精品日本一区二区三区 | 国产精品原创巨作无遮挡 | 一级欧美激情毛片 | xxx中国毛茸茸 | 99在线精品日韩一区免费国产 | 日韩欧美高清在线 | 麻豆久久精品免费看国产 | 亚洲欧洲日韩国产aa色大片 | 成人啪啪97丁香 | 大学生一一级毛片在线播放 | 日本视频久久 | 国产做国产爱免费视频 | 一级特黄a免费大片 | 亚洲在线中文字幕 | 手机在线观看亚洲国产精品 | 天天看片天天爽 | 视频一区视频二区在线观看 | 精品久久久久中文字幕日本 | 色四月| 97人人澡| 久久成年人视频 | 日本又黄又爽又色的免费视频 | 性xxxx奶大欧美高清 | 天天插天天干天天操 | 中文字幕一区久久久久 | 色香蕉网站 | 天天射夜夜爱 | 亚洲精品高清国产一线久久97 | 久久精品av77777 | 久久精品23 | 国产精品亚洲精品观看不卡 | 成人三级做爰在线观看男女 | 91国内精品久久久久影院优播 | 在线观看深夜观看网站免费 | 深夜在线观看网站 | 成年黄网站免费大全毛片 | 久久99一区| 深夜福利成人 | 色四月婷婷| 91亚洲国产三上悠亚在线播放 |