Python 110个小知识点




Python三大神器:迭代器,生成器,装饰器




1

字典删除元素del、扩充别的字典update:

a={"name":"daji","age":18}
b={"sex":"male"}
a.update(b)
print(a)



2

python2和python3的range(100)的区别

python2返回列表,python3返回迭代器,节约内存:迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合:

  1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容

  2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问

  3. 访问到一半时不能往回退

  4. 便于循环比较大的数据集合,节省内存

>>> a= iter([1,2,3,4,5])
>>> a
<list_iterator object at 0x0044ADF0>

>>> a.__next__()
1
>>> a.__next__()
2
>>> a.__next__()
3

那么生成器又是啥:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器,比如说上面的range()函数。



3

装饰器场景:已存在函数test1(),结果是输出 hello world-1 ;现在你需要添加功能,输出改为<b>hello world</b> ,怎么改? 可以改test1()的代码,也可以用 @装饰器,另外写一个函数比如 makeBold(fn)  ,如下:


  1. def makeBold(fn):

    1. def wrapped():

      1. return "<b>" + fn() + "</b>"

    2. return wrapped


  2. @makeBold

  3. def test1():

    1. return "hello world-1"

  4. print(test1())


返回结果: <b>hello world-1</b>


当然可以多个装饰器装饰多个函数,就近原则:

  1. @makeBold   #加<b>

      @makeItalic  #加<i>

      def test3():

    1. return "hello world-3"


返回结果:<b><i>hello world-3</i></b>


总结:函数可以作为参数传递的语言,可以使用装饰器



4

列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]

a=[1,2,3,4,5]
def cal(x):
    return x**2
c= map(cal,a)
ret=[res for res in c if res > 10]
print (ret)



5

import random

import numpy as np

python中生成随机整数:random.randint(0,100)

5个随机小数:np.random.randn(5)

1个0--1之间小数方法:random.random()



6

断言:

happysneaker.com



7

数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句

select distinct name from student



8

s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"

s= "ajldjlajfdljfddd"
s=set(s)
s=list(s)
s.sort(reverse=False)  #current result: ['a', 'd', 'f', 'j', 'l']
res = "".join(s)
print(res)


. join():    将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串



9

用lambda函数实现两个数相乘

c= lambda a,b:a*b
print (c(2,5))



10

字典根据键从小到大排序:dic={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}


dic={"name":"zs","age":18,"city":"shenzhen","tel":"1362626627"}
res= sorted(dic.items(),key=lambda i:i[0],reverse=False)
#sorted can only work for list,we should make it dict
dict(res)
print(res)


排序的话用sort或者sorted,然而只能对list操作,因此可以通过设置sorted的函数,并用 lambda提取key,从小到大排列。


NOTE:

sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作



11

统计字符串每个字符出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"

from collections import Counter
str="kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
res=Counter(str)
print (res)


结果:

Counter({'l': 9, 'h': 6, ';': 6, 'f': 5, 'a': 4, 'd': 3, 'j': 3, 's': 2, 'b': 1, 'g': 1, 'k': 1})



12

a=(1,)b=(1),c=("1") 分别是什么类型的数据?

元组tuple,整数int,字符1



13

两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,5,6,7,8,9]

l1=[1,5,7,9]
l2=[2,2,6,8]
l1.extend(l2)
l1.sort()
print(l1)



14

用python删除文件和用linux命令删除文件方法

python:os.remove(文件名)

linux: rm 文件名



15

正则表达式匹配中,(.*)和(.*?)匹配区别?

(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配

(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配

happysneaker.com


如果只提取文本的话,尽量用非贪婪匹配。




16

[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6] ,考察列表推导式:

l=[[1,2],[3,4],[5,6]]
res=[x for m in l for x in m]
print(res)




17

x="abc",y="def",z=["d","e","f"],分别求出x.join(y)和x.join(z)返回的结果

both : dabceabcf



18

举例说明异常模块中try except else finally的相关意义

happysneaker.com



19

[1,2,3]+[4,5,6]的结果是多少?

两个列表相加,等价于extend


20

简述mysql和redis区别

redis: 内存型非关系数据库,数据保存在内存中,速度快

mysql:关系型数据库,数据保存在磁盘中,检索的话,会有一定的Io操作,访问速度相对慢



21

list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]

利用min()方法求出最小值,原列表删除最小值,新列表加入最小值,递归调用获取最小值的函数,反复操作



22


简述同源策略

同源策略需要同时满足以下三点要求:

1)协议相同

2)域名相同

3)端口相同

http:test.com与https:test.com 不同源——协议不同

http:test.com与http:admin.com 不同源——域名不同

http:test.com与http:test.com:8081 不同源——端口不同

只要不满足其中任意一个要求,就不符合同源策略,就会出现“跨域”


23

简述cookie和session的区别

1,session 在服务器端,cookie 在客户端(浏览器)

2、session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效,存储Session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息,进行了base64编码,过期时间由开发人员设置

3、cookie安全性比session差


24

IOError:输入输出异常

AttributeError:试图访问一个对象没有的属性

ImportError:无法引入模块或包,基本是路径问题

IndentationError:语法错误,代码没有正确的对齐

IndexError:下标索引超出序列边界

KeyError:试图访问你字典里不存在的键

SyntaxError:Python代码逻辑语法出错,不能执行

NameError:使用一个还未赋予对象的变量


25

请将[i for i in range(3)]改成生成器

列表表达式的 [ ] 改为()即可变成生成器,有没有惊呆了

a=[i for i in range(3)]
print (a)   #[0,1,2]
a=tuple(a)
print (a)  #(0,1,2)


26

happysneaker.com



27

python字典和json字符串相互转化方法

json.dumps()字典转json字符串,json.loads()json转字典

happysneaker.com


28

字符串转化大小写

str.upper()

str.lower()


29

用两种方法去空格

str.replace(" ","")

str.split(" ")

"".join(str)


30

lambda匿名函数好处,一般配合 map(func,参数) 函数使用:

精简代码,lambda省去了定义函数,map省去了写for循环过程。


31

python中读取Excel文件的方法

应用数据分析库pandas

happysneaker.com


32

python里面的字符:

① 如果开头处有个r,说明是普通字符串,那么其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n"表示换行,"\t"表示Tab等。

② 以u或U开头的字符串表示unicode字符串





Web安全技术分享
请先登录后发表评论
  • 最新评论
  • 总共0条评论