1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      python函數(shù)局域變量,python函數(shù)內(nèi)部全局變量

      python中使用閉包及修改外部函數(shù)的局部變量

      在python中,函數(shù)可以被嵌套定義,也就是說,函數(shù)中可以定義函數(shù)。該函數(shù)還可以將其內(nèi)部定義的函數(shù)作為返回值返回。

      創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、鎮(zhèn)康網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為鎮(zhèn)康等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

      閉包的定義:一般來說,我們可以認(rèn)為,如果一個(gè)函數(shù)可以讀取其他函數(shù)中的局部變量,那么它們就構(gòu)成了閉包。

      注意 :閉包的定義不是特別清晰,但大體上的意思是這樣的。

      我們知道,普通的函數(shù)是可以使用全局變量的

      類似的,函數(shù)中定義的函數(shù),也是可以使用外部函數(shù)的變量的。因此,滿足了函數(shù)讀取了其他函數(shù)局部變量的這一條件,他們因此構(gòu)成了閉包。

      在閉包的使用中,我們可以先給外部的函數(shù)賦予不同的局部變量,然后再調(diào)用其中內(nèi)部的函數(shù)時(shí),就可以讀取到這些不同的局部變量了。

      外部變量的使用 在普通函數(shù)中,雖然可以直接使用全局變量,但是不可以直接修改全局變量。從變量的作用域來說,一旦你嘗試修改全局變量,那么就會(huì)嘗試創(chuàng)建并使用一個(gè)同名的局部變量。因此,如果你需要在普通函數(shù)中修改全局變量,需要使用global

      同樣的,如果你希望通過定義在內(nèi)部的函數(shù)去修改其外部函數(shù)的變量,那么必須使用nonlocal

      關(guān)于python 函數(shù)的變量問題

      Python在heap中分配的對(duì)象分成兩類:可變對(duì)象和不可變對(duì)象。所謂可變對(duì)象是指,對(duì)象的內(nèi)容是可變的,例如list。而不可變的對(duì)象則相反,表示其內(nèi)容不可變。

      不可變對(duì)象:int,string,float,tuple

      可變對(duì)象 :list,dictionary

      所以,如果a,b是可變對(duì)象,當(dāng)b傳給 h(a), a和b就引用了同一個(gè)對(duì)象,修改了a對(duì)象的值,就相當(dāng)于修改了b對(duì)象的值。

      如果a,b用的int對(duì)象,那a,b不可變的對(duì)象的特征沒有變(原對(duì)象的值并沒有改變),變的只是創(chuàng)建了新對(duì)象,改變了變量的對(duì)象引用。

      def h(a):

      a=123

      b=456

      h(b)

      print b #結(jié)果是456

      順便說一下,你這個(gè)例子運(yùn)行后的結(jié)果其實(shí)是['456'],不信你可以寫個(gè)程序跑一下,因?yàn)閍=['123]并不是修改對(duì)象的內(nèi)容,而是讓a指向了新的對(duì)象引用,所以,最后b的內(nèi)容還是['456']。

      改成a[0]=123,才是你期望的結(jié)果。

      解析Python函數(shù)變量如何使用

      剛學(xué)用Python的時(shí)候,特別是看一些庫的源碼時(shí),經(jīng)常會(huì)看到func(*args, **kwargs)這樣的函數(shù)定義,這個(gè)*和**讓人有點(diǎn)費(fèi)解。其實(shí)只要把函數(shù)參數(shù)定義搞清楚了,就不難理解了。

      先說說函數(shù)定義,我們都知道,下面的代碼定義了一個(gè)函數(shù)funcA

      def funcA():

      pass

      顯然,函數(shù)funcA沒有參數(shù)(同時(shí)啥也不干:D)。

      下面這個(gè)函數(shù)funcB就有兩個(gè)參數(shù)了,

      def funcB(a, b):

      print a

      print b

      調(diào)用的時(shí)候,我們需要使用函數(shù)名,加上圓括號(hào)擴(kuò)起來的參數(shù)列表,比如 funcB(100, 99),執(zhí)行結(jié)果是:

      100

      99

      很明顯,參數(shù)的順序和個(gè)數(shù)要和函數(shù)定義中一致,如果執(zhí)行funcB(100),Python會(huì)報(bào)錯(cuò)的:

      TypeError: funcB() takes exactly 2 arguments (1 given)

      我們可以在函數(shù)定義中使用參數(shù)默認(rèn)值,比如

      def funcC(a, b=0):

      print a

      print b

      在函數(shù)funcC的定義中,參數(shù)b有默認(rèn)值,是一個(gè)可選參數(shù),如果我們調(diào)用funcC(100),b會(huì)自動(dòng)賦值為0。

      OK,目前為止,我們要定義一個(gè)函數(shù)的時(shí)候,必須要預(yù)先定義這個(gè)函數(shù)需要多少個(gè)參數(shù)(或者說可以接受多少個(gè)參數(shù))。一般情況下這是沒問題的,但是也有在定義函數(shù)的時(shí)候,不能知道參數(shù)個(gè)數(shù)的情況(想一想C語言里的printf函數(shù)),在Python里,帶*的參數(shù)就是用來接受可變數(shù)量參數(shù)的。看一個(gè)例子

      def funcD(a, b, *c):

      print a

      print b

      print "length of c is: %d " % len(c)

      print c

      調(diào)用funcD(1, 2, 3, 4, 5, 6)結(jié)果是

      1

      2

      length of c is: 4

      (3, 4, 5, 6)

      我們看到,前面兩個(gè)參數(shù)被a、b接受了,剩下的4個(gè)參數(shù),全部被c接受了,c在這里是一個(gè)tuple。我們?cè)谡{(diào)用funcD的時(shí)候,至少要傳遞2個(gè)參數(shù),2個(gè)以上的參數(shù),都放到c里了,如果只有兩個(gè)參數(shù),那么c就是一個(gè)empty tuple。

      好了,一顆星我們弄清楚了,下面輪到兩顆星。

      上面的例子里,調(diào)用函數(shù)的時(shí)候,傳遞的參數(shù)都是根據(jù)位置來跟函數(shù)定義里的參數(shù)表匹配的,比如funcB(100, 99)和funcB(99, 100)的執(zhí)行結(jié)果是不一樣的。在Python里,還支持一種用關(guān)鍵字參數(shù)(keyword argument)調(diào)用函數(shù)的辦法,也就是在調(diào)用函數(shù)的時(shí)候,明確指定參數(shù)值付給那個(gè)形參。比如還是上面的funcB(a, b),我們通過這兩種方式調(diào)用

      funcB(a=100, b=99)

      funcB(b=99, a=100)

      結(jié)果跟funcB(100, 99)都是一樣的,因?yàn)槲覀冊(cè)谑褂藐P(guān)鍵字參數(shù)調(diào)用的時(shí)候,指定了把100賦值給a,99賦值給b。也就是說,關(guān)鍵字參數(shù)可以讓我們?cè)谡{(diào)用函數(shù)的時(shí)候打亂參數(shù)傳遞的順序!

      另外,在函數(shù)調(diào)用中,可以混合使用基于位置匹配的參數(shù)和關(guān)鍵字參數(shù),前題是先給出固定位置的參數(shù),比如

      def funcE(a, b, c):

      print a

      print b

      print c

      調(diào)用funcE(100, 99, 98)和調(diào)用funcE(100, c=98, b=99)的結(jié)果是一樣的。

      好了,經(jīng)過以上鋪墊,兩顆星總算可以出場(chǎng)了:

      如果一個(gè)函數(shù)定義中的最后一個(gè)形參有 ** (雙星號(hào))前綴,所有正常形參之外的其他的關(guān)鍵字參數(shù)都將被放置在一個(gè)字典中傳遞給函數(shù),比如:

      def funcF(a, **b):

      print a

      for x in b:

      print x + ": " + str(b[x])

      調(diào)用funcF(100, c='你好', b=200),執(zhí)行結(jié)果

      100

      c: 你好

      b: 200

      大家可以看到,b是一個(gè)dict對(duì)象實(shí)例,它接受了關(guān)鍵字參數(shù)b和c。

      python函數(shù)中局部變量與全局變量遵守規(guī)則

      (1)簡單數(shù)據(jù)類型變量無論是否與全局變量重名,僅在函數(shù)內(nèi)部創(chuàng)建和使用,函數(shù)退出后變量被釋放,如有全局同名變量,其值不變。

      (2)簡單數(shù)據(jù)類型變量在用global保留字聲明后,作為全局變量使用,函數(shù)退出后該變量保留且值被函數(shù)改變。

      (3)對(duì)于組合數(shù)據(jù)類型的全局變量,如果在函數(shù)內(nèi)部沒有被真實(shí)創(chuàng)建的同名變量,則函數(shù)內(nèi)部可以直接使用并修改全局變量的值。

      (4)如果函數(shù)內(nèi)部真實(shí)創(chuàng)建了組合數(shù)據(jù)類型變量,無論是否有同名全局變量,函數(shù)僅對(duì)局部變量進(jìn)行操作,函數(shù)退出后局部變量被釋放,全局變量值不變。

      *《python語言程序設(shè)計(jì)基礎(chǔ)》.高等教育出版社


      當(dāng)前標(biāo)題:python函數(shù)局域變量,python函數(shù)內(nèi)部全局變量
      路徑分享:http://www.ef60e0e.cn/article/dseejhe.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        临夏县| 宝清县| 平舆县| 鄄城县| 日喀则市| 广丰县| 婺源县| 绵阳市| 永德县| 健康| 克拉玛依市| 长兴县| 七台河市| 沂源县| 绥滨县| 兴业县| 桂阳县| 阳西县| 鹤岗市| 焦作市| 大竹县| 四子王旗| 裕民县| 文登市| 健康| 怀安县| 广东省| 井研县| 苗栗县| 乐昌市| 淮安市| 诸暨市| 吉木萨尔县| 贺兰县| 高州市| 阳泉市| 武强县| 互助| 乌苏市| 巴林左旗| 华容县|