python變數調用函數
⑴ python如何在函數外調用函數內的變數
這不完全是global的問題,運行代碼時python會先運行一遍def外滾大漏的內容
可以說你在點擊確定時,python就需要用大爛到img,
有三種解決方法
是把25行放進def內
在25行前面定義一個img對象(這種難度較高)
給25行添加判斷 if 'img' in dir(): # 意思是如果img這個變仿燃量存在就調用25行
記得採納(^_−)☆
⑵ 解析Python函數變數如何使用
剛學用Python的時候,特別是看一些庫的源碼時,經常會看到func(*args, **kwargs)這樣的函數定義,這個*和**讓人有點費解。其實只要把函數參數定義搞清楚了,就不難理解了。
先說說函數定義,我們都知道,下面的代碼定義了一個函數funcA
def funcA():
pass
顯然,函數funcA沒有參數(同時啥也不幹:D)。
下面這個函數funcB就有兩個參數了,
def funcB(a, b):
print a
print b
調用的時候,我們需要使用函數名,加上圓括弧擴起來的參數列表,比如 funcB(100, 99),執行結果是:
100
99
很明顯,參數的順序和個數要和函數定義中一致,如果執行funcB(100),Python會報錯的:
TypeError: funcB() takes exactly 2 arguments (1 given)
我們可以在函數定義中使用參數默認值,比如
def funcC(a, b=0):
print a
print b
在函數funcC的定義中,參數b有默認值,是一個可選參數,如果我們調用funcC(100),b會自動賦值為0。
OK,目前為止,我們要定義一個函數的時候,必須要預先定義這個函數需要多少個參數(或者說可以接受多少個參數)。一般情況下這是沒問題的,但是也有在定義函數的時候,不能知道參數個數的情況(想一想C語言里的printf函數),在Python里,帶*的參數就是用來接受可變數量參數的。看一個例子
def funcD(a, b, *c):
print a
print b
print "length of c is: %d " % len(c)
print c
調用funcD(1, 2, 3, 4, 5, 6)結果是
1
2
length of c is: 4
(3, 4, 5, 6)
我們看到,前面兩個參數被a、b接受了,剩下的4個參數,全部被c接受了,c在這里是一個tuple。我們在調用funcD的時候,至少要傳遞2個參數,2個以上的參數,都放到c里了,如果只有兩個參數,那麼c就是一個empty tuple。
好了,一顆星我們弄清楚了,下面輪到兩顆星。
上面的例子里,調用函數的時候,傳遞的參數都是根據位置來跟函數定義里的參數表匹配的,比如funcB(100, 99)和funcB(99, 100)的執行結果是不一樣的。在Python里,還支持一種用關鍵字參數(keyword argument)調用函數的辦法,也就是在調用函數的時候,明確指定參數值付給那個形參。比如還是上面的funcB(a, b),我們通過這兩種方式調用
funcB(a=100, b=99)
和
funcB(b=99, a=100)
結果跟funcB(100, 99)都是一樣的,因為我們在使用關鍵字參數調用的時候,指定了把100賦值給a,99賦值給b。也就是說,關鍵字參數可以讓我們在調用函數的時候打亂參數傳遞的順序!
另外,在函數調用中,可以混合使用基於位置匹配的參數和關鍵字參數,前題是先給出固定位置的參數,比如
def funcE(a, b, c):
print a
print b
print c
調用funcE(100, 99, 98)和調用funcE(100, c=98, b=99)的結果是一樣的。
好了,經過以上鋪墊,兩顆星總算可以出場了:
如果一個函數定義中的最後一個形參有 ** (雙星號)前綴,所有正常形參之外的其他的關鍵字參數都將被放置在一個字典中傳遞給函數,比如:
def funcF(a, **b):
print a
for x in b:
print x + ": " + str(b[x])
調用funcF(100, c='你好', b=200),執行結果
100
c: 你好
b: 200
大家可以看到,b是一個dict對象實例,它接受了關鍵字參數b和c。
⑶ python的函數裡面定義的變數在函數外面怎麼用
局部變數是不可以再函數外訪問的。
如果堅持訪問,有兩個辦法:
1)把a修改成全局變數;
2)把function2定義在function1的內部。
⑷ Python 怎麼從定義的函數之外調用其中的變數
這涉及到變數的生命周期問題,一般的,在函數裡面聲明的變數陪孝在函數外是滑培不起作用的。
一個比較簡單的解決辦法是你在函數外就先聲明這個變數,聲明成全局變數。然後在函數裡面進行操作和賦值。
最後就能在函數外獲取信亂唯變數的值了。例如:
x=0
defa():
x=2
if__name__=='__main__':
a()
printx
最終x列印出來的結果就是2
⑸ python 一個函數怎麼使用另一個函數內的變數
例如一個函數內有一個變數i,怎麼在函數外或另一個函數中調用或更改它。新手學習,謝謝。
==============================
不能在函數外更改某函數里的局部變數,因為絕陪顫每當你實例化那個函數的時候,那個函數裡面的局部變數也會被亂碧重新賦值,重新定義,談何更改呢?
這一個全部變數和局部變數的問題,如果要實現樓主說的,必須使用全局變數(類中的self)並敗:
================bianliang.py===========
#coding: utf-8
i = 0 #定義一個全局變數i
def a():
'''
列印出i的值
'''
print i
def b():
global i
a() #調用a方法
print i #列印i
i = 1000 #重新賦值i
print i #列印i
a() #再次調用a方法
b()
=================================
%python bianliang.py
0
0
1000
1000
這個py文件裡面使用了一個全局變數i,實現了a方法和b方法共用參數i
⑹ python 類的變數調用自己類中函數的問題
protected void syncExec (Runnable runnable) {
RunnableLock lock = null;
synchronized (Device.class) {
if (display == null || display.isDisposed ()) SWT.error (SWT.ERROR_DEVICE_DISPOSED);
if (!display.isValidThread ()) {
if (runnable == null) {
display.wake ();
return;
}
⑺ python 怎麼將自定義函數的變數在外部調用
classdayin():
def__init__(self):
self.end=''
self.end2=''
self.end3=''
defset_end(self):
self.end='1'
defset_end2(self):
self.end2='2'
def帶襲set_end3(self):
self.end3='3'
m=dayin()
m.set_end()
m.set_end2()
m.set_end3()
data=[[m.end],[m.end2],[m.end3]]
print(data)
1、你的dayin(object)傳了一個對象,去掉。
2、你在初始化函數__init__裡面寫了參數,所以你在下面m = dayin()必須加參數。我是直接去掉了。默蠢洞兄認為""
3、你的變數和函數名顫賣稱重復,下面調用時會有問題。所以我修改了。
⑻ python怎麼調用另一個函數的變數.不用retu
用閉包再緩睜陵來看看專業的解釋:閉包(Closure)是詞法閉包(Lexical Closure)的簡稱,是引用了自由變數的函數。這個被引用擾戚的自由變數將和這個函數一同存在,即使已經離開了創造它的環境也不例外。所以,有另一種說法認為閉包是由函數和與其相關的引用環境組合而成的實體。<pre t="code"早姿 l="python">def make_adder(addend):
def adder(augend):
return augend + addend
return adder
p = make_adder(23)
q = make_adder(44)print p(100)print q(100)
運行結果:
123
144
⑼ Python 函數的調用方式
好像沒有特別的叫法吧,也沒注意手冊上有什麼特別的叫法,至於區別,舉個例子你就清楚了,如下:
假如有個列表aa=[1,4,3,5],對這個列表用sort()進行排序,如果第一種方式aa.sort()後aa=[1,3,4,5];
而第二種方式sort(aa)排序後雖然得到了新列表[1,3,4,5],但是aa還是=[1,4,3,5]。
也就是說第一種方式會改變原列表,而第二種不會改變,只是得到了一個新的副本。
GOT IT?!^^
補充一下,如果非要說叫法上的區別的話,第一種叫做方法調用,第二種叫做函數調用。至於方法和函數的些微區別,方法是基於對象的,函數是基於本身的。如果再詳細……方法一般不可以單獨使用,因為大部分方法是基於對象的,調用也必須基於對象,像上面第一種;而函數則可以單獨使用,你可以理解成它是數據系統本身的,而不是對象專有的。
PS:至於為什麼我換了用sort()而沒有用LZ給的例子函數,是因為..…^o^……LZ第一種方式和第二種方式寫的都不是一個函數……
⑽ python同一個類內兩個函數變數怎麼調用
classA():
self.b1 = 0
def b(self):
self.b1=123
def c(self):
c1=self.b1+5
print c1