python的函式呼叫,以及全域性變數的問題

2021-09-09 06:26:57 字數 4721 閱讀 6292

呼叫乙個函式

delete.py檔案(被呼叫的檔案,(記得不要用4.py這樣的數字作為被呼叫的檔案否則無法呼叫,執行檔案可以,例如下面的sky.py可以改為4.py))

def add(x,y):

print('和為:%d'%(x+y))

sky.py檔案

import delete

delete.add(1,2)

或者

from delete import add

add(1,2)

呼叫乙個類

delete.py檔案(被呼叫的檔案)

class a:

def __init__(self,xx,yy):

self.x=xx

self.y=yy

def add(self):

print("x和y的和為:%d"%(self.x+self.y))

sky.py檔案

from delete import a

a=a(2,3)

a.add()

或者

import delete

a=delete.a(2,3) # 這個也是乙個傳參的手段

a.add()

delete.py檔案的檔案路徑:e:\pythonproject\winycg

import sys

'''python import模組時, 是在sys.path裡按順序查詢的。

sys.path是乙個列表,裡面以字串的形式儲存了許多路徑。

使用a.py檔案中的函式需要先將他的檔案路徑放到sys.path中'''

import a

a=delete.a(2,3)

a.add()

delete.py檔案(被呼叫的檔案)

print('%s : hello !'%x)

print(3)

a='matting'

print(4)

sky.py檔案

k='karry'

print(1)

if __name__ == "__main__":

print(2)

執行結果為

matting : hello !34

1karry : hello !32

如果不想執行delete的其他東西,只想用它的函式那麼就要封裝

print('%s : hello !'%x)

print(3)

a='matting'

if __name__ == "__main__": # 封裝,只有自己執行這個檔案才會執行下面的語句

print(4)

參考:背景pyqt

1.對於類中函式要用乙個變數來做判斷(用self.函式)

class mywindow(qmainwindow, ui_mainwindow):     

def __init__(self, parent=none):

super(mywindow, self).__init__(parent)

self.setupui(self)

self.retranslateui(self)

self.last_result = -1 # 乙個判斷機制變數

def press_picture(self): # qt裡面乙個按鈕觸發press_picture槽函式,(python裡面只會執行放在乙個行的語句,這裡有個tab空格所以不會執行得到

if last_max != self.last_result:

print(self.last_result)

2.函式之間呼叫變數(還是加global)

class mywindow(qmainwindow, ui_mainwindow):     

def __init__(self, parent=none):

super(mywindow, self).__init__(parent)

self.setupui(self)

self.retranslateui(self)

def press_picture(self):

global k # 讓k變為全域性變數

k=3def fly(self):# 也是乙個槽函式

y=k+1

print(y) k=4

3.變數在類外面也是一樣加global

pic_name_num = 1 

class mywindow(qmainwindow, ui_mainwindow):

def __init__(self, parent=none):

super(mywindow, self).__init__(parent)

self.setupui(self)

self.retranslateui(self)

def press_picture(self):

global pic_name_num # 反正**用到了都要加global

global model

if (pic_name_num == 1):

model =******x

4.pyqt裡面的呼叫函式(只是舉例子看看就好)

class mywindow(qmainwindow, ui_mainwindow): 

def showcameraoneimage(self):

self.keypressevent() # 加了self才可以呼叫其他函式

def keypressevent(self,event):

if (event.key() == qt.key_a):

print('hello,『a』')

else: print(777)

5.如果乙個檔案呼叫另乙個問價變數有兩種方式

1.aaa.py裡面

uuu=6

class mywindow(qmainwindow, ui_mainwindow):

print(uuu) #6

bbb.py裡面

class ui_dialog5(qtwidgets.qwidget,ui_form):  

def __init__(self):

from aaa import uuu # 這樣呼叫其實是乙個副本,也就是局域變數,這裡改變不會影響aaa.py裡面的值

uuu = uuu+4

print(uuu) # 10

2.用pickle(directory1就是變數)

class ui_dialog3(qtwidgets.qwidget,ui_form):  

def __init__(self):

super(ui_dialog3,self).__init__()

self.setupui(self)

self.setwindowtitle("訓練視窗")

self.retranslateui(self)

self.setwindowicon(qicon('logo.png'))

if not os.path.exists('/home/test3_1.txt'):

os.mknod('/home/test3_1.txt')

f = open('/home/test3_1.txt', 'rb')

if os.path.getsize('/home/test3_1.txt'):

d = pickle.load(f)

self.lineedit.settext("%s" % (d))

f.close()

def browse(self):

# global directory1

global k

global directory1

directory1 = qfiledialog.getexistingdirectory(self, "選取資料夾", "c:/") # 起始路徑

self.lineedit.settext("%s" % (directory1))

c = directory1

f = open('/home/test3_1.txt', 'wb')

pickle.dump(c, f)

f.close()

關於import x 還有from x import * 這個問題

import 模組:匯入乙個模組;注:相當於匯入的是乙個資料夾,是個相對路徑。

from…import:匯入了乙個模組中的乙個函式;注:相當於匯入的是乙個資料夾中的檔案,是個絕對路徑。

不推薦使用from x import * 因為怕和原來檔案下有一樣的名字就會名字衝突,而且這句話意思是把這個檔案裡面的東西全部匯入,所有函式還有變數。

明天再來多程序多執行緒

iOS學習 函式的定義,函式的呼叫以及函式的宣告

函式的定義,函式的呼叫以及函式的宣告 在生活中我們需要制定一些計畫,而計畫在執行的過程中會有很多步驟.就比如我們在看球賽的過程中,教練通常會制定幾套方案,以便應對不同情況下出現的問題.而函式的作用於此類似,對於需要重複使用的 我們可以通過定義乙個函式來,給這個函式起乙個名字 新定義的函式不能喝系統函...

C 函式堆疊呼叫以及反彙編的了解

在函式呼叫的過程我們可以看作是乙個呼叫鏈。例如 在main函式中呼叫sum函式,其中main為呼叫方,sum為被呼叫方 問題一 被呼叫方執行完後,怎麼回退到呼叫方函式?問題二 被呼叫方函式執行完回到呼叫方函式後,怎麼知道延下一行繼續執行?問題三 返回值是由什麼帶出來的?問題四 形參需不需要開闢記憶體...

11 5 函式呼叫 以及 字串的方法

1.函式在呼叫的時候,會形成乙個私有作用域,內部的變數不會被外面訪問,這種保護機制叫閉包。這就意味著函式呼叫完畢,這個函式形成的棧記憶體會被銷毀。2.函式歸屬誰跟它在哪呼叫沒有關係,跟在哪定義有關 fn 呼叫完畢後得到的是乙個匿名函式,但是這個函式在fn這個作用域下定義的,所以這個匿名函式內部的變數...