python 转化为PHP代码过程中遇到的问题
1.字符串中的% 问题
sql= "select system_type from index_data_set where id='%s'" % (data_id)
转化为PHP
$sql = sprintf("select system_type from index_data_set where id='%s'", strval($data_id));
字符串中的%,这是一个几乎所有语言中都通用的一类字符串操作,所以如果你的教材默认了你有其他编程语言基础的话,可能就不会详细介绍了。
简单的说,这是一种将其他变量置入字符串特定位置以生成新字符串的操作,比如说:
n = "Aki"
"My name is %s" % n
这段代码首先定义了一个名为n的变量,内容为Aki。然后下方的字符串中有一个%s,他的含义是“这里将被替换成一个新的字符串”,用作替换的内容放在字符串后面的%后面,就是那个n。所以最终这个字符串会变成My name is Aki。
字符串中的%后面会附带一个字母,代表着用来替换的变量的类型,比如说%d代表着你将替换到此处的变量是一个整数,而%s代表着一个字符串。详细细节可在这里看到。
https://docs.python.org/2/library/stdtypes.html#string-formatting-operations
另外,这种操作可以同时将多个变量放进字符串,只需要用括号把变量们括起来。
下面是一些例子。
>>> "www.%s.com"%"zhihu"#字符串
'www.zhihu.com'
>>> "%dkm"%1990#整数型
'1990km'
>>> "%s %d %f"%("abc",123,3.21)#多个值
'abc 123 3.210000'
2. 大家是如何理解Python中的self?
如果你知道java或者javascript中的this,那么self的作用和他们是一样的,不过我猜你可能也没接触过这两门语言。
为了说清楚 self 是个什么东西,你首选需要搞清实例与类之间的关系。
人就是一种类,人有名字,身高,体重等属性,不同人这些属性都是不一样的,除此之外,人还有很多方法(功能),例如,思考、跑步、睡觉等等。
class Person:
def __init__(self, name):
self.name = name
def think(self):
print("{} is thinking".format(self.name))
具体到每一个人,例如你自己,你身边的每一个具体的人,都是「人类」的实例对象,例如:
lisi = Person("lisi")
我构造了一个叫"lisi"的人,它是Person的实例对象,我们给Person定义了一个think方法,但是需要一个参数,我们可以把 lisi 这个实例对象传递过去。
>>> Person.think(lisi)
lisi is thinking
所以,这里的 self 其实就是函数 think 的一个普通参数而是,那为什么要叫self呢?其实这是约定俗成的,你叫其他名字也没关系,不过通常不这么做,就好比我们平常交流都是用普通话,突然冒出一句洋文,别人不一定能听懂。
那为什么我们平常调用 think 方法的时候不是这样调用,而是直接用 「实例.方法」的形式调用呢?
>>> Person.think
<function Person.think at 0x110e4f510>
>>> lisi.think
<bound method Person.think of <__main__.Person object at 0x10f3a09b0>>
前者是一个在 Person 中的普通函数,后者是被绑定了的方法,该方法与当前实例对象进行了绑定,意味着 调用 lisi.think 时不再需要传递参数,因为已经将lisi进行的绑定,调用的时候,python会自动把lisi作为参数传递过去。也就是说,调用的时候,会把当前对象自己传递过去。
>>> lisi.think()
lisi is thinking
>>>
以上就是self的概念
https://www.zhihu.com/question/39264541
3.python 中fetchone()和fetchall()
* fetchone() :
返回单个的元组,也就是一条记录(row),如果没有结果 , 则返回 None
cu.execute("select user,password from user where user='%s'" %name)
arr= cur.fetchone() ----此时 通过 arr[0],arr[1]可以依次访问user,password* fetchall() :
返回多个元组,即返回多条记录(rows),如果没有结果,则返回 ()
cur.execute("select * from user")
***注意:在MySQL中是null,而在Python中则是None
①查询出有多条数据时:
cursor.fetchone():将只取最上面的第一条结果,返回单个元组如('id','name'),然后多次循环使用cursor.fetchone(),依次取得下一条结果,直到为空。
cursor.fetchall() :将返回所有结果,返回二维元组,如(('id','name'),('id','name')),
②查询只有一条数据时:
cursor.fetchone():将只返回一条结果,返回单个元组如('id','name')。
cursor.fetchall() :也将返回所有结果,返回二维元组,如(('id','name'),),
PHP替换为,例子
$sql = sprintf("select * from user where id='%s'", strval($data_id));
$ret = mysqli_query($sql);
if (!empty($ret)){
$val = mysqli_fetch_array($ret, MYSQLI_ASSOC);
return $val;
}
return [];
4.# 过滤html标签
# 过滤html标签
def filterHtmlTags(self, string) :
pat = re.compile('<[^>]+>')
return pat.sub('', string)
pass
平时用我们使用htmlspecialchars() 来过滤html, 但是把html的字符转义了,最后显示出来的就是html源代码.
利用strip_tags()就可以把html标签去除掉.
<?php
$str = '<a href="#">href</a>';
//echo htmlspecialchars($str);
echo strip_tags($str);
5 python 中NONE
为什么我们要用is None
好像我们来看None在python是一个怎样的存在:
- None有自己的数据类型NontType,你可以将None赋值给任意对象,但是不能创建一个NoneType对象。
>>> type(None)
<class 'NoneType'>
>>> n=NoneType()
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'NoneType' is not defined
- None是python中的一个特殊的常量,表示一个空的对象,空值是python中的一个特殊值。数据为空并不代表是空对象,例如[],’'等都不是None。None和任何对象比较返回值都是False,除了自己。
>>> L=[]
>>> L is None
False
>>> L=''
>>> L is None
False
下面会到我们的问题,为什么要用is None?
因为None在Python里是个单例对象,一个变量如果是None,它一定和None指向同一个内存地址。
>>> a=None
>>> b=None
>>> id(a)==id(b)
True
>>> id(None)
1522470008
>>> id(a)
1522470008
>>> a == None
True
>>> a is None
True
is None是判断两个对象在内存中的地址是否一致,== None背后调用的是eq,而eq可以被重载,下面是一个 is not None但 == None的例子:
>>> class test():
... def __eq__(self,other):
... return True
...
>>> t=test()
>>> t is None
False
>>> t == None
True
关于None,就算你知道了应该使用is 来判断是否为None还有另一个坑,就是这个判断怎么写的问题,这个坑会用到这篇博客Python中的True和False与bool()函数吗?中的一些知识,不懂的话,可以去参考这篇博客,下面我们来看一下这个坑有多深。
在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False ,即:
not None == not False == not '' == not 0 == not [] == not {} == not ()
因此在使用列表的时候,如果你想区分x==[]和x==None两种情况的话, 此时if not x:
将会出现问题:
>>> x = []
>>> y = None
>>>
>>> x is None
False
>>> y is None
True
>>> not x
True
>>> not y
True
>>> not x is None #相当于not (x is None)
>>> True
>>> not y is None
False
如果not x
你是想判断x是否为None,但是这样写会把x==[]的情况也包含进来了,这么无法区分两种情况。下面的not x is None
是正确的,却不是很好理解,其意思是not (x is None)
, 最好的写法是 if x is not None
,即清晰又不会出现问题。
所以在使用if not x
的时候,一定要考虑清楚,必须清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行
参考;https://blog.csdn.net/u014234260/article/details/79581041
赞赏码
非学,无以致疑;非问,无以广识