乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      初學(xué)Python之eval函數(shù)的嵌套eval中的eval

       小生凡一 2021-11-30

      今天老師布置了一個(gè)作業(yè),很簡(jiǎn)單的幾行代碼。但是也算讓我徹底知道了Python中的eval這個(gè)函數(shù)了,因?yàn)橹皩W(xué)過一點(diǎn)Python,以為自己已經(jīng)知道了eval函數(shù)的用法(還以為這是用來自動(dòng)識(shí)別輸入類型,可以用來輸入字典)
      結(jié)果啪啪打臉了。嗚嗚嗚。。。

      首先明確一下eval的用法:
      value=eval(<字符串>)
      讀取字符串參數(shù)的內(nèi)容
      1.如果該字符串的內(nèi)容為包含運(yùn)算符的python表達(dá)式,則計(jì)算該表達(dá)式并返回結(jié)果。
      2.若該字符串參數(shù)的內(nèi)容為變量,則返回該變量的值。
      3.若該字符串的內(nèi)容為常量,則返回該常量。

      題目如下:
      在Python窗口界面的shell window執(zhí)行下列代碼,觀察輸出結(jié)果,掌握**eval()**函數(shù)的使用方法。(沒辦法老師要求用shell)

      >>> s = '3**3**2>>> s1 = 's’
      >>> s1
      >>> print(s1)
      >>> print(eval(s1))
      >>> print(eval(eval(s1)))
      

      PS:這是老師在word里面打出來的,所以就是這個(gè)樣子啦.
      (<<<也是老師自己打出來的)
      我一開始看見了eval(eval()),確實(shí)人都有點(diǎn)傻了,很是奇怪,反應(yīng)了一會(huì)才反應(yīng)過來。
      首先我們所以知道的eval函數(shù)的返回值是返回表達(dá)式的計(jì)算結(jié)果
      那么現(xiàn)在我們先明白這些變量的值
      s='3 ** 3 ** 2’,再將's’的值賦給s1,那么我認(rèn)為此時(shí)就可以相當(dāng)于字符串中的字符串
      那么s1就可以相當(dāng)于' '3 ** 3 ** 2’ ’(為了和雙引號(hào)分開,我在兩個(gè)單引號(hào)中加了個(gè)空格),此時(shí)的s1就有兩層,在我的理解看來,此時(shí)使用eval函數(shù)就像剝開洋蔥一樣,返回其中所蘊(yùn)含的值。

      >>> s='3**3**2'
      >>> s1='s'
      >>> s1
      's'
      >>> s
      '3**3**2'
      >>> print(s1)
      s
      

      s1是代表s這個(gè)字符串,Python中的字符串是有單引號(hào)'’或是雙引號(hào)“”的,而輸出則就是將其字符串輸出出來,不需要帶引號(hào)。

      >>> print(eval(s1))
      3**3**2
      >>> print(s)
      3**3**2
      

      我們從這里可以看到s和eval(s1)的效果是一樣的,而s就僅僅比s1多了一個(gè)引號(hào)。
      所以我們可以知道的就是eval(s1)的返回值就是返回s當(dāng)中的值,注意此時(shí)都是字符串的形式。我們可以驗(yàn)證一下。

      >>> isinstance(s,str)
      True
      >>> isinstance(s1,str)
      True
      

      那么問題來了,eval(eval())呢?
      現(xiàn)在問題就變得很簡(jiǎn)單了。eval(s1)就是'3 ** 3 ** 2’,再對(duì)其進(jìn)行eval就是返回這個(gè)表達(dá)式的結(jié)果了。PS:這個(gè)冪運(yùn)算的結(jié)合性是從右往左的呦~

      >>> print(eval(eval(s1)))
      19683
      >>> print(eval(s))
      19683
      

      那么就是3的9次方啦

      總代碼如下:

      >>> s='3**3**2'
      >>> s1='s'
      >>> s1
      's'
      >>> print(s1)
      s
      >>> print(eval(s1))
      3**3**2
      >>> print(s)
      3**3**2
      >>> print(eval(eval(s1)))
      19683
      >>> print(eval(s))
      19683
      

      但是這里能如果你想有一次性輸出的話呢,可以在每一句的后面加一個(gè);\即可,如下圖所示:

      >>> s='3**3**2';   s1='s';   print(s1);   print(eval(s1));   print(eval(eval(s1)))
      s
      3**3**2
      19683
      

      就是這樣啦嘻嘻收工!
      最后說一下,本人只是大一新生,初學(xué)編程,也是剛接觸Python不久,這篇文章也只是我自己看書做題上網(wǎng)查了之后,自己思考的結(jié)果。如果我有什么地方不正確的話,懇請(qǐng)各位大佬斧正!謝謝!

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多