• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Day 6

    標簽: 學習記錄  學習筆記  python

    2020/8/27

    函數調用的底層

    調用方法的時候 其實就是調用已經創造好的對象。調用的時候不會新鍵對象

    在堆里面建立一個對象,在棧里面也保存了一個變量,這個值就是對象的地址
    ()就是調用
    在這里插入圖片描述

    def test():
    	print("sxtsxt")
    test01()
    c = test01
    #c 把test01的值一樣 ,調用c 的時候就找到對應的對象 
    

    變量的作用域

    變量起作用的范圍稱作變量的作用域;不同的作用域內 同名變量之間不影響。變量分為全局變量,局部變量。
    全局變量:(globals())

    1. 在函數和類定義之外聲明的變量,作為域為定義的模塊,從定義位置開始直到模塊結束
    2. 全局變量降低了函數的通用性 和可讀性。盡量避免使用全局變量
    3. 全局變量一般用于常量
    4. 函數內要改變全局變量的值 用global聲明
      局部變量(locals())
    5. 在函數體內聲明的變量
    6. 局部變量比全局變量引用快,所以說優先考慮局部變量
    7. 如果局部變量和全局變量同名,則在函數內隱藏全局變量,只用局部變量。如果要使用 需要global聲明一下
      在這里插入圖片描述

    在調用局部變量的時候 會有一個棧幀(stack frame),棧幀可以訪問外面,但是不能外面訪問里面。并且棧幀被調用結束后 就會被刪除。

    能使用局部變量就盡量使用局部變量

    參數的傳遞

    python 中的參數的傳遞都是“引用傳遞”,而不是值傳遞

    1. 對于可變對象,就進行寫操作, 直接作用于對象本身(字典,列表,集合,自定義對象等)
    2. 對于不可變對象,進行寫操作,會產生一個新的對象空間,并用新的值填入這塊空間(數字,字符串,元組,function等)
    a = [10, 20]
    
    
    def text0(t):
        print(id(t))
        t.append(300)`
        print(id(t))
        
    
    text0(a)
    print(a)
    

    在這里插入圖片描述

    傳遞不可變對象的引用,會創建一個新對象

    在這里插入圖片描述

    淺拷貝和深拷貝

    用拷貝方法copy() deepcopy()
    淺拷貝 只拷貝對象的引用
    深拷貝 會對子對象的內存全部拷貝一份,對子對象內存修改不會影響源對象

    a = [10,20,30,[5,6]]
    b = copy.copy(a)
    c = copy.deepcopy(a)
    
    print("a",a)
    print("b",b)
    
    b.append(30)
    b[3].append(7)
    print("淺拷貝")
    
    print("a",a)
    

    在這里插6入圖片描述
    深拷貝
    在這里插入圖片描述
    參數的傳遞 其實就是淺拷貝

    參數的幾種類型

    位置參數:通過位置確定的參數,通過個數和形參匹配

    def f1(a,b,c)
    	print("{0},{1},{2}".format(a,b,c))
    
    f1(10,20,30)
    
    

    默認值參數:我們在定義形參的時候,可以提前定義參數的值,這樣在后面傳入值的話 就是新傳的值。默認值參數要放普通參數后面后面

    def f1(a,b,c=30)
    	print("{0},{1},{2}".format(a,b,c))
    
    f1(10,20)
    
    

    命名參數:可以通過名字來匹配形參。

    def f1(a,b,c)
    	print("{0},{1},{2}".format(a,b,c))
    
    f1(c=30, a=10, b=20)
    
    

    可變參數:
    用一個* 儲存參數變為元組
    用2個* 儲存參數變為字典

    def f1(a,b,*c)
    	print("{0},{1},{2}".format(a,b,c))
    
    f1(10,20,3040)
    
    
    def f1(a,b,**c)
    	print("{0},{1},{2}".format(a,b,c))
    
    f1(10,20,name = "jack", age = 18)
    

    強制命名參數
    如果*號在前面的話 那么只能用命名方法 來為形參命名

    def f1(*a,b,c)
    	print("{0},{1},{2}".format(a,b,c))
    
    f1(234, b=20,c= 40)
    
    

    lambda 表達式和匿名函數

    iambda 表達式可以用來聲明匿名,是一種簡單的,在同一行中定義函數的方法。lambda 函數實際生成了一個函數對象
    lambda 一個空格 arg1 arg2 : 表達式

    f = lambda a,b,c:a+b+c
    print(f)
    print(f(2,3,4))
    
    h = f(123print(g)
    

    eval()函數

    功能: 將字符串str當成有效的表達式 來求值并返回計算結果
    語法 : eval(source[,globals[,locals]]) -> value
    參數:source: 一個表達式或函數compile()返回的代碼
    globals 必須是字典

    遞歸函數

    自己調用自己的函數,
    要有終止符號,第n個和n-1 中間要有聯系

    def test01(n):
        print("test01:", n)
        if n == 0:
            print("over")
        else:
            test01(n-1)
    
    
    test01(4)
    

    在這里插入圖片描述
    使用遞歸 計算階乘

    def feature(n):
    	if n ==1:
    		return 1
    	else:
    		return n*feature(n-1)
    

    在這里插入圖片描述

    版權聲明:本文為weixin_50192514原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_50192514/article/details/108261441

    智能推薦

    Day6 循環

    Python基礎 day6-2020.1.11 if...elif...else 不定次數的循環 連行符 \ while ... else while循環嵌套 作業 if…elif…else 123*…*100的結果 不定次數的循環 連行符 \ while … else 循環正常退出走else,break出的循環不走else 輸入一個數,判斷...

    Java學習 Day 6

    OOP 面向對象編程 OOA 面向對象分析 OOD 面向對象設計 面向對象的特征: 1.封裝 2.繼承 3.多態 對象 類 類就是圖紙,汽車就是堆內存中的對象 類成員 局部變量 成員變量 堆 數組和對象在堆中。 棧 方法在棧中 其中 Car c = new Car(); //三步操作(1.在棧內存中定義 一個變量。2.在堆內存中開辟一個空間,產生內存地址。3.把內存地址賦值給變量c java VM...

    Verilog DAY6

    1 reg 寄存器 綜合成物理連線,鎖存器和觸發器 always,initial Wire 綜合成真實的物理連線 assign 阻塞賦值 = 用于組合邏輯 非阻塞賦值 <= 用于時序邏輯 Parameter 參數 define宏定義 起作用的范圍不同 (1)作用域不同。parameter作用于聲明的那個文件;define從編譯器讀到這條指令開始到編譯結束都有效,或者遇到undef命令使之失效...

    筆記day6

    引用數據類型有三種,數組,類,接口。 對于幾個基本變量有兩種操作方式:賦值和取值(也就是打印)。 下面的分析是自己定義了手機類然后測試類進行編譯運行的內存變化圖。 兩個類都需要運行,然后棧內存,堆內存,方法區。 Testphone.class先進內存(方法區的內存 )然后main進來;Phone.class進入方法區,然后是 color,brand,size屬性進入方法區; 程序運行的時候,mai...

    JAVA DAY6

    文章目錄 JAVA DAY6 面向對象和面向過程 舉例:洗衣服 類 如何使用類: 一個對象的內存圖 兩個對象的內存圖 成員變量和局部變量 private關鍵字 this關鍵字 封裝 構造方法 JAVA DAY6 面向對象和面向過程 面向過程:強調的是每一個功能的步驟 面向對象:強調的是對象,然后有對象去調用功能 面向對象的思想: 面向對象是基于面向過程的一種編程思想 面向對象的思想特點: 1.是一...

    猜你喜歡

    day6

    cyclic 這個題直接模擬,先把k%一下防止過大 然后直接做就行了 book 這個題是最難的 其實是一個貪心,很簡單的貪心,但很難想 別人講也聽不懂,我就沒搞懂 因為已經讀過的書必須放到上面,所以搬后面的書時,必須搬之前看過的書 不如把你下一次要看的書放倒最前面,這樣就能搬最小代價的書了。 set 這是一個樹形dp題 很容易得出 一個父節點的方案數可以由子節點組合出來出,而子節點的方案數為,選子...

    Python Day6

    常用模塊 random random() 方法返回隨機生成的一個實數 import random print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之間的整數 print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之間的整數 print(random.choice([1,'23',[4,5]])) #1或者23或者[4,5...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