国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一)

這篇具有很好參考價值的文章主要介紹了Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一),python入門到實戰(zhàn),數(shù)據(jù)結(jié)構(gòu),python,數(shù)據(jù)分析,算法

???作者簡介:大家好,我是愛敲代碼的小王,CSDN博客博主,Python小白
??系列專欄:python入門到實戰(zhàn)、Python爬蟲開發(fā)、Python辦公自動化、Python數(shù)據(jù)分析、Python前后端開發(fā)
??如果文章知識點有錯誤的地方,請指正!和大家一起學(xué)習(xí),一起進(jìn)步??
??如果感覺博主的文章還不錯的話,請??三連支持??一下博主哦
??博主正在努力完成2023計劃中:以夢為馬,揚帆起航,2023追夢人

?????? python入門到實戰(zhàn)專欄:從入門到實戰(zhàn)
?????? Python爬蟲開發(fā)專欄:從入門到實戰(zhàn)
?????? Python辦公自動化專欄:從入門到實戰(zhàn)
?????? Python數(shù)據(jù)分析專欄:從入門到實戰(zhàn)
?????? Python前后端開發(fā)專欄:從入門到實戰(zhàn) ? ?

目錄

變量的作用域(全局變量和局部變量)

參數(shù)的傳遞

淺拷貝和深拷貝

參數(shù)的幾種類型?


變量的作用域(全局變量和局部變量)

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

Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一),python入門到實戰(zhàn),數(shù)據(jù)結(jié)構(gòu),python,數(shù)據(jù)分析,算法

全局變量:

1 在函數(shù)和類定義之外聲明的變量。作用域為定義的模塊,從定義位置開始直到模塊結(jié)束。

2 全局變量降低了函數(shù)的通用性和可讀性。應(yīng)盡量避免全局變量的使用。

3 要在函數(shù)內(nèi)改變?nèi)肿兞康闹?,使?global 聲明一下

局部變量:

1 在函數(shù)體中(包含形式參數(shù))聲明的變量。

2 局部變量的引用比全局變量快,優(yōu)先考慮使用

3 如果局部變量和全局變量同名,則在函數(shù)內(nèi)隱藏全局變量,只使用同名的局部變量

【操作】全局變量的作用域測試

a = 100         #全局變量
def f1():
    global a    #如果要在函數(shù)內(nèi)改變?nèi)肿兞康闹?,增加global關(guān)鍵字聲明
    print(a)    #打印全局變量a的值    
    a = 300      
    
f1()
f1()
print(a)

?執(zhí)行結(jié)果:

100

300

【操作】全局變量和局部變量同名測試

a=100
def f1():
    a = 3      #同名的局部變量
    print(a)
    
f1()    
print(a)    #a仍然是100,沒有變化

?執(zhí)行結(jié)果:

3
100

【操作】 輸出局部變量和全局變量

a = 100
def f1(a,b,c):
    print(a,b,c)
    print(locals())            #打印輸出的局部變量
    print("#"*20)
    print(globals())           #打印輸出的全局變量
f1(2,3,4)

輸出結(jié)果:

2 3 4


{'c': 4, 'b': 3, 'a': 2}


####################
{'__name__': '__main__', '__doc__': None,
'__package__': None, '__loader__': <class
'_frozen_importlib.BuiltinImporter'>,
'__spec__': None, '__annotations__': {},
'__builtins__': <module 'builtins' (builtin)>, '__file__':
'E:\\PythonExec\\if_test01.py', 'a': 100,
'f1': <function f1 at 0x0000000002BB8620>}

實時效果反饋

1. 如下關(guān)于全局變量和局部變量的說法,錯誤的是:

A 全局變量:在函數(shù)和類定義之外聲明的變量。作用域從定義位 置開始直到模塊結(jié)束

B 局部變量:在函數(shù)體中(包含形式參數(shù))聲明的變量

C 如果局部變量和全局變量同名,則在函數(shù)內(nèi)隱藏全局變量,只 使用同名的局部變量

D 局部變量的引用和全局變量一樣快

局部變量和全局變量效率測試

