1、python是什么?

解释性语言、高级语言、开源、简洁、方便、容易扩展

2、可变类型与不可变类型

可变类型:list、dict、可变集合set

不可变类型:数字,str,tuple元组,frozenset (不可变的类型都可以被hash哈希)

内存中的那块内容(value)是否可变

3、深浅copy

浅拷贝。增加一个指针,指向所复制的对象,共用一块内存

深拷贝。增加一个指针,并且开辟了新的内存,这个增加的指针指向这个新的内存

简单地说,浅拷贝只拷贝一层(如果有嵌套),深拷贝拷贝所有层。

4、*args与**kwargs

*args:位置参数,元组,('alex',18)

**kwargs:关键字参数,字典, {'name'='alex','age'=18} 关键字参数一定要放在最后面

5、闭包

内部函数对外部函数,作用域里变量(非全局变量),的引用,则称内部函数为闭包。

闭包的意义:返回函数对象+一层作用域

该函数无论在何处调用,优先使用,自己外层包裹的作用域

6、装饰器

调用装饰器其实是一个闭包函数,

不修改函数的代码与修饰方式,为其他函数添加附加功能

比如:插入日志、性能测试、事物处理、缓存、权限验证等

# 装饰器
import time
def login(func):
def inner():
start_time = time.time()
func()
end_time = time.time()
print("fun 执行时间",end_time-start_time)
return inner @login
def test():
pass

7、生成器

延迟操作,需要的时候才产生结果,而不是立即产生结果

在每次调用next()的时候执行,遇到yield语句返回

创建生成器的两种方式:

  1. li = [i for i in range(100)]
  2. yield方法

8、range-and-xrange

py2:
range() 生成的是列表
xrange() 生成的是一个生成器
py3:
range() 就是一个生成器
xrange() 没了

9、迭代器

不是一次性把数据加载到内存,而是被next()函数调用,不断返回下一个数据

可for循环的数据类型:集合数据类型+生成器

list,tuple,dict,set,str + generator

10、经典类、新式类

经典类:深度优先,python2中

新式类:广度优先,Python3中

11、继承、多态、封装

  1. 继承:类与类之间关系,解决代码重用问题 。重用父类的属性与方法

  2. 多态:同一类事物多种形态 。一个接口,多种形态

    不应关注对象的类型本身,而是它如何使用的

    鸭子类型:如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子

  3. 封装:私有化的属性,私有化的方法,封装起来,外部无法调用

    双下划线__foo

12、classmethod,staticmethod,property

  1. property:特性 (统一访问 原则)

    把类的方法转换为属性,直接 alex.bmi 调用
@property
def bmi(self):
return self.weight / (self.height ** 2)
  1. staticmethod 静态方法 (普通函数 ) 绑定到对象上

    类内的函数实例化---> 普通函数 。 (类和对象都可以使用)
        @classmethod
def from_conf(cls):
obj = settings.name,
return obj
  1. classmethod 类方法 (def foo(cls)) 绑定到类上

    将cls 类本身当做参数传入,直接用类来调用函数,而不用借助类实例

    优雅地实现某个类的实例的构造

13、 new, __init__区别

创建一个新实例时调用__new__ , __new__在 init__之前被调用

初始化一个实例时调用__init

14、单例模式

单例模式设计的类,每次只能实例化1个对象

方式2: new _instance

class Single(object):
_instance = None
def __new__(cls,*args,**kwargs):
if not _instance:
cls._instance = super(Single,cls).__new__(cls,*args,**kwargs)
return cls._instance

15、反射

以“字符串”形式,操作对象的相关属性或方法。

hasattr, getattr, setattr, delattr

ret = getattr(obj,'get_file')()       # 反射  obj是实例对象,name是方法

16、GIL

GIL:全局解释器锁(cpython解释器), 同一时刻,在cpu只能有一个线程执行

C语言解决多线程下的GIL问题

17、协程

协程:轻量级的线程,用户程序自己控制调度的

单线程下的并发, 遇到I/O阻塞,多个任务,自动切换

gevent模块实现

import gevent

def eat():
gevent.sleep(2) # 遇到阻塞会自动切换任务 def play():
gevent.sleep(3) g1 = gevent.spawn(eat)
g2 = gevent.spawn(play)
g1.join()
g2.join()

18、进程,线程 (I/O密集型)

from multiprocessing import Process
from threading import Thread # 子线程 def task(name):
print(name) p = Process(target=task,args=('子进程',))
p = Thread(target=task,args=('子线程',))
p.start() # 给os发个信号
p.join() # 父进程等待子进程执行完,才执行

19、僵尸进程,孤儿进程,守护进程

  1. 僵尸进程

    子进程退出,父进程没有回收子进程,子进程的进程描述符仍然保存在系统中。
  2. 孤儿进程

    父进程退出,子进程还在运行。孤儿进程将被init进程(pid=1)回收
  3. 守护进程

    如果子进程的任务在主进程任务结束后就没有存在的必要了,那么该子进程应该在开启前就被设置成守护进程。

20、进程/线程 间同步方式

  1. 临界区。相当于保护区域
  2. 互斥量。加锁控制
from threading import Thread,Lock,RLock
mutexA=Lock()
mutexB=Lock() mutexA=mutexB=RLock()
#一个线程拿到锁,counter加1,该线程内又碰到加锁的情况,则counter继续加1,
# 这期间所有其他线程都只能等待,等待该线程释放所有锁,即counter递减到0为止 mutexA.acquire()
mutexA.release()
  1. 信号量。PV操作--改变信号量的值 S+1+1+1-1-1-1

    信号量也是一把锁,可以指定信号量为5,

    互斥锁同一时间只能有一个任务抢到锁去执行

    信号量同一时间可以有5个任务拿到锁去执行
