python开发知识点总结

*args的用法

python中规定参数前带 * 的,称为可变位置参数,只是我们通常称这个可变位置参数为*args而已,叫其他的一样一样滴。

*args:是一个列表,传入的参数会被放进列表里。

def test_args(f,*args):
    for x in args:
        print(x)
test_args(1,2,3,4,5)

**kwargs的用法

同理,python中规定参数前 带 ** 的,称为可变关键字参数,通常**kwargs

**kwargs:是一个字典,传入的参数以键值对的形式存放到字典里。

def test_kwargs(f,**kwargs):
    print(kwargs.items())
    for k,v in kwargs.items():
        print(k,v)

test_kwargs(1,a=2,b=3,c=4)

如何求素数

# 素数又称质数,0,1不是质数

# 除了1和它自身以外,不能被其他自然数整除的数

高阶函数

# map()函数:接受一个函数f和一个list,并把这个函数f作用在这个list上面
def f(x):
    return x*x
print(list(map(f,[1,2,3,4,5]))) #注意python3中不能直接打印出map函数,输出一个map对象,必须加一个list()进行输出
#输出[1, 4, 9, 16, 25]

# reduce()函数:f必须接受两个参数,reduce实际上是对list的每个元素调用f
# 在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 fucntools 模块里,
# 如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:
from functools import reduce
def f(x,y):
    return x * y # 如果这里的*换成+,则是一个累加
print(reduce(f,[1,2,3,4])) 
#输出24

# filter()函数:过滤一些元素
def is_odd(x):
    return x % 2 == 1
print(list(filter(is_odd,[1,2,3,4,5,6,7,8,9,10])))#注意python3中不能直接打印出filter函数,这里会输出一个对象,必须加一个list()进行输出
#输出[1, 3, 5, 7, 9]

# sorted()函数:iterable 可迭代对象进行排序
# sort:只能对list进行排序,如果将列表换成元祖就无法使用了
a = [2,1,3,9,8,4,5,7,6]
print(sorted(a)) #默认是升序,如果需要降序在列表参数后面加上reverse=True
a.sort()
print(a) #[1, 2, 3, 4, 5, 6, 7, 8, 9]

Python中__new__与__init__方法的区别

       __new__:

       触发时机:在实例化时触发      

       参数:至少一个cls接受当前类

       返回值:必须返回一个对象实例      

       作用:实例化对象

       注意:实例化对象是object类底层实现,其他类继承了object的__new__才能够实现实例化对象

       __init__:

       触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中)   

       参数:至少一个self接受对象

       返回值:无   

       作用:初始化对象成员

       注意:使用该方法初始化的成员都是直接写入对象当中,类中无法具有

什么是匿名函数?

 Lambda函数,不用担心函数名冲突,不过python对匿名函数支持有限,只有一些简单的情况下可以使用

# 声明一个简单的lambda表达式
mylamb = lambda x,y:x+y
# 调用函数
result = mylamb(8,9)
print(result)

简要概述一下python中生成器和迭代器

(1)迭代器:

迭代器协议:对象需要提供next()方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代。

可迭代对象:实现了迭代器协议对象。list、tuple、dict都是Iterable(可迭代对象),但不是Iterator(迭代器对象)。但可以使用内建函数iter(),把这些都变成Iterable(可迭代器对象)。

for item in Iterable 循环的本质就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,遇到StopIteration的异常后循环结束。

(2)生成器:

将列表生成式中[]改变为()数据结构会改变,从列表变为生成器;

列表受内存限制,所以没有必要创建完整的列表(节省大量内存空间),在python中我们可以采用生成器:边循环边计算的机制;

生成器是只能遍历一次的。生成器是一类特殊的迭代器。还能使用 def 定义函数,但是,使用yield而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行。

Python的垃圾回收机制(garbage collection)

(1)当gc模块的计数器达到阈值,垃圾自动回收

(2)当调用gc.collect(),垃圾收到回收

(3)程序退出的时候,python解释器来回收垃圾

函数装饰器的作用

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

进程、线程的区别

(1)定义的不同

进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

(2)区别

一个程序至少有一个进程,一个进程至少有一个线程。

线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。

进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线线程不能够独立执行,必须依存在进程中。

(3)优缺点

线程和进程在使用上各有优缺点:

线程执行开销小,但不利于资源的管理和保护;而进程正相反。

函数的闭包

闭包就是函数式编程的重要语法结构,提高了代码可重复实用性。使用特定或特殊的方式,将局部变量(内部函数)引入到全局环境中使用,这就是闭包操作。

Python里的拷贝

copy.copy():浅拷贝,只拷贝父对象(顶级对象),不拷贝父对象的子对象(嵌套对象)。例如:L=[1,2,3,[4,5,6]]中1,2,3,[4,5,6]就是顶级对象,而[4,5,6]中的4,5,6就是嵌套对象。当我们对L顶级对象进行更改时copy.copy()不会更改,如果对L的嵌套对象进行更改copy.copy()是会更改的,因为他们共用嵌套对象.

copy.deepcopy():深拷贝,拷贝父对象(顶级对象)和子对象(嵌套对象)。当我们对L顶级对象以及嵌套对象进行更改时,不会影响copy.deepcopy().

Python中单下划线和双下划线分别是什么?

__name__:一种约定,Python内部的名字,用来与用户自定义的名字区分开,防止冲突

_name:一种约定,用来指定变量私有

__name:解释器用_classname__name来代替这个名字用以区别和其他类相同的命名

说明os,sys模块不同,并列举常用的模块方法

os模板提供了一种方便的使用操作系统函数的方法

sys模板可供访问由解释器使用或维护的变量和与解释器交互的函数

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。sys模块负责程序与Python解释器的交互,提供了一系列的函数和变量用户操作Python运行时的环境。

 

Python中pass语句的作用是什么?

pass语句不会执行任何操作,一般作为占位符或者创建占位程序

apache和nginx的区别

(1)nginx 相对 apache 的优点:

轻量级,同样起web 服务,比apache 占用更少的内存及资源

抗并发,nginx 处理请求是异步非阻塞的,支持更多的并发连接,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

配置简洁

高度模块化的设计,编写模块相对简单

社区活跃

(2)apache 相对nginx 的优点:

rewrite ,比nginx 的rewrite 强大;

模块超多,基本想到的都可以找到;

少bug ,nginx 的bug 相对较多;

超稳定。

什么是事务?

事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:

从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

事务四大特性:

原子性:事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行;

一致性:几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致;

隔离性:事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的;

持久性:对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

 

 

猜你喜欢

转载自blog.csdn.net/ALLENsakaru/article/details/85145683
今日推荐