日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python字符串的修改以及传参

發布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python字符串的修改以及传参 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前兩天去面試web developer,面試官提出一個問題,用JavaScript或者Python實現字符串反轉,我選擇了Python,然后寫出了代碼(錯誤的):

 1 #!/usr/bin/env python
 2 #-*-coding:utf-8-*-
 3 __author__ = 'ZhangHe'
 4 def reverse(s):
 5     l = 0
 6     r = len(s) - 1
 7     while l < r:
 8         s[l],s[r] = s[r],s[l]
 9         l += 1
10         r -= 1
11     return s

然后面試官問了兩個問題:

(1)可以這樣修改字符串的值嗎?【我回答的,可以】【回答錯誤】

(2)傳入的參數是地址?還是副本?【我回答的,傳值。數字,字符串,元組傳值(immutable);list和dict傳引用(mutable);】【回答傳值,可以直接修改】【回答錯誤,正確的是傳值,immutable】

雖然經常使用字符串,但是還真沒有研究過這個問題,于是上網搜了一下資料:

Python中的字符串是不可變類型,就是說改變一個字符串的元素需要新建一個新的字符串。

字符串是由獨立的字符組成的,也是一種序列,序列的通用操作方法也適用于字符串。例如:

  • 通過切片操作順序地訪問子串;
  • 通過len()求字符串的長度等;
  • 通過in或not in操作符判斷字符串中是否存在某個字符。


Python里面沒有字符這個類型,而是用長度為1 的字符串來表示這個概念,當然,這其實也是一個子串。

訪問字符串舉例:

1 aString = 'Hello World!'
2 print(aString[0])
3 print(aString[1:5])
4 print(aString[6:])

輸出:
H
ello
World!

那么如何改變一個字符串呢?

可以通過給一個變量賦值(或者重賦值)的方式“更新”一個已有的字符串。新的值可能與原有值差不多,也可能跟原有串完全不同。例如:

1 aString = 'Hello World!'
2 aString = aString[:6] + 'Python!'
3 print(aString)
4 aString = 'different string altogether'
5 print(aString)

輸出:
Hello Python!
different string altogether

那么如何刪除一個字符或字符串呢?

再重復一遍,字符串是不可變的,所以不能僅僅刪除一個字符串里的某個字符,你能做的是清空一個空字符串,或者是把剔除了不需要的部分后的字符串組合起來形成一個新串。

假設您想要從“Hello World!”里面刪除小寫的“l”,那么您需要這樣做:

1 aString = 'Hello World!'
2 aString = aString[:3] + aString[4:]
3 print(aString)

輸出:
Helo World!

通過賦一個空字符串或者使用del 語句來清空或者刪除一個字符串。不過,在大部分應用程序里,沒有必要顯式的刪除字符串。定義這個字符串的代碼最終會結束,那時Python 會自動釋放這些字符串。

所以,我寫的反轉字符串代碼是有問題的,正確的代碼應該是:

 1 #!/usr/bin/env python
 2 #-*-coding:utf-8-*-
 3 __author__ = 'ZhangHe'
 4 def reverse(s):
 5     t = ''
 6     r = len(s) - 1
 7     while r>=0:
 8         t = t + s[r]
 9         r -= 1
10     return t
11 s = 'abcd'
12 print reverse(s)

那么傳入的形參s和實參s到底是不是同一個對象呢?可以用id函數來驗證,先來看下id函數的官方解釋。

也就是說,id(obj)函數返回對象obj在其生命周期內位于內存中的地址,id函數的參數類型是一個對象(Python中一切對象,變量中存放的是對象的引用)

我們可以用下邊的代碼驗證:

 1 #!/usr/bin/env python
 2 #-*-coding:utf-8-*-
 3 __author__ = 'ZhangHe'
 4 def reverse(s):
 5     print id(s)
 6     t = ''
 7     r = len(s) - 1
 8     while r>=0:
 9         t = t + s[r]
10         r -= 1
11     return t
12 s = 'abasdfasdfcdabasdfasdfcd'
13 print id(s)
14 print reverse(s)

輸出:

38264224
38264224
dcfdsafdsabadcfdsafdsaba

可以看出傳入的參數實際上是字符串對象的地址,如果把參數換成list或dict,那么輸出的id還是一樣的,所以所,Python中傳參的方式都是傳入對象的地址,只不過數字,字符串和tuple是不可直接修改,而list和dict是可以直接修改。

?

轉載于:https://www.cnblogs.com/CheeseZH/p/5186916.html

總結

以上是生活随笔為你收集整理的Python字符串的修改以及传参的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。