局部變量的查詢和訪問速度比全局變量快,優(yōu)先考慮使用,尤其是在循環(huán)的時候。

Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一),python入門到實戰(zhàn),數(shù)據(jù)結(jié)構(gòu),python,數(shù)據(jù)分析,算法

在特別強調(diào)效率的地方或者循環(huán)次數(shù)較多的地方,可以通過將全局

變量轉(zhuǎn)為局部變量提高運行速度。

【操作】測試局部變量和全局變量效率?

import time
a = 1000
def test01():
    start = time.time()
    global a
    for i in range(100000000):
        a += 1
    end = time.time()
    print("耗時{0}".format((end-start)))
def test02():
    c = 1000
    start = time.time()
    for i in range(100000000):
        c += 1
    end = time.time()
    print("耗時{0}".format((end-start)))
test01()
test02()
print(globals())

運行結(jié)果:

耗時5.278882026672363
耗時3.6103720664978027

參數(shù)的傳遞

Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一),python入門到實戰(zhàn),數(shù)據(jù)結(jié)構(gòu),python,數(shù)據(jù)分析,算法

函數(shù)的參數(shù)傳遞本質(zhì)上就是:從實參到形參的賦值操作。Python中 “一切皆對象”,所有的賦值操作都是“引用的賦值”。所以,Python 中參數(shù)的傳遞都是“引用傳遞”,不是“值傳遞”。

具體操作時分為兩類:

1 對“可變對象”進(jìn)行“寫操作”,直接作用于原對象本身。

2 對“不可變對象”進(jìn)行“寫操作”,會產(chǎn)生一個新的“對象空間”,并用新的值填充這塊空間。?

可變對象有: 字典、列表、集合、自定義的對象等

不可變對象有: 數(shù)字、字符串、元組、function等?

傳遞可變對象的引用

傳遞參數(shù)是可變對象(例如:列表、字典、自定義的其他可變對象 等),實際傳遞的還是對象的引用。在函數(shù)體中不創(chuàng)建新的對象拷貝,而是可以直接修改所傳遞的對象。

【操作】參數(shù)傳遞:傳遞可變對象的引用

b = [10,20]
def f2(m):
    print("m:",id(m))       #b和m是同一個對象
    m.append(30)    #由于m是可變對象,不創(chuàng)建對象拷貝,直接修改這個對象
f2(b)
print("b:",id(b))
print(b)

執(zhí)行結(jié)果:

m: 45765960
b: 45765960
[10, 20, 30]

實時效果反饋

1. 列表是可變對象,關(guān)于參數(shù)傳遞可變對象,說法錯誤的是:

b = [10,20]
def f2(m):
    print("m:",id(m))    
    m.append(30)  
f2(b)

A b和m是同一個對象

B b和m是不同的對象

C 對“可變對象”進(jìn)行“寫操作”,直接作用于原對象本身

D f2(b) 把 b 傳遞給 m 的過程中,沒有創(chuàng)建對象的拷貝

傳遞不可變對象的引用

傳遞參數(shù)是不可變對象(例如: int 、 float 、字符串、元組、布爾值),實際傳遞的還是對象的引用。在”賦值操作”時,由于不可變 對象無法修改,系統(tǒng)會新創(chuàng)建一個對象。

【操作】參數(shù)傳遞:傳遞不可變對象的引用

a = 100
def f1(n):
    print("n:",id(n))        #傳遞進(jìn)來的是a對象的地址
    n = n+200            #由于a是不可變對象,因此創(chuàng)建新的對象n
    print("n:",id(n))    #n已經(jīng)變成了新的對象
    print(n)
f1(a)
print("a:",id(a))

執(zhí)行結(jié)果:

n: 1663816464
n: 46608592
300
a: 1663816464

顯然,通過 id 值我們可以看到 n 和 a 一開始是同一個對象。給n賦值 后,n是新的對象。

實時效果反饋

1. 數(shù)字是不可變對象,關(guān)于參數(shù)傳遞不可變對象并且要修改原對 象,說法錯誤的是:

a = 100
def f1(n):
    n = n+200    
