python 转化为PHP代码过程中遇到的问题

举报
lxw1844912514 发表于 2022/03/26 22:46:32 2022/03/26
【摘要】 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'", str...

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));
 

字符串中的%,这是一个几乎所有语言中都通用的一类字符串操作,所以如果你的教材默认了你有其他编程语言基础的话,可能就不会详细介绍了。

简单的说,这是一种将其他变量置入字符串特定位置以生成新字符串的操作,比如说:


  
  1. n = "Aki"
  2. "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

另外,这种操作可以同时将多个变量放进字符串,只需要用括号把变量们括起来。

下面是一些例子。


  
  1. >>> "www.%s.com"%"zhihu"#字符串
  2. 'www.zhihu.com'
  3. >>> "%dkm"%1990#整数型
  4. '1990km'
  5. >>> "%s %d %f"%("abc",123,3.21)#多个值
  6. 'abc 123 3.210000'

2. 大家是如何理解Python中的self?

如果你知道java或者javascript中的this,那么self的作用和他们是一样的,不过我猜你可能也没接触过这两门语言。

为了说清楚 self 是个什么东西,你首选需要搞清实例与类之间的关系

人就是一种类,人有名字,身高,体重等属性,不同人这些属性都是不一样的,除此之外,人还有很多方法(功能),例如,思考、跑步、睡觉等等。


  
  1. class Person:
  2. def __init__(self, name):
  3. self.name = name
  4. def think(self):
  5. print("{} is thinking".format(self.name))

具体到每一个人,例如你自己,你身边的每一个具体的人,都是「人类」的实例对象,例如:

lisi = Person("lisi")
 

我构造了一个叫"lisi"的人,它是Person的实例对象,我们给Person定义了一个think方法,但是需要一个参数,我们可以把 lisi 这个实例对象传递过去。


  
  1. >>> Person.think(lisi)
  2. lisi is thinking

所以,这里的 self 其实就是函数 think 的一个普通参数而是,那为什么要叫self呢?其实这是约定俗成的,你叫其他名字也没关系,不过通常不这么做,就好比我们平常交流都是用普通话,突然冒出一句洋文,别人不一定能听懂。

那为什么我们平常调用 think 方法的时候不是这样调用,而是直接用 「实例.方法」的形式调用呢?


  
  1. >>> Person.think
  2. <function Person.think at 0x110e4f510>
  3. >>> lisi.think
  4. <bound method Person.think of <__main__.Person object at 0x10f3a09b0>>

前者是一个在 Person 中的普通函数,后者是被绑定了的方法,该方法与当前实例对象进行了绑定,意味着 调用 lisi.think 时不再需要传递参数,因为已经将lisi进行的绑定,调用的时候,python会自动把lisi作为参数传递过去。也就是说,调用的时候,会把当前对象自己传递过去。


  
  1. >>> lisi.think()
  2. lisi is thinking
  3. >>>

以上就是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替换为,例子


  
  1. $sql = sprintf("select * from user where id='%s'", strval($data_id));
  2. $ret = mysqli_query($sql);
  3. if (!empty($ret)){
  4. $val = mysqli_fetch_array($ret, MYSQLI_ASSOC);
  5. return $val;
  6. }
  7. return [];

4.# 过滤html标签


  
  1. # 过滤html标签
  2. def filterHtmlTags(self, string) :
  3. pat = re.compile('<[^>]+>')
  4. return pat.sub('', string)
  5. pass

平时用我们使用htmlspecialchars() 来过滤html, 但是把html的字符转义了,最后显示出来的就是html源代码.

利用strip_tags()就可以把html标签去除掉.


  
  1. <?php
  2. $str = '<a href="#">href</a>';
  3. //echo htmlspecialchars($str);
  4. echo strip_tags($str);

5 python 中NONE

为什么我们要用is None

好像我们来看None在python是一个怎样的存在:

  1. None有自己的数据类型NontType,你可以将None赋值给任意对象,但是不能创建一个NoneType对象。

  
  1. >>> type(None)
  2. <class 'NoneType'>
  3. >>> n=NoneType()
  4. Traceback (most recent call last):
  5. File "<input>", line 1, in <module>
  6. NameError: name 'NoneType' is not defined
  1. None是python中的一个特殊的常量,表示一个空的对象,空值是python中的一个特殊值。数据为空并不代表是空对象,例如[],’'等都不是None。None和任何对象比较返回值都是False,除了自己。

  
  1. >>> L=[]
  2. >>> L is None
  3. False
  4. >>> L=''
  5. >>> L is None
  6. False

下面会到我们的问题,为什么要用is None?

因为None在Python里是个单例对象,一个变量如果是None,它一定和None指向同一个内存地址。


  
  1. >>> a=None
  2. >>> b=None
  3. >>> id(a)==id(b)
  4. True
  5. >>> id(None)
  6. 1522470008
  7. >>> id(a)
  8. 1522470008
  9. >>> a == None
  10. True
  11. >>> a is None
  12. True

is None是判断两个对象在内存中的地址是否一致,== None背后调用的是eq,而eq可以被重载,下面是一个 is not None但 == None的例子:


  
  1. >>> class test():
  2. ... def __eq__(self,other):
  3. ... return True
  4. ...
  5. >>> t=test()
  6. >>> t is None
  7. False
  8. >>> t == None
  9. 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:将会出现问题:


  
  1. >>> x = []
  2. >>> y = None
  3. >>>
  4. >>> x is None
  5. False
  6. >>> y is None
  7. True
  8. >>> not x
  9. True
  10. >>> not y
  11. True
  12. >>> not x is None #相当于not (x is None)
  13. >>> True
  14. >>> not y is None
  15. 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

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/120704196

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。