python值傳遞
1. python的值傳遞和引用傳遞區別,哪些類型值傳遞,哪些是引用傳遞
值傳遞僅僅傳遞的是值
引用傳遞,傳遞的是內存地址,修改後會改變內存地址對應儲存的值。
用數組來舉例就最清楚了,例如我們定義一個數組a[]={1,2};
那麼a[0]=1,a[1]=2。
如果我們把數組a里的元素值作為參數傳遞,實際上只是進行了值傳遞,對數組本身沒有影響
如果我們把 數組a的指針作為參數傳遞,那麼假如處理的函數就可以直接修改數組a里的值。
代碼實例:(只是寫個大概的邏輯,語法可能有錯誤)
main()
{
int a[]={1,2};
test(a);
printf(a[0]); //此處列印的值是3, 這就是引用傳遞。
}
public void test(int b[])
{
b[0]=3;
}
2. python 如何把變數的值傳遞給execute的sql中去
python 把變數的值傳遞給execute的sql中去的代碼:
import pymysql
db = pymysql.connect(host="119.XX.XX.XX",
port=3306,
user="XXXXXXXX",
passwd="XXXXXXXXXXXXX",
db="XXXXXX",
charset='utf8')
# %s 佔位符為需要傳遞的參數,切記不要加''雙引號,要不然會報錯
sql = "SELECT totalusercount * 1.4 FROM mm_project_uv_outdoor WHERE poiid = %s AND currenttime = %s"
cursor = db.cursor()
# 以下為傳遞多個參數的用法
cursor.execute(sql,['B00140N5CS','2019-04-23'])
# 傳遞單個參數時 cursor.execute(sql,'B00140N5CS')
print(cursor.fetchall())
db.close()
(2)python值傳遞擴展閱讀:
函數
Python的函數支持遞歸、默認參數值、可變參數,但不支持函數重載。為了增強代碼的可讀性,可以在函數後書寫「文檔字元串」(Documentation Strings,或者簡稱docstrings),用於解釋函數的作用、參數的類型與意義、返回值類型與取值范圍等。可以使用內置函數help()列印出函數的使用幫助。比如:
>>> def randint(a, b):
... "Return random integer in range [a, b], including both end points."...
>>> help(randint)
Help on function randint in mole __main__:
randint(a, b)
Return random integer inrange[a, b], including both end points.
3. python中兩個函數間參數傳遞問題
defplus(a,b):
z=a+1
c=b+5
return(z,c)
(q,w)=plus(1,2)
plud(q,w)
##我這里假設a=1,b=2
##首先plus(1,2),得到z=2,c=7,通過return讓(q,w)=(z,c)的值,然後plud(q,w)即可實現將z,c的值傳遞給下一個函數
4. python中值傳遞還是引用傳遞
首先,Python中一切事物皆對象,變數是對對象在內存中的存儲和地址的抽象。所有的變數都可以理解是內存中一個對象的「引用」,或者,也可以看似c中void*的感覺。
python中統一都是引用傳遞,同時要注意類型是屬於對象的,而不是變數。而對象有兩種,「可更改」(mutable)與「不可更改」(immutable)對象。在python中,strings, tuples, 和numbers是不可更改的對象,而list,dict等則是可以修改的對象。
當我們寫下面語句時:
Python解釋器其實順序幹了兩件事情:
從這里可以看出strings類型是不可變數,不可變實際上指的是不會更該字元串,比如把a = '123' 變為 a ='1234' 實際上是先創建了 「1234」 再用a去指向它。
但是,像list,dict等「可更改」的變數,他們會直接再本地更改,不會進行副本拷貝。
簡言之,當在 Python 中 a = sth 應該理解為給 sth 貼上了一個標簽 a。當再賦值給 a 的時候,就好象把 a 這個標簽從原來的 sth 上拿下來,貼到其他對象上,建立新的"引用"。
既然Python只允許引用傳遞,那有沒有辦法可以讓兩個變數不再指向同一內存地址呢?
對於一個復雜對象的子對象並不會完全復制,什麼是復雜對象的子對象呢?就比如序列里的嵌套序列,字典里的嵌套序列等都是復雜對象的子對象。對於子對象,python會把它當作一個公共鏡像存儲起來,所有對他的復制都被當成一個引用,所以說當其中一個引用將鏡像改變了之後另一個引用使用鏡像的時候鏡像已經被改變了。
deep的時候會將復雜對象的每一層復制一個單獨的個體出來。 當然其中主要的操作還是地址問題。
當一個引用傳遞給函數的時候,函數自動復制一份引用,這個函數里的引用和外邊的引用沒有半毛關系了.所以第一個例子里函數把引用指向了一個不可變對象,當函數返回的時候,外面的引用沒半毛感覺.而第二個例子就不一樣了,函數內的引用指向的是可變對象,對它的操作就和定位了指針地址一樣,在內存里進行修改.
引用計數
PyObject是每個對象必有的內容,其中ob_refcnt就是做為引用計數。當一個對象有新的引用時,它的ob_refcnt就會增加,當引用它的對象被刪除,它的ob_refcnt就會減少.引用計數為0時,該對象生命就結束了。
優點:
缺點:
5. Python 的函數是怎麼傳遞參數的
首先你要明白,Python的函數傳遞方式是賦值,而賦值是通過建立變數與對象的關聯實現的。
對於你的代碼:
執行 d = 2時,你在__main__里創建了d,並讓它指向2這個整型對象。
執行函數add(d)過程中:
d被傳遞給add()函數後,在函數內部,num也指向了__main__中的2
但執行num = num + 10之後,新建了對象12,並讓num指向了這個新對象——12。
如果你明白函數中的局部變數與__main__中變數的區別,那麼很顯然,在__main__中,d仍在指著2這個對象,它沒有改變。因此,你列印d時得到了2。
如果你想讓輸出為12,最簡潔的辦法是:
在函數add()里增加return num
調用函數時使用d = add(d)
代碼如下:
def add(num):
num += 10
return num
d = 2
d = add(d)
print d
6. python如何將值傳遞參數
python將值傳遞參數的方法:
將值賦給變數url,然後調用函數,將url寫到函數名後面的括弧中,這樣就可以將值傳遞給函數的參數y了
示例代碼如下:
執行結果如下:
更多Python知識,請關註:Python自學網!!