最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中字符串的修改及傳參詳解

 更新時間:2016年11月30日 11:04:31   作者:ZH奶酪—張賀  
最近在一次使用python實現(xiàn)字符串反轉(zhuǎn)的時候,發(fā)現(xiàn)寫出的代碼居然是錯誤的,于是通過思考后決定要總結(jié)下這次的經(jīng)歷,于是寫了這篇文章,本文的內(nèi)容主要給大家介紹了Python中字符串的修改及傳參,有需要的朋友們可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。

發(fā)現(xiàn)問題

最近在面試的時候遇到一個題目,選擇用JavaScript或者Python實現(xiàn)字符串反轉(zhuǎn),我選擇了Python,然后寫出了代碼(錯誤的):

#!/usr/bin/env python
#-*-coding:utf-8-*-
__author__ = 'ZhangHe'
def reverse(s):
 l = 0
 r = len(s) - 1
 while l < r:
  s[l],s[r] = s[r],s[l]
  l += 1
  r -= 1
 return s

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

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

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

思考如下

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

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

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

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

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

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

輸出:

Helo World!

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

所以,我寫的反轉(zhuǎn)字符串代碼是有問題的,正確的代碼應(yīng)該是:

#!/usr/bin/env python
#-*-coding:utf-8-*-
__author__ = 'ZhangHe'
def reverse(s):
 t = ''
 r = len(s) - 1
 while r>=0:
  t = t + s[r]
  r -= 1
 return t
s = 'abcd'
print reverse(s)

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

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

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

#!/usr/bin/env python
#-*-coding:utf-8-*-
__author__ = 'ZhangHe'
def reverse(s):
 print id(s)
 t = ''
 r = len(s) - 1
 while r>=0:
  t = t + s[r]
  r -= 1
 return t
s = 'abasdfasdfcdabasdfasdfcd'
print id(s)
print reverse(s)

輸出:

38264224
38264224
dcfdsafdsabadcfdsafdsaba

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • python+tifffile之tiff文件讀寫方式

    python+tifffile之tiff文件讀寫方式

    今天小編就為大家分享一篇python+tifffile之tiff文件讀寫方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 詳解Python中的整除運算及其應(yīng)用場景

    詳解Python中的整除運算及其應(yīng)用場景

    在Python編程中,整除運算(也稱為整商運算)是一個常見的操作,它用于計算兩個數(shù)相除后的整數(shù)部分,下面就跟隨小編一起來了解一下它的語法,工作原理和實際應(yīng)用案例吧
    2024-11-11
  • Django自動注冊tasks及使用方式

    Django自動注冊tasks及使用方式

    這篇文章主要為大家介紹了Django自動注冊tasks及使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖

    一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖

    一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖,本文涵蓋了Python編程的核心知識,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Python?循環(huán)緩沖區(qū)

    Python?循環(huán)緩沖區(qū)

    Python 循環(huán)緩沖區(qū)是一種快速高效的數(shù)據(jù)存儲方式。 循環(huán)數(shù)據(jù)緩沖區(qū)是一個隊列,可以用作容納單個對象的容器,這篇文章主要介紹了Python?循環(huán)緩沖區(qū),需要的朋友可以參考下
    2023-09-09
  • python中plot實現(xiàn)即時數(shù)據(jù)動態(tài)顯示方法

    python中plot實現(xiàn)即時數(shù)據(jù)動態(tài)顯示方法

    這篇文章主要為大家詳細介紹了python中plot實現(xiàn)即時數(shù)據(jù)動態(tài)顯示方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • python的函數(shù)參數(shù)你了解嗎

    python的函數(shù)參數(shù)你了解嗎

    這篇文章主要為大家詳細介紹了python的函數(shù)參數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 創(chuàng)建SparkSession和sparkSQL的詳細過程

    創(chuàng)建SparkSession和sparkSQL的詳細過程

    SparkSession 是 Spark SQL 的入口,Builder 是 SparkSession 的構(gòu)造器。 通過 Builder, 可以添加各種配置,并通過 stop 函數(shù)來停止 SparkSession,本文給大家分享創(chuàng)建SparkSession和sparkSQL的詳細過程,一起看看吧
    2021-08-08
  • 快速解決pandas.read_csv()亂碼的問題

    快速解決pandas.read_csv()亂碼的問題

    今天小編就為大家分享一篇快速解決pandas.read_csv()亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 我用Python給班主任寫了一個自動閱卷腳本(附源碼)

    我用Python給班主任寫了一個自動閱卷腳本(附源碼)

    這篇文章主要介紹了如何用Python給寫了一個自動閱卷腳本,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論

淮滨县| 讷河市| 石楼县| 泰来县| 安溪县| 巧家县| 定南县| 甘德县| 博罗县| 泽州县| 泰来县| 靖西县| 美姑县| 荣昌县| 洛南县| 满城县| 德惠市| 苍溪县| 崇礼县| 溧水县| 尚义县| 岢岚县| 沈阳市| 松原市| 南阳市| 泸定县| 彭泽县| 手机| 维西| 镇沅| 嘉禾县| 来安县| 屏东市| 汝城县| 静海县| 阿合奇县| 商都县| 万宁市| 沧州市| 商城县| 梁河县|