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

以后可得記住了--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條評論
主站蜘蛛池模板: 99久久精品99999久久 | 久久国产精品久久久久久 | 五月色婷婷六月噜噜 | 亚洲不卡视频在线 | 91麻豆精品一二三区在线 | 99在线视频免费 | 99久久精品国产国产毛片 | 草久在线视频 | 一级毛片一级毛片a毛片欧美 | 国产激情一级毛片久久久 | 国产伦精品一区二区三区免费迷 | 欧日韩美香蕉在线观看 | 国产午夜精品久久久久免费视 | 国产精品亚欧美一区二区三区 | 欧美性色xo影院69 | 香蕉视频网站在线观看 | 国产成人综合95精品视频免费 | 亚洲日韩色综合视频 | 黄色毛片视频免费 | 久久66热这里只会有精品 | 国产精品婷婷久青青原 | 四虎永久免费在线 | 国产精品亚洲欧美一级久久精品 | 精品九九久久 | 国产码欧美日韩高清综合一区 | 免费观看午夜在线欧差毛片 | 一区在线免费观看 | 精品久久久久久婷婷 | 日日操夜夜操狠狠操 | 久久久这里只有精品加勒比 | 久久天天躁夜夜躁狠狠 | 国产欧美精品三区 | 99精品国产高清一区二区 | 离线枕边人国语在线影视 | xxxx免费国产在线视频 | 日韩伊人| 最近中文字幕精彩视频 | 欧美性猛交ⅹxxx乱大交免费 | 亚洲高清网站 | 91精品视频在线免费观看 | 免费一看一级欧美 |