python問題我想建立引數的函式引用

2021-03-05 09:21:13 字數 6078 閱讀 1083

1樓:bella_鑫

全域性變數 不可以作為形參。也就是說 他不能被函式引用

可以參考一下這個**的回答:網頁連結

2樓:匿名使用者

給你寫一小段**。

import os,sys,time,tracebackglobal something_count_as_global #something_count_as_global = 3 #init the value

def call_many_times():

global something_count_as_global #this declare is important

something_count_as_global +=1def test():

global something_count_as_globalfor i in range(10):

call_many_times()

print something_count_as_global #expected, 3, 4, 5, ...12

if __name__=="__main__":

test()

python 一個函式怎麼使用另一個函式內的變數

3樓:一豬之哀傷一

例如一個函式內有一個變數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.py00

1000

1000

這個py檔案裡面使用了一個全域性變數i,實現了a方法和b方法共用引數i

4樓:細雨搖琴

用閉包再來看看專業的解釋:閉包(closure)是詞法閉包(lexical closure)的簡稱,是引用了自由變數的函式。這個被引用的自由變數將和這個函式一同存在,即使已經離開了創造它的環境也不例外。

所以,有另一種說法認為閉包是由函式和與其相關的引用環境組合而成的實體。

def make_adder(addend):

def adder(augend):

return augend + addendreturn adder

p = make_adder(23)

q = make_adder(44)print p(100)print q(100)

執行結果:

123144

python問題 在函式內使用全域性變數的時什麼時候需要加global,什麼時候不用?

5樓:自我程式設計

global是用於宣告全域性

變數。當你的函式中變數有賦值語句,而這個變數名又剛好同全域性變數一樣,這時候,如果你希望用的是全域性變數就要加global,反之函式就會建立自己的區域性變數。

簡單說:

函式內使用全域性變數,只要函式內沒有使用這個變數名來做賦值語句,就不需要加global。

python中在哪些情況下必須使用global來宣告全域性變數

6樓:天天不看

以下是一個多執行緒的python**片段,其中的x,l都是全域性變數,但在threadcode()函式中只宣告瞭global x沒有global l。完整的**是可以成功執行,但是把global x註釋掉後就會報錯。這是為什麼,lock物件比較特殊嗎?

[python] view plain copy

import threading, time, sys

x = 50

l = threading.lock()

def threadcode():

global x

l.acquire()

print 'thread %s invoked.' % threading.currentthread().getname()

try:

print 'thread %s running.' % threading.currentthread().getname()

x = x + 50

print 'thread %s set x to %d.' % \

(threading.currentthread().getname(), x)

finally:

l.release()

......

推廣一下,就成了在什麼情況下必須使用global宣告全域性變數的問題。這段**不用在函式中宣告global x也可以列印出x的值

[python] view plain copy

x = 20

def getx():

print x

getx()

在segmentfault上提問,得到了這樣的回答

[plain] view plain copy

對於python2而言,對於一個全域性變數,你的函式裡如果只使用到了它的值,而沒有對其賦值(指a = ***這種寫法)的話,就不需要宣告global。相反,如果你對其賦了值的話,那麼你就需要宣告global。宣告global的話,就表示你是在向一個全域性變數賦值,而不是在向一個區域性變數賦值。

這樣一來就清楚了。原因想來應該是這樣,如果在函式內對一個全域性變數賦值而沒有提前宣告的話,它會被當成一個與全域性變數同名的區域性變數,像這樣

[python] view plain copy

x = 20

def getx():

x = 50

print x

getx()#print 50

所以如果把第一段**中的global x註釋掉,執行到x = x + 50就報錯,因為這裡的x既不是全域性變數,也沒有作為區域性變數被初始化。而對於l,因為它是一個物件,呼叫物件成員函式和訪問普通變數的值一樣,所以也不需要事先宣告其為全域性變數,就像下面這樣。

[python] view plain copy

class a:

def __init__(self, x):

self.x = x

def setx(self, x):

self.x = x

a = a(50)

def func():

a.setx(20)

print a.x

func()#print 20

7樓:育知同創教育

你的問題中已經說了啊!就是當它作為全域性變數的時候!

舉個例子來說,當你有一個引數在一個方法中會被改變,如果你希望把這個改變給積累下來,而不是每一次都是從頭開始變化的話,那麼這個引數就需要宣告為全域性變數

8樓:匿名使用者

當你在一個程式中用了它給它賦值,並且要用賦值後的它,那麼就必須要global了。本來它只是local的引用和賦值,不會影響其他程式的使用,但global之後就會影響程式外的值

9樓:穰柔欒為

一個多執行緒的python**片段,其中的x,l都是全域性變數,但在threadcode()函式中只宣告瞭global

x沒有global

l。完整的**是可以成功執行,但是把globalx註釋掉後就會報錯。

python class裡面的全域性變數問題

10樓:匿名使用者

你在ex裡面定義的oo,所以你得先執行過ex之後才能執行start。

class  test:

def __init__(self,name='testa'):

self.x = 'age'

self.name = name

self.ex() #加上這個

self.start()

def ex(self):

global oo

oo = 'this is test'

def start(self):

print oo

t=test()

如果不適用全域性變數的話,你可以self.oo:

class  test:

def __init__(self,name='testa'):

self.x = 'age'

self.name = name

self.ex()

self.start()

def ex(self):

self.oo = 'this is test'

def start(self):

print self.oo

t=test()

11樓:匿名使用者

因為你定義oo是在self.ex(self)這個函式裡,所以在這個函式被執行前,global裡並沒有 oo這個變數。

如果你明白這個道理就知道了怎麼去列印你的oo了。

簡單的說這樣

t=test()

t.ex()

t.start()

12樓:匿名使用者

class  test:

def __init__(self,name='testa'):

self.x = 'age'

self.name = name

self.oo="this is test"

self.start()

def ex(self):

oo = 'this is test'

def start(self):

print oo

test()

python中怎麼定義全域性變數

13樓:匿名使用者

複製**

count = 0

def fuc(count):

print count

count += 1

for i in range(0, 10):

fuc(count)

複製**

結果是:

不是我們想要的結果。

解決之道一——全域性變數:

複製**

global a

a = 3

def fuc():

global a

print a

a = a + 1

if __name__ == "__main__":

global a

for i in range(10):

fuc()print 'hello'

print a

複製**

結果:注意要領:

**需要全域性變數,**宣告一下;但是函式千萬不要傳引數, fuc(a)是不行的。

解決之道二——列表:

複製**

a = [3]

def fuc():

print a[0]

a[0] = a[0] + 1

if __name__ == "__main__":

global a

for i in range(10):

fuc()

print 'hello'

print a[0]

複製**

結果同上

列表可以比肩簡單的實現,學習之。

python中的python中的問題

在python中,所有識別符號 可以包括英文 數字以及下劃線 但不能以數字開頭。python中的識別符號是區分大小寫的。這是知識背景 但是通常python的變成習慣以下劃線開頭的識別符號是有特殊意義的。以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from ...

python菜鳥問題關於python的菜鳥問題

python 2.x寫法 x 16 ans 0 while ans ans x ans ans 1 print ans python 3.x寫法 x 16 ans 0 while ans ans x ans ans 1 print ans 在ans ans 1 行與print ans 中插入一個空白...

python函式的問題一個Python函式的問題

按照您的code,是無法編譯的,簡單的例證見 另外,您的 是不是應該這樣 def interval start,stop none,step 1 if stop is none start,stop 0,start step 1 print start,stop,step呼叫的時interval 1...