今天五四青年节,祝大家青年节快乐!
闲来无事在家学习,突然有位粉丝发消息来问0这样的问题:明明都定义好了,还是说我没有声明啊?
为什么呢?因为你不是明明。
好了,看具体问题,原代码如下:
看代码的内容,大概是想实现输入一个关键词,查询zsms(我也不知道这是啥名字的拼音缩写)中包含关键词的内容,然后通过基础窗口控件QWidget展示出来。
现在在执行查询语句的时候,val这个变量传不到sql语句里,实在不知道咋搞了,来求教我了。
这都是一些基础问题,这个粉丝也是一位刚刚入行学习的小白,能看出来相关语法理解还是不透彻。
那么我就按照粉丝给我发的代码截图中内容,说下代码中的问题,互相学习,互相进步,我理解的不一定都对啊,仅供参考。
在截图的代码中,Demo类的中添加了一个还有def __init__(self):方法,这是此类的构造方法,这个跟Java的不太一样,Java的写法应该是Demo()。
然后,又编写了intiUI的方法,大概实现的内容就是刚才所讲的内容。问题是出在了val变量上。Sql执行代码的意思写一个动态传参,按照传入的关键词进行模糊搜索,但是现在找不到val变量。
这里呢,很简单,要是想取到初始化传入的val值,加上一个self.val就可以。self是什么?意思是类实例化后,self即代表着实例(对象)本身。从上下文中可以看出来,这里取val就是想拿初始化传入的val值。
相当于是这里,self.val就是在取Demo(“val”)传入的值。如果不加self,那么就是方法内部的局部变量,你使用的时候,需要传入或者定义。那么就得这么写def initUI(self, val):,在__init__中需要写成self.initUI(val)
虽然感觉有点别扭,但是能跑就行。毕竟写代码的理念就是,先上线,又优化。能跑起来再说。
除此之外,就截图代码中的还有潜在的问题。
最后再分享一个传参取值的小tips,在使用字符串拼接的时候,经常会遇到一些占位符,或者变量需要传参的情况,可以使用下面方法2。
def initUI(self, val):
# 方法1
sql1 = "select * from table a where title like %s and a=%s " % (val, val)
# 方法2
sql2 = f"select * from table a where title like %{val}% and a={val}"
print(sql2)
如果sql的参数的比较多,使用方法2不容易写错位置。
不过还是刚开始那句话,对于初学者来说,先实现后优化,能跑起来的代码就是好代码。
好了,今天就分享到这里,希望对你有用。
我是马拉松程序员,可不至于代码。