python的函数调用,以及全局变量的问题

在同一个文件夹下

调用一个函数
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
sys.path.append(r'E:\PythonProject\winycg')
'''python import模块时, 是在sys.path里按顺序查找的。
sys.path是一个列表,里面以字符串的形式存储了许多路径。
使用A.py文件中的函数需要先将他的文件路径放到sys.path中'''
import A
 
a=delete.A(2,3)
a.add()

其他补充:

delete.py文件(被调用的文件)

def app_lost(x):
    print('%s : Hello !'%x)
    print(3)
a='Matting'
app_lost(a)
print(4)

sky.py文件

from delete import app_lost
k='Karry'
print(1)
if __name__ == "__main__":
    app_lost(k)
    print(2)

执行结果为
Matting : Hello !
3
4
1
Karry : Hello !
3
2
如果不想执行delete的其他东西,只想用它的函数那么就要封装

def app_lost(x):
    print('%s : Hello !'%x)
    print(3)
a='Matting'
if __name__ == "__main__":   # 封装,只有自己执行这个文件才会执行下面的语句
    app_lost(a)
    print(4)

参考:https://blog.csdn.net/winycg/article/details/78512300
背景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=3
		def 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 =XXXXXXX

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 * 因为怕和原来文件下有一样的名字就会名字冲突,而且这句话意思是把这个文件里面的东西全部导入,所有函数还有变量。

明天再来多进程多线程

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值