1. 程式人生 > >python引數傳遞問題(引數傳出)

python引數傳遞問題(引數傳出)

變數、物件與型別關係

python是動態型別語言,並不需要預先宣告變數型別,變數的型別和值在賦值的那一刻完成初始化。進一步說,python中的型別是屬於物件的,而不是變數
例如:

a=2
b=[1,2]

分別表示把一個int物件2,賦值給a;把一個list物件[1,2]賦值給b。

也就是說在將不同型別的python物件通過賦值號賦給某一個變數時,才完成該變數的初始化,而使得該變數代表某種型別的物件。

函式

不可更改引數傳遞

如果想進行引數傳遞,那麼在python 中的定義函式之前,必須對引數的變數進行宣告,否則會出現提示global name 'abun1' is not defined

,當然,該變數的宣告過程可以是隱式的進行。例如a=2或者a={},在對a進行賦值的那一刻完成變數的型別初始化,也即是完成變數的宣告。

但是,尤其需要注意的是,python中的int,long, bool, float,tuple() 等物件都是不能更改的,因此,在引數傳遞時,不能傳遞輸出這些型別的變數。

例如:

def tmpF(a):
    a=10
nint=2
tmpF(nint)
print(nint) #結果仍是2

因為,變數nint代表一個整型物件2,呼叫函式tmpF()時,因整型物件無法改變,那麼新建了一個整型物件10,使a指向它,因此nint代表的整型物件仍舊是2,沒有發生改變。

可更改引數傳遞

如果在定義函式時,想利用引數輸出某些處理過的變數,那必須使用可以更改的物件,如list,dict等。

例如:

def tmpF(a):
    a.append(2)
nx=[]
tmpF(nx)
print(nx) #nx=[2]

因為,list是可更改型別物件,因此,在呼叫函式tmpF()時,對該list型物件進行了修改,而nx指向的仍舊是這個物件。所以,函式可以通過可變型別物件,將引數輸出。

相關推薦

C#值型別和引用型別的引數傳遞ref,out

C#中有兩種型別,值型別,和引用型別。在記憶體中值型別是直接儲存在記憶體的棧中的,引用型別在棧中存放一個地址,這個地址指向堆中的資料(引用型別的資料是存放在堆中的)下面我們來看看兩種型別引數傳遞有什麼區別先看一個例子 /// <summary>    ///   

Python函式的引數傳遞3

def printAll(**kargs): for k in kargs: print k, ':', kargs[k] printAll(a=1, b=2, c=3) printAll(x=4, y=5) print

jmeter 傳送加密請求 beanshell斷言 執行緒組間傳遞引數 jmeter bean shell斷言加密的響應資訊加密介面測試二 jmeter 執行緒組之間的引數傳遞加密介面測試三

    原文地址https://www.cnblogs.com/wnfindbug/p/5817038.html 最近在做http加密介面,請求頭的uid引數及body的請求json引數都經過加密再發送請求,加密方式為:ase256。所以,jmeter傳送請求前也需要對uid及jso

基本型別和引用型別作為引數傳遞重要

基本型別和引用型別作為引數傳遞 引用型別資料和基本型別資料作為引數傳遞有沒有差別呢?我們用如下程式碼進行說明,並配合圖解讓大家更加清晰 1.基本資料型別傳遞 基本型別作為引數傳遞時,其實就是將基本型別變數x空間中的值複製了一份傳遞給呼叫的方法show(),當在show()方法中

java方法之間引數傳遞java 程式設計語言對物件採用的是引用呼叫嗎

java方法之間引數傳遞 基礎型別值傳遞 public static void tripleValue(double x){ x = 3*x; } double value = 10; tripleValue(value); System.out.prin

關於java的引數傳遞傳遞、引用傳遞和傳值、傳引用等

所謂引數傳遞就是用函式呼叫所給出的實參(實際引數)向函式定義所給出的形參(形式引數)設定初始值的過程。基本的有三種引數分別為: (1)傳值:   (2)傳址(即是傳指標) (3)傳引用 以上

九、java基礎之引數傳遞傳遞