解析
Semaphore管理一个内置的计数器,
每当调用acquire()时内置计数器-1;
调用release() 时内置计数器+1;
计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。
  1. 事件Event。相当于通知操作
from threading import Thread, Event
import time
event = Event()
def conn():
event.wait() # 默认是False阻塞中, 等变为True 程序放行 def check():
time.sleep(5)
event.set() # Event对象 的信号标志设置未True t1 = Thread(target=conn)
t2 = Thread(target=check)
t1.start()
t2.start()

21、整数对象池

  1. 小整数对象池。对小整数的定义是 [-5, 257) 这些整数对象是提前建立好的,不会被垃圾回收
  2. 大整数对象池。不共用内存,引用计数为0,销毁

22、python垃圾回收机制 Garbage collection(GC)

  1. 引用计数为主。当引用计数为0,该对象的生命就结束了
  2. 标记-清除。解决循环引用的问题
  3. 隔代回收为辅。内存块根据存活时间分为'代',gc的频率随着'代'的存活时间的增大而减小

    https://www.cnblogs.com/pinganzi/p/6646742.html http://python.jobbole.com/82061/

23、网络编程

# 服务端
import socket
from threading import Thread server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 端口占用
server.bind(('127.0.0.1', 9994))
server.listen(5) while True:
conn, addr = server.accept() t = Thread(target=handle,args=(conn,))
t.start() conn.close()
server.close() def handle(conn):
data = conn.recv(1024)
conn.send(data)
# 客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 9994)) while True:
data = input('>>>').strip()
client.send(data.encode('utf-8')) ret = client.recv(1024)
print('from server:', ret.decode('gbk')) # windows gbk编码 client.close()

05-python基础的更多相关文章

  1. Python 基础练习

    今天接触了python,了解了一下 python 的基础语法,于是想着手训练一下,在本习题集中,参考代码为提供的参考答案,前面的代码为自己思考的代码,最后每道题给出练习的时间. Python 基础练习 ...

  2. Python基础教程【读书笔记】 - 2016/7/31

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十波:第10章  充电时刻 Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装包括 ...

  3. Day1 - Python基础1 介绍、基本语法、流程控制

    Python之路,Day1 - Python基础1   本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼 ...

  4. python基础教程

    转自:http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html Python快速教程 作者:Vamei 出处:http://www.cn ...

  5. Python 基础 二

    Python 基础 二 今天对昨天学习的Python基础知识进行总结,学而不思则惘,思而不学则殆! 一.先对昨天学习的三大循环的使用情况进行总结: 1.while循环的本质就是让计算机在满足某一条件的 ...

  6. python基础篇实战

    1. 判断下面的结果 # 1. 判断下面的结果 # 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 pri ...

  7. python基础1-转自金角大王

    Python之路,Day1 - Python基础1---转自金角大王   本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 ...

  8. (路-莫)-Python基础一

    一,Python介绍 1,python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打 ...

  9. 十七. Python基础(17)--正则表达式

    十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...

  10. 十四. Python基础(14)--递归

    十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...

随机推荐

  1. [iOS] 列表滑动展开隐藏头部HeaderView

    平常遇到大多数的带有列表的应用都会遇到这个场景:在列表顶端有一个Header,当向上滑动列表时,压缩header,向下滑动列表到头时,展开header.这种样式在例如微博,twitter这些展示动态的 ...

  2. 在Windows上安装Gradle

    1.开发环境 (1)Java:JDK8(必须是JDK或JRE7以上,使用java -version查看当前电脑java版本) (2)操作系统:Windows 7 2.安装步骤 (1)下载最新的Grad ...

  3. HttpWebRequest抓取网页内容与直接输入URL得到的内容不一致!球大神帮忙!!

    一.前言 我在做一个百度收录情况查询的软件,就是通过软件来批量查询文章链接是否被百度收录,主要是用来查询某个网址的收录次数还有网站的排行数,思路是借鉴别人的. 二.问题描述 首先需要考虑的是能够支持哪 ...

  4. Oracle EBS AR 客户API

    ------------------------------------ 1. Set Environment ------------------------------------ -- 1a. ...

  5. poj_3253 Fence Repair

    Fence Repair Description Farmer John wants to repair a small length of the fence around the pasture. ...

  6. 表的垂直拆分和水平拆分-zz

    https://www.kancloud.cn/thinkphp/mysql-design-optimalize/39326 http://www.cnblogs.com/nixi8/tag/mysq ...

  7. mysql 5.5 数据库 utf8改utf8mb4

      由于需要用到utf8mb4,之前是utf8现在给改成utf8mb4 查看当前环境 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_ ...

  8. pt-heartbeat --update --daemonize 只执行一次秒退的问题

    使用pt-heartbeat帮助测试MySQL从库delay时长- 第一次运行测试成功,运行顺畅. 过几天再次用--update测试时,发现pt-heartbeat只update一次就自己退出了,-- ...

  9. 转:.NET基础篇——反射的奥妙

    反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等程序集内部的信息.使用反射可以看到一个程序集内部的接口.类.方法.字段.属性.特性等等信息.在System.Reflectio ...

  10. cdn刷新和对应的浏览器现象

    1.浏览器手动点刷新,会发起网络请求,从cdn判断last-modify时间是否一致,未过期则返回304,如果已经过期则返回200,重新请求 关键在于发起的网络请求中'If-Modified-Sinc ...