国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python 函數(shù)傳參之傳值還是傳引用的分析

python 函數(shù)傳參之傳值還是傳引用的分析

2020-12-06 17:59loleina Python

這篇文章主要介紹了python 函數(shù)傳參之傳值還是傳引用的分析,需要的朋友可以參考下

首先還是應(yīng)該科普下函數(shù)參數(shù)傳遞機(jī)制,傳值和傳引用是什么意思?

   函數(shù)參數(shù)傳遞機(jī)制問題在本質(zhì)上是調(diào)用函數(shù)(過程)和被調(diào)用函數(shù)(過程)在調(diào)用發(fā)生時(shí)進(jìn)行通信的方法問題。基本的參數(shù)傳遞機(jī)制有兩種:值傳遞和引用傳遞。

  值傳遞(passl-by-value)過程中,被調(diào)函數(shù)的形式參數(shù)作為被調(diào)函數(shù)的局部變量處理,即在堆棧中開辟了內(nèi)存空間以存放由主調(diào)函數(shù)放進(jìn)來的實(shí)參的值,從而成為了實(shí)參的一個(gè)副本。值傳遞的特點(diǎn)是被調(diào)函數(shù)對(duì)形式參數(shù)的任何操作都是作為局部變量進(jìn)行,不會(huì)影響主調(diào)函數(shù)的實(shí)參變量的值。

  引用傳遞(pass-by-reference)過程中,被調(diào)函數(shù)的形式參數(shù)雖然也作為局部變量在堆棧中開辟了內(nèi)存空間,但是這時(shí)存放的是由主調(diào)函數(shù)放進(jìn)來的實(shí)參變量的地址。被調(diào)函數(shù)對(duì)形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調(diào)函數(shù)中的實(shí)參變量。正因?yàn)槿绱耍徽{(diào)函數(shù)對(duì)形參做的任何操作都影響了主調(diào)函數(shù)中的實(shí)參變量。

python中實(shí)際又是怎么樣的呢?

先看一個(gè)簡(jiǎn)單的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from ctypes import *
import os.path
import sys
 
def test(c):
  print "test before "
  print id(c)
  c+=2
  print "test after +"
  print id(c)
  return c
 
def printIt(t):
  for i in range(len(t)):
    print t[i]
 
if __name__=="__main__":
  a=2
  print "main before invoke test"
  print id(a)
  n=test(a)
  print "main afterf invoke test"
  print a
  print id(a)

運(yùn)行后結(jié)果如下:

?
1
2
3
4
5
6
>>>
main before invoke test
test before
test after +
main afterf invoke test
39601564

d函數(shù)可以獲得對(duì)象的內(nèi)存地址.很明顯從上面例子可以看出,將a變量作為參數(shù)傳遞給了test函數(shù),傳遞了a的一個(gè)引用,把a(bǔ)的地址傳遞過去了,所以在函數(shù)內(nèi)獲取的變量C的地址跟變量a的地址是一樣的,但是在函數(shù)內(nèi),對(duì)C進(jìn)行賦值運(yùn)算,C的值從2變成了4,實(shí)際上2和4所占的內(nèi)存空間都還是存在的,賦值運(yùn)算后,C指向4所在的內(nèi)存。而a仍然指向2所在的內(nèi)存,所以后面打印a,其值還是2.

如果還不能理解,先看下面例子

?
1
2
3
4
5
6
>>> a=1
>>> b=1
>>> id(a)
>>> id(b)
>>> a=2
>>> id(a)

python 函數(shù)傳參之傳值還是傳引用的分析

而基于最前面的例子,大概可以這樣描述:

python 函數(shù)傳參之傳值還是傳引用的分析

那python函數(shù)傳參就是傳引用?然后傳參的值在被調(diào)函數(shù)內(nèi)被修改也不影響主調(diào)函數(shù)的實(shí)參變量的值?再來看個(gè)例子。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from ctypes import *
import os.path
import sys
 
def test(list2):
  print "test before "
  print id(list2)
  list2[1]=30
  print "test after +"
  print id(list2)
  return list2
 
def printIt(t):
  for i in range(len(t)):
    print t[i]
 
if __name__=="__main__":
  list1=["loleina",25,'female']
  print "main before invoke test"
  print id(list1)
  list3=test(list1)
  print "main afterf invoke test"
  print list1
  print id(list1)

實(shí)際值為:

?
1
2
3
4
5
6
>>>
main before invoke test
test before
test after +
main afterf invoke test
['loleina', 30, 'female']

發(fā)現(xiàn)一樣的傳值,而第二個(gè)變量居然變化,為啥呢?

實(shí)際上是因?yàn)閜ython中的序列:列表是一個(gè)可變的對(duì)象,就基于list1=[1,2] list1[0]=[0]這樣前后的查看list1的內(nèi)存地址,是一樣的。

?
1
2
3
4
5
6
>>> list1=[1,2]
>>> id(list1)
>>> list1[0]=[0]
>>> list1
[[0], 2]
>>> id(list1)

結(jié)論:python不允許程序員選擇采用傳值還是傳引用。Python參數(shù)傳遞采用的肯定是“傳對(duì)象引用”的方式。這種方式相當(dāng)于傳值和傳引用的一種綜合。如果函數(shù)收到的是一個(gè)可變對(duì)象(比如字典或者列表)的引用,就能修改對(duì)象的原始值--相當(dāng)于通過“傳引用”來傳遞對(duì)象。如果函數(shù)收到的是一個(gè)不可變對(duì)象(比如數(shù)字、字符或者元組)的引用,就不能直接修改原始對(duì)象--相當(dāng)于通過“傳值'來傳遞對(duì)象。

原文鏈接:http://www.cnblogs.com/loleina/p/5276918.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 毛片国产 | 国产黄色影视 | 含羞草www网址进入在线观看 | 中文字幕亚洲视频 | 羞羞网站在线观看 | 国产精品高清在线 | 本道综合精品 | 小视频免费在线观看 | 久久国产免费 | 国产免费av在线 | 成年免费观看 | 黄色影视在线免费观看 | 亚洲精品成人悠悠色影视 | 久久久久久av | 久久小视频 | 亚洲一区二区中文字幕 | 日本久久国产 | 亚洲在线一区 | 免费自拍偷拍视频 | 久久久一 | 午夜小电影 | 综合网激情五月 | 久久久久久久国产精品视频 | 久草成人网 | 国产毛片黄色片 | 一区二区三区在线免费视频 | 婷婷精品久久久久久久久久不卡 | 欧美日韩三区 | 欧美在线综合 | 国产成人精品综合 | 天堂中文在线8 | 色二区 | 国产精品99久久久久久www | 国产精品久久久久久久久久免费看 | 色综合久久久 | 免费观看一区二区三区 | 国产一区二区三区免费视频 | 在线国产小视频 | 在线视频 中文字幕 | av国产精品 | 69久久夜色精品国产69乱www |