一、值傳遞/*程式在執行過程中,引數傳遞問題: 1.傳遞資料是基本資料型別 2.傳遞資料是引用資料型別 */1.以下程式是傳遞基本資料型別 public class ClassTest04 { public static void m1(int i){ i++;

[10]基本型別和引用型別的引數傳遞

前言:主要為個人筆記 基本型別 程式碼: class Demo{ public static void main(String[] args){ int x=4;

函式的引數傳遞計算器

#計算器def add(x,y):   return x+ydef minus(x,y):   return x-ydef mult(x,y):   return x*ydef divi(x,y):   return x/ydef get_on(s):   if s=='加'or s=='+':     re

指標作為函式引數傳遞 轉載

這幾天在學習C過程中,在使用指標作為函式引數傳遞的時候出現了問題,根本不知道從何得解:原始碼如下:    createNode(BinNode *tree,char *p)    {        tree = (BinNode *) malloc(sizeof(BinNo

C#--第四周實驗--任務2--定義一個描述座標點的CPoint類,利用預設引數值建構函式傳遞引數控制檯應用

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:定義一個描述座標點的CPoint類,利用建構函式傳遞引數。 * 作 者: 雷恆

JS引數傳遞傳遞和引用傳遞

前端紅寶書第一遍看過去之後,相當多的東西都忘記了,第二遍看的時候,也開始注意到一些細節的東西以及理解不到位的地方。書P66 一個加粗框中寫到:ECMAScript中所有引數傳遞都是值,不可能通過引用傳遞引數當時看過沒有怎麼仔細想過,一知半解吧,今天理解的更加深一些。當然也是昨

SpringMVC引數值的傳遞引數接收,陣列接收,模型接收,多個模型接收以及資料回顯,批量操作

引數接收 陣列接收 模型接收 多個模型接收 當我們一個頁面中包含多個表單,提交到不同的控制器方法時。我們使用模型進行引數接收時可將模型都封裝到bean類中,資料回顯時可直接bean.模型

cocos2d-x中場景間的引數保持和傳遞方法整理

有時為了在場景間傳遞引數,象一些狀態資訊比如音樂的AudioID等,整理一下場景間引數傳遞的方式 方式一、使用全域性變數 利用全域性變數的方式對變數進行場景間的傳遞,簡單且粗暴。可以定義一個類專門來存放需要傳遞的引數,在各場景類中只需要include一下就可以直接對全域性變

二維陣列作為函式引數傳遞C++

有時候我們也許會不明白為什麼C++中的陣列宣告的時候下標是需要一個常數,而不能是一個變數吶?也許STL模板庫中的向量可以解決變數作為下標的陣列宣告方式,為了節約一些記憶體或者是提高一些效能,也為了功能不重複,故而陣列中的下標採取了常量的方式。 int a[

面向物件 引數傳遞 方法 -- 構造方法--過載

今天學習了面向物件的程式設計思想,首先 要來說一下 類的定義:    1.若干具有相同屬性和行為的群體或抽象    2.類是建立物件的模板    3.類由兩部分組成:屬性和行為 面向物件的程式設計思想:   對問題進行分析,定義物件模型(類),然後根據模型創造物件,使用物件

C++中函式引數傳遞傳遞、指標傳遞,引用傳遞

今天想寫一個函式,從函式中把我需要的兩個值傳出來,由於傳出來的值比較多,所以不考慮用return來返回,需要通過引數把修改後的值拉出來供我使用,很當然的就想到了用指標,但是值就是傳不出來;使我對原有的大腦中指標的思維產生混沌感,今天一上午才把函式傳遞又走了

QT學習源網址轉載1---QT多執行緒引數傳遞訊號與槽方法

在解決簡單QT多執行緒引數傳遞時學習的部落格歸納 http://blog.csdn.net/hyw11002233/article/details/53168996; http://blog.chinaunix.net/uid-20348984-id-196420

面試題整理--java中的引數傳遞傳遞、引用傳遞

java中的值傳遞和引用傳遞: 值傳遞:(形式引數型別是基本資料型別和String):方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形式引數值的改變不影響實際引數的值。 引用傳遞:(

TabNavigator作為元件巢狀到另外一個頁面中,處理TabNavigator中的跳轉和props引數傳遞ReactNative

<View style={Stylecss.styles.container}> <ToolBar title={'檢視訂單'}isShowBack={true}backCli