f1(a)

A 代碼執(zhí)行完后, b 和 n 是同一個對象

B 代碼執(zhí)行完后, b 和 n 是不同的對象

C 對“不可變對象”進(jìn)行“寫操作”,創(chuàng)建新的對象

D 執(zhí)行 n=n+200 時,創(chuàng)建了新的對象

淺拷貝和深拷貝

Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一),python入門到實戰(zhàn),數(shù)據(jù)結(jié)構(gòu),python,數(shù)據(jù)分析,算法

?為了更深入的了解參數(shù)傳遞的底層原理,我們需要講解一下“淺拷貝 和深拷貝”。我們可以使用內(nèi)置函數(shù): copy (淺拷貝)、 deepcopy (深拷貝)。

?1、淺拷貝:拷貝對象,但不拷貝子對象的內(nèi)容,只是拷貝子對象的引用。

2、深拷貝:拷貝對象,并且會連子對象的內(nèi)存也全部(遞歸)拷貝一份,對子對象的修改不會影響源對象

#測試淺拷貝和深拷貝
import copy
def testCopy():
    '''測試淺拷貝'''
    a = [10, 20, [5, 6]]
    b = copy.copy(a)
    print("a", a)
    print("b", b)
    b.append(30)
    b[2].append(7)
    print("淺拷貝......")
    print("a", a)
    print("b", b)
def testDeepCopy():
    '''測試深拷貝'''
    a = [10, 20, [5, 6]]
    b = copy.deepcopy(a)
    print("a", a)
    print("b", b)
    b.append(30)
    b[2].append(7)
    print("深拷貝......")
    print("a", a)
    print("b", b)
testCopy()
print("*************")
testDeepCopy()

運行結(jié)果:

a [10, 20, [5, 6]]
b [10, 20, [5, 6]]
淺拷貝......
a [10, 20, [5, 6, 7]]
b [10, 20, [5, 6, 7], 30]
a [10, 20, [5, 6]]
b [10, 20, [5, 6]]
深拷貝......
a [10, 20, [5, 6]]
b [10, 20, [5, 6, 7], 30]

實時效果反饋

1. 如下關(guān)于淺拷貝和深拷貝,錯誤的是:

A 淺拷貝使用函數(shù): copy (淺拷貝)

B 淺拷貝:拷貝對象,也全部拷貝子對象

C 深拷貝:拷貝對象,也全部拷貝子對象

D 深拷貝使用函數(shù): deepcopy (深拷貝)

傳遞不可變對象包含的子對象是可變的情況

#傳遞不可變對象時。不可變對象里面包含的子對象是可變的。則方法內(nèi)修改了這個可變對象,源對象也發(fā)生了變化。
a = (10,20,[5,6])
print("a:",id(a))
def test01(m):
    print("m:",id(m))
    m[2][0] = 888
    print(m)
    print("m:",id(m))
test01(a)
print(a)

運行結(jié)果:

a: 41611632

m: 41611632 (10, 20, [888, 6])

m: 41611632 (10, 20, [888, 6])

參數(shù)的幾種類型?

Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一),python入門到實戰(zhàn),數(shù)據(jù)結(jié)構(gòu),python,數(shù)據(jù)分析,算法

位置參數(shù)?

函數(shù)調(diào)用時,實參默認(rèn)按位置順序傳遞,需要個數(shù)和形參匹配。按 位置傳遞的參數(shù),稱為:“位置參數(shù)”。

【操作】測試位置參數(shù)

def f1(a,b,c):
    print(a,b,c)
f1(2,3,4)
f1(2,3)     #報錯,位置參數(shù)不匹配

執(zhí)行結(jié)果:

2 3 4
Traceback (most recent call last):
  File "E:\PythonExec\if_test01.py", line 5,
in <module>
    f1(2,3)
TypeError: f1() missing 1 required positional
argument: 'c

默認(rèn)值參數(shù)

我們可以為某些參數(shù)設(shè)置默認(rèn)值,這樣這些參數(shù)在傳遞時就是可選 的。稱為“默認(rèn)值參數(shù)”。默認(rèn)值參數(shù)放到位置參數(shù)后面。

【操作】測試默認(rèn)值參數(shù)

def f1(a,b,c=10,d=20):   #默認(rèn)值參數(shù)必須位于普通位置參數(shù)后面
    print(a,b,c,d)
f1(8,9)
f1(8,9,19)
f1(8,9,19,29)

執(zhí)行結(jié)果:

8 9 10 20
8 9 19 20
8 9 19 29

命名參數(shù)

我們也可以按照形參的名稱傳遞參數(shù),稱為“命名參數(shù)”,也稱“關(guān)鍵 字參數(shù)”。

def f1(a,b,c):
    print(a,b,c)
f1(8,9,19)          #位置參數(shù)
f1(c=10,a=20,b=30)  #命名參數(shù)

執(zhí)行結(jié)果:

8 9 19
20 30 10

實時效果反饋

1. 如下函數(shù)定義后,調(diào)用時,錯誤的是:

def f1(a,b,c=10,d=20):   #默認(rèn)值參數(shù)必須位于普通位置參數(shù)后面
    print(a,b,c,d)

A f1(5)

B f1(5,6)

C f1(5,6,7,8)

D f1(b=5,a=6,d=7,c=8)文章來源地址http://www.zghlxwxcb.cn/news/detail-615992.html

到了這里,關(guān)于Python入門【變量的作用域(全局變量和局部變量)、參數(shù)的傳遞、淺拷貝和深拷貝、參數(shù)的幾種類型 】(十一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Postman接口測試 —— 設(shè)置全局變量、參數(shù)傳遞、斷言

    Postman接口測試 —— 設(shè)置全局變量、參數(shù)傳遞、斷言

    在能熟練使用postman運行接口請求后,會遇到一些問題。例如: 我們的web網(wǎng)站一共有幾十個接口,測試的時候如果要切換環(huán)境,這個時候要每個接口都要修改url的根路徑,一個一個的改也太麻煩了; 還有時候我們經(jīng)常需要用到上一個接口的返回值,來作為下一個接口的數(shù)據(jù)來

    2024年02月16日
    瀏覽(29)
  • Python的全局變量、局部變量、類變量、實例變量介紹

    Python的全局變量、局部變量、類變量、實例變量介紹

    Python 的變量分類 全局變量:模塊內(nèi)、所有函數(shù)外、所有class外的變量; 局部變量:函數(shù)內(nèi)的變量,class的方法內(nèi)且不使用self.修飾的變量; 類變量:class內(nèi)且不在class的方法內(nèi); 實例變量:class的方法內(nèi)且使用self.修飾的變量。 對于面向過程程序設(shè)計涉及: 全局變量:模塊中

    2024年02月03日
    瀏覽(29)
  • Python 作用域:局部作用域、全局作用域和使用 global 關(guān)鍵字

    Python 作用域:局部作用域、全局作用域和使用 global 關(guān)鍵字

    變量只在創(chuàng)建它的區(qū)域內(nèi)可用。這被稱為作用域。 在函數(shù)內(nèi)部創(chuàng)建的變量屬于該函數(shù)的局部作用域,并且只能在該函數(shù)內(nèi)部使用。 示例:在函數(shù)內(nèi)部創(chuàng)建的變量在該函數(shù)內(nèi)部可用: 如上面的示例所解釋的那樣,變量 x 在函數(shù)外部不可用,但可以在函數(shù)內(nèi)部的任何函數(shù)中使用

    2024年02月08日
    瀏覽(22)
  • Postman的使用——設(shè)置全局參數(shù),參數(shù)的傳遞,從登錄接口的響應(yīng)body中提取數(shù)據(jù)更新全局參數(shù),從響應(yīng)cookie中提取數(shù)據(jù)更新全局變量

    Postman的使用——設(shè)置全局參數(shù),參數(shù)的傳遞,從登錄接口的響應(yīng)body中提取數(shù)據(jù)更新全局參數(shù),從響應(yīng)cookie中提取數(shù)據(jù)更新全局變量

    如圖所示,進(jìn)入postman后先后點這兩個位置(①Environment quick look;②Edit),新增全局變量city和XSRF-TOKEN 如圖所示,在需要調(diào)用的接口請求頭參數(shù)里引用上面定義的全局變量,語法:{{定義的變量名}} 類似apifox中的后置操作。 在postman中的位置是每個目錄或者接口中的Tests處,如

    2023年04月09日
    瀏覽(55)
  • Python全局變量和局部變量(超詳細(xì),純干貨,保姆級教學(xué))

    Python全局變量和局部變量(超詳細(xì),純干貨,保姆級教學(xué))

    ????????????????????????在函數(shù)外部定義的變量。所有函數(shù)內(nèi)部都可以使用這個變量。 ????????????????????????在函數(shù)內(nèi)部定義的變量。這個變量只能在定義這個變量的函數(shù)內(nèi)部使用。 定義看起來一愣一愣的,沒關(guān)系我也是。我將會用實例的方式為你

    2024年02月05日
    瀏覽(25)
  • 全局變量、局部變量和靜態(tài)變量

    全局變量、局部變量和靜態(tài)變量

    定義:在函數(shù)外定義的變量是全局變量,全局變量可以為本文件中其它函數(shù)所共用,它的有效范圍從定義變量的位置開始到本源文件結(jié)束。 設(shè)全局變量的作用:增加了函數(shù)間數(shù)據(jù)聯(lián)系的渠道; 不必要時不要使用全局變量,因為:a) 全局變量在程序的全部執(zhí)行過程中都占用存

    2024年02月06日
    瀏覽(20)
  • Python學(xué)習(xí)筆記(四):函數(shù)的定義、函數(shù)的返回值、None類型、函數(shù)說明文檔、函數(shù)的嵌套調(diào)用、局部變量、全局變量、global關(guān)鍵字

    Python學(xué)習(xí)筆記(四):函數(shù)的定義、函數(shù)的返回值、None類型、函數(shù)說明文檔、函數(shù)的嵌套調(diào)用、局部變量、全局變量、global關(guān)鍵字

    目錄 一、函數(shù)介紹 1. 函數(shù)是: 2. 使用函數(shù)的好處是: 二、函數(shù)的定義: 三、函數(shù)的參數(shù) 1.傳入?yún)?shù)的功能是: 2.函數(shù)的傳入?yún)?shù) - 傳參定義 3.注意事項: 4.練習(xí):測量體溫 四、函數(shù)的返回值 1.函數(shù)返回值的定義 2.None類型 五、函數(shù)說明文檔 六、函數(shù)的嵌套調(diào)用 七、變量的

    2024年02月05日
    瀏覽(21)
  • Golang 局部變量、全局變量 聲明

    Golang 局部變量、全局變量 聲明

    四種聲明方式 + 多變量聲明: 全局變量的聲明和局部變量的聲明方式一、二、三 相同; 但是不能使用局部變量聲明方式四 (:=) 來聲明全局變量。

    2024年02月13日
    瀏覽(24)
  • Java成員變量(全局變量)和局部變量

    在Java中變量類型有 成員變量 、 局部變量 和 靜態(tài)變量(類變量、static變量) ,本篇文章主要介紹成員變量(全局變量)和局部變量的區(qū)別。 根據(jù)變量的作用范圍,將程序中的變量分為成員變量(全局變量)和局部變量。 一、成員變量(全局變量) 成員變量(全局變量):

    2024年02月04日
    瀏覽(35)
  • Javascript作用域 (局部作用域和全局作用域) 詳細(xì)介紹

    Javascript作用域 (局部作用域和全局作用域) 詳細(xì)介紹

    作用域是當(dāng)前的執(zhí)行上下文,值和表達(dá)式在其中“可見”或可被訪問。 常見的作用域為: 全局作用域:腳本模式運行所有代碼的默認(rèn)作用域 函數(shù)作用域:由函數(shù)創(chuàng)建的作用域 局部作用域:用對象{}包著(一個代碼塊)創(chuàng)建出來的作用域 在 了解作用域之前先看一下全局變量

    2024年02月08日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包