ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python基础知识

2022-09-04 20:00:24  阅读:217  来源: 互联网

标签:计数 Python python 对象 session 内存 基础知识 服务端


什么是Python命名空间?

在Python中,所有的名字都存在于一个空间中,它们在该空间中存在和被操作——这就是命名空间。它就好像一个盒子,每一个变量都对应装着一个对象。当查询变量的时候,会从该盒子里面寻找相应的对象。

cookie和session的关系和区别

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识别具体的用户,这个机制就是session。典型的场景比如购物车,当你点击下单按钮时,由于HTTP是无状态协议,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建特定的session,用于标识这个用户,并且跟踪用户。这个session是保存在服务端的有且仅有一个唯一标识。在服务端保存session的方法很多,内存、数据库、文件都有。

每次HTTP请求的时候,客户端都会发送相应的cookie信息到服务端。实际上大多数的应用都是用cookie来实现session跟踪的,第一次创建session的时候,服务端会在HTTP协议中告诉客户端,需要在cookie里面记录一个session ID,以后每次请求会把这个ID发送到服务器,服务端就直到你是谁了。

Session:是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

Cookie:是客户端保存用户的一种机制,用来记录用户的一些信息,也是session实现的一种方式。

new和init的区别

new:创建对象时调用,会返回当前对象的一个实例

init:创建完对象后调用,对当前对象的一些实例化,无返回值

调用顺序:先调用new生成一个实例在调用init方法对实例进行初始化,比如添加属性。

参数传递机制

如果实际参数的数据类型是可变对象(列表、字典),则函数参数的传递法昂是将采用引用传递的方式。如果是不可变的,比如字符串、数值、元组,他们就是按值传递。

迭代器

迭代器是访问集合元素的⼀种⽅式,他的对象从集合的第⼀个元素开始访问,直到所有元素被访问完结束,⽤iter()创建迭代器,调⽤next()函数获取对象(迭代只能往前不能后退)。 两者区别: 1.创建/⽣成,⽣成器创建⼀个函数,⽤关键字yield⽣成/返回对象;迭代器⽤内置函数iter()和next() 2.⽣成器中yield语句的数⽬可以⾃⼰在使⽤时定义,迭代器不能超过对象数⽬ 3.⽣成器yield暂停循环时,⽣成器会保存本地变量的状态;迭代器不会使⽤局部变量,更节省内存

yield

保存当前运行状态(断点),然后暂停执行,即将函数挂起。

将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用,当使用next()、send()函数让函数从断点处继续执行,即唤醒函数。

Python垃圾回收机制

自动处理分配回收内存的问题,没有了内存泄漏的隐患,以引用计数机制为主,标记-清除和分代收集两种机制为辅。

计数机制就是 Python 中的每⼀个对象都有⼀个引⽤计数的值,当有引⽤的时候,这个值会增加,引⽤他的对象被删除时,这个值减⼩,引⽤计数的值为0时,该对象⽣命结束,Python 会把这段内存⾃动回收。(缺点,循环引⽤,如果 l1 和 l2 相互引⽤,没⽤其他的对象引⽤他们,这两段内存永远⽆法被回收)

Python如何内存管理

引用计数:python内部使用引用计数,来保持追踪内存中的对象,python内部记录了对象有多个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不需要时,这个对象的引用计数为0时,它被垃圾回收。

垃圾回收:python会检查引用计数为0的对象,清除在其内存占用的空间;循环引用对象则用一个循环垃圾回收期来回收。

内存池机制:在python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快有被释放;由于这些内存的申请不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着python在运行期间会大量地执行malloc和free地操作,频繁地在用户态和核心态之间进行切换,这将严重影响python的执行效率。为了加速python的执行效率,python引入了一个内存池机制,用于管理对小块内存的申请和释放。

python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

python中所有小于256字节的对象都是用pymalloc实现的分配器,而大的对象则使用系统的malloc。另外python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些数的内存就不能在分配给浮点数。

深拷贝、浅拷贝和等号赋值

深拷贝:新建一个对象,把原来对象的内存完全复制过来,改变复制后的对象,不会改动原来内存的内容(两个对象在复制之后是完全独立的对象)

等号赋值:相当于为原来的对象打上一个新的标签,两个引用指向同一个对象,修改其中的一个,另一个也会产生变化。

浅拷贝:

两种情况,1. 浅拷⻉的值是不可变对象(数值、字符、元组)时,和等于赋值⼀样,对象的id值和浅拷⻉原来的值相同;2. 如果是可变对象(列表、字典等),a. ⼀个简单的没有嵌套的对象,复制前后的对象相互之间不会影响,b. 对象中有复杂⼦对象,如列表嵌套,如果改变原来的对象中复杂⼦对象的值,浅拷⻉的值也会受影响,因为在浅拷⻉时只复制了⼦对象的引⽤(只拷⻉⽗对象)。

python有什么优势

1.解释型,语法简单易懂,可读性强;

2.有很多库可以用,可以让我们站在巨人的肩膀上简单的实现想要的功能;

2.可扩展,和其他编程语言或其他软件有可连接的接口;

4.免费开源、可移植;

5.自动内存管理,让程序员可以专注于代码的实现

缺点:

1.它的可解释性特征使得其运行速度变慢。

2.动态语言的特点可能会增加运行时的错误。

面向对象和面向过程的区别

面向对象是把构成问题的事务分解成各个对象,建立对象来描述某个事务在解决问题的步骤中的行为;面向过程是分析出解决问题所需要的步骤,然后用一些函数把这些步骤一步步实现,使用的时候一次调用函数就行。

 

标签:计数,Python,python,对象,session,内存,基础知识,服务端
来源: https://www.cnblogs.com/baifeili/p/16655809.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有