1. 程式人生 > >Problem#1 Python的函式引數傳遞

Problem#1 Python的函式引數傳遞

     本專欄會不定期增加一些Python基本問題的分析和解答以促進Python知識的理解和掌握。第一道Python題如下:

#第一題Python題
a = 1
def fun(a):
    a = 2
fun(a)
print(a)

b = []
def fun(b):
   b.append(1)
fun(b)
print(b)
這道題a與b的輸出是什麼?我們不妨先把其中的地址打印出來:
#Problem#1
a = 1
def fun(a):
    print(str(id(a)))
    a = 2
    print(str(id(a))+":"+str(id(2)))    
fun(a)
print(str(id(a))+":"+str(a))

b = []
def fun(b):
    print(str(id(b)))
    b.append(1)
    print(str(id(b))+":"+str(id(1)))
fun(b)            
print(str(id(b))+":"+str(b))
輸出結果為:

1355046512
1355046528:1355046528
1355046512:1
46538224
46538224:1355046512
46538224:[1]

從地址中可以看到,a的地址發生了變化,其實a傳入的是複製的引用值,儲存的是數字的地址,由於是值傳遞,所以實際值並沒有改變,b為列表,傳入的是實際的地址,所以值發生了改變。

相關推薦

Python 函式 引數傳遞

引數傳遞    在 python 中,型別屬於物件,變數是沒有型別的:        a=[1,2,3]        a="Runoob" &nbs

Python函式引數傳遞的問題

Python中的一些概念: 變數:沒有型別,可以指向任何物件 物件:有型別。物件分為可變物件和不可變物件 從id可以看出變數是沒有型別的,同一組資料指向不同的物件,id不同。 Python中引數傳遞是傳遞的變數的值,即變數所指向的物件的地址。 傳遞規律

python函式引數傳遞規則

1、宣告一個引數具有預設值引數的函式,如下: def hello(name = 'python')     print('你好',name) ---無引數傳遞直接呼叫函式,則為:你好,python--(hello) ---有引數傳遞時,如:hello('小明')--結果為:

關於Python函式引數傳遞方式--值傳遞?引用傳遞

渣渣我在學習中遇到的一點問題,特地貼出來,由於我水平渣,所以如有問題,請多指教 經過測試可以發現: python3 不允許我們選擇引數傳遞方式,但是他已經全部採用了引用傳遞。有幾點需要注意: 1.引用傳遞可以當做值傳遞使用,只是你需要把他賦值給一個臨時變數副本,不要直接使

Problem#1 Python函式引數傳遞

     本專欄會不定期增加一些Python基本問題的分析和解答以促進Python知識的理解和掌握。第一道Python題如下: #第一題Python題 a = 1 def fun(a): a = 2 fun(a) print(a) b = [] def fun(

Python基礎筆記_Day07_函式引數傳遞、關鍵字引數、預設引數、匿名函式、裝飾器

Day07_函式引數傳遞、關鍵字引數、預設引數、匿名函式、裝飾器 07.01_Python基礎語法(函式的引數的傳遞)(掌握) 07.02_Pythony語言基礎(關鍵字引數)(掌握) 07.03_Pythony語言基礎(預設引數/預設引數)(掌握) 07.04_Pythony語言基礎(

四、1函式引數是按值傳遞還是按引用傳遞

參考連結:https://www.zhihu.com/question/27114726 http://bosn.me/js/js-call-by-sharing/     基本型別在函式引數中肯定是

Python函式引數傳遞引數可變與不可變問題

首先看下面的例子: a = 1 def func(a): a=2 func(a) print(a) ##1 a = [] def func(a): a.append(1) func(a) print(a) ##[1] 解釋如下: 型別是屬於物件的,而不是變

python函式引數1

(1)<1> 定義帶有引數的函式示例如下:def add2num(a, b): c = a+b print c <2> 呼叫帶有引數的函式以呼叫上面的add2num(a, b)函式為例:def add2num(a, b): c

python 函式引數傳遞(引數帶星號的說明) 元組傳遞 字典傳遞

python中函式引數的傳遞是通過賦值來傳遞的。函式引數的使用又有倆個方面值得注意:1.函式引數是如何定義的 2.在呼叫函式的過程中引數是如何被解析 先看第一個問題,在python中函式引數的定義主要有四種方式:1.F(arg1,arg2,...)這是最常見的定義方式,一個函式可以定義任意個引數,每個引

Python學習之函式引數傳遞:傳值 or 引用 ?

在學完Python函式那一章節時,很自然的的就會想到Python中函式傳參時傳值呢?還是傳引用?或者都不是? 我回去看了看我以前做的關於淺拷貝與深拷貝的筆記,其實那裡也已經涉及了一些引用相關的問題了。不過在這裡還是再進行一次總結吧。 在回答上面的問題之前我們先

Python函式引數傳遞

前幾天寫一個方法的時候,內部呼叫了第三方庫的可變引數方法,由於實際的需求,導致引數越寫越長,很不方便。這時是不是我們自己也應該寫一個可變引數的方法,然後根據需要動態傳遞引數? 在解決這個問題之前,我們先來了解Python中四種傳遞引數的形式: fun1(a, b, c)

第二週專案1-C/C++語言中函式引數傳遞的三種方式

問題及程式碼: /*  * Copyright (c) 2016,煙臺大學計算機與控制工程學院  * All rights reserved.  * 檔名稱:Cpp1.cpp  * 作者:張相如  * 完成日期:2016年9月5日  * 版本號:v1.0  *   * 問題

python函式引數引用傳遞

 首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?    函式引數傳遞機制問題在本質上是呼叫函式(過程)和被呼叫函式(過程)在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種:值傳遞和引用傳遞。   值傳遞(passl-by-value)過程中,被調

Python函式引數和返回值

- 函式引數和返回值的作用 函式:封裝功能獨立的程式碼,在需要時通過函式名被呼叫 引數:外界希望在函式內部處理的資料 返回值:函式完成工作後,給呼叫者的一個結果 函式根據有無引數和返回值,可以相互結合,共有4種組合形式 1.無引數,無返回值 2.無引數,有返回值 3.有引數,無返回值

C#呼叫C++編寫的DLL函式引數傳遞

                        &nb

JS中的函式引數傳遞到底是按值傳遞還是按引用傳遞

首先我們知道JS中的資料型別大致可以分為簡單資料型別和複雜資料型別; 當我們宣告一個變數並給它賦值時,可以賦給其簡單值和複雜值(以下堆記憶體和棧記憶體的地址表示均隨意取的,只是為了區分,不代表真實的記憶體地址); 針對簡單資料型別: 例1 var simpleData1 = 18 v

Java和Python引數傳遞

我之前總結過很多次java的引數傳遞問題,但是總覺得不夠完美,今天再來總結一次,帶上python java的引數傳遞只有值傳遞,這是首先要宣告的. 如果傳遞的引數是基本資料型別,那就是把本身的複製傳了過去,不管在方法內部怎樣修改這個值,都不會影響到方法外的變數。 如果傳遞的是一個物件,這是十分

python函式引數的填坑之路

背景 最近在看廖雪峰老師的python3教程之函式的引數 受益匪淺,但是在實踐的過程中,發現了一些不解之謎 兩個錯誤 import _thread import time def func1(x): while x: print(x) x = x -1 _threa

C語言指標作為函式引數傳遞學習(一)

1. 一維指標做函式引數 傳入的指標為NULL 比如下面的例子,很多人都會理解錯: #include <stdio.h> void test(char *string) { string = "hello world"; } int main() { cha