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是一个怎样的存在:

  1. 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
  1. 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

posted @ 2021-10-12 09:33  码农编程进阶笔记  阅读(156)  评论(0编辑  收藏  举报
返回顶部 有事您Q我