Python_advanced
Python_Advanced
字符串的反转?
|
|
lambda函数
|
|
删除下面list里面的重复元素
|
|
手写一个函数,用来取出1—100中9的倍数或者有数字9的所有整数
|
|
算法复杂度
算法复杂度包括时间复杂度和空间复杂度,空间复杂度现在考虑的情况很少,存储空间比较充裕,通常关注的都是时间复杂度
tuple和list的转换
|
|
match()和search()的区别?
match函数只能够从字符串的开始位置进行匹配,search是可以匹配字符串的任意位置,但也是只会返回找到的第一个匹配的模式
下面代码会输出什么:
简述Django重定向的原理?
定义一个red1和一个red2,在浏览器中输入red1时,浏览器请求到服务器,服务器视图还是red1,返回浏览器一个302,浏览器接收到302,通过重定向再向服务器发送请求,此时请求的是red2,之后red2的结果再返回浏览器
Django调用模板过程?
配置项目urls,项目的urls包含应用的urls,应用中的urls指向应用中的视图中的某个函数,视图调用函数,函数再调用模板,模板再模板
对cookie和session的理解
cookie就是客户端存储数据的一种键值对,session是服务器存储数据的一种键值对。
浏览器先向服务器请求数据,发一个服务器向浏览器写cookie的信息,之后response就会对浏览器进行cookie的写操作,之后如果浏览器请求服务器,就用 cookie请求网站通过保存的id和服务器中的session的id进行匹配
单例模式的特点,手写一个单例模式
创建一个从始至终只有一个实例对象的类,可以用多种方式实现,模块,new方法,装饰器,元类
左连接,右连接以及内连接的理解
左连接就是两个表匹配到的数据作为查询结果,左边表中特有的数据,对于右表中不存在的数据用空null填充
右连接和左连接相反,就是两个表匹配到的数据作为查询结果,右边表中特有的数据,对于左表中不存在的数据用空null填充
内连接就是两个表匹配到的数据作为查询结果,结果至少有一个匹配到的数据
写出下列代码运行结果:
|
|
SQL
Web
防御csrf攻击的常用方法
(1)对于重要操作不使用get请求方式
(2)采用post请求方式
(3)在post请求方式的表单中添加@{\%csrf_token}@
(4)输入验证码
Re
匹配一个IP地址
|
|
Django
Spider
Tornado
Flask
Other
下面这段代码的输出结果是什么?
|
|
下面这段代码的输出结果是什么?
|
|
下面这段代码的输出结果将是什么?
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print Parent.x, Child1.x, Child2.x
Parent.x = 3
print Parent.x, Child1.x, Child2.x
输出结果将是:
1 1 1
1 2 1
3 2 3
让很多人困惑或惊讶的是最后一行输出为什么是3 2 3 而不是 3 2 1.为什么在改变parent.x的同时也改变了child2.x的值?但与此同时没有改变Child1.x的值?
此答案的关键是,在Python中,类变量在内部是以字典的形式进行传递。
如果一个变量名没有在当前类下的字典中发现。则在更高级的类(如它的父类)中尽心搜索直到引用的变量名被找到。(如果引用变量名在自身类和更高级类中没有找到,将会引发一个属性错误。)
因此,在父类中设定x = 1,让变量x类(带有值1)能够在其类和其子类中被引用到。这就是为什么第一个打印语句输出结果是1 1 1
因此,如果它的任何一个子类被覆写了值(例如说,当我们执行语句Child.x = 2),这个值只在子类中进行了修改。这就是为什么第二个打印语句输出结果是1 2 1
最终,如果这个值在父类中进行了修改,(例如说,当我们执行语句Parent.x = 3),这个改变将会影响那些还没有覆写子类的值(在这个例子中就是Child2)这就是为什么第三打印语句输出结果是3 2 3
4、下面这段代码在Python2下输出结果将是什么?请解释。
def div1(x,y):
print “%s/%s = %s” % (x, y, x/y)
def div2(x,y):
print “%s//%s = %s” % (x, y, x//y)
div1(5,2)
div1(5.,2)
div2(5,2)
div2(5.,2.)
在Python3下结果会有怎样的不同?(当然,假设上述打印语句被转换成Python3的语法)
在Python2中,上述代码输出将是
5/2 = 2
5.0/2 = 2.5
5//2 = 2
5.0//2.0 = 2.0
默认情况下,Python 2 自动执行整形计算如果两者都是整数。因此,5/2 结果是2,而5./2结果是2.5
注意,在Python2中,你可以通过增加以下引用来覆写这个行为。
from future import division
同时要注意的是,//操作符将总是执行整形除法,不管操作符的类型。这就是为什么即使在Python 2中5.0//2.0的结果是2.0。然而在Python3中,没有此类特性,
例如,在两端都是整形的情况下,它不会执行整形除法
因此,在Python3中,将会是如下结果:
5/2 = 2.5
5.0/2 = 2.5
5//2 = 2
5.0//2.0 = 2.0
5、下面代码的输出结果将是什么?
list = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
print list[10:]
下面的代码将输出[],不会产生IndexError错误。就像所期望的那样,尝试用超出成员的个数的index来获取某个列表的成员。
例如,尝试获取list[10]和之后的成员,会导致IndexError.
然而,尝试获取列表的切片,开始的index超过了成员个数不会产生IndexError,而是仅仅返回一个空列表。
这成为特别让人恶心的疑难杂症,因为运行的时候没有错误产生,导致bug很难被追踪到。
6、考虑下列代码片段:
list = [ [ ] ] * 5
list # output?
list[0].append(10)
list # output?
list[1].append(20)
list # output?
list.append(30)
list # output?
2,4,6,8行将输出什么结果?试解释。
输出的结果如下:
[[], [], [], [], []]
[[10], [10], [10], [10], [10]]
[[10, 20], [10, 20], [10, 20], [10, 20], [10, 20]]
[[10, 20], [10, 20], [10, 20], [10, 20], [10, 20], 30]
解释如下:
第一行的输出结果直觉上很容易理解,例如 list = [ [ ] ] 5 就是简单的创造了5个空列表。然而,理解表达式list=[ [ ] ] 5的关键一点是它不是创造一个包含五个独立列表的列表,而是它是一个创建了包含对同一个列表五次引用的列表。只有了解了这一点,我们才能更好的理解接下来的输出结果。
list[0].append(10) 将10附加在第一个列表上。
但由于所有5个列表是引用的同一个列表,所以这个结果将是:
[[10], [10], [10], [10], [10]]
同理,list[1].append(20)将20附加在第二个列表上。但同样由于5个列表是引用的同一个列表,所以输出结果现在是:
[[10, 20], [10, 20], [10, 20], [10, 20], [10, 20]].
作为对比, list.append(30)是将整个新的元素附加在外列表上,因此产生的结果是: [[10, 20], [10, 20], [10, 20], [10, 20], [10, 20], 30].
7、Given a list of N numbers。
给定一个含有N个数字的列表。
使用单一的列表生成式来产生一个新的列表,该列表只包含满足以下条件的值:
(a)偶数值
(b)元素为原始列表中偶数切片。
例如,如果list[2]包含的值是偶数。那么这个值应该被包含在新的列表当中。因为这个数字同时在原始列表的偶数序列(2为偶数)上。然而,如果list[3]包含一个偶数,
那个数字不应该被包含在新的列表当中,因为它在原始列表的奇数序列上。
对此问题的简单解决方法如下:
[x for x in list[::2] if x%2 == 0]
例如,给定列表如下:
list = [ 1 , 3 , 5 , 8 , 10 , 13 , 18 , 36 , 78 ]
列表生成式[x for x in list[::2] if x%2 == 0] 的结果是,
[10, 18, 78]
这个表达式工作的步骤是,第一步取出偶数切片的数字,
第二步剔除其中所有奇数。
给定以下字典的子类:
class DefaultDict(dict):
def missing(self, key):
return []
8、下面的代码能够运行么?为什么?
d = DefaultDict()
d[‘florp’] = 127
能够运行。
当key缺失时,执行DefaultDict类,字典的实例将自动实例化这个数列。