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. apk安装提示:Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=XXX]

    近日,楼主在同一台手机上,同时安装同一个游戏的不同渠道包,add install后,提示:Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=andro ...

  2. 服务器重启可能会导致SQL Server中部分数据库变为single user mode

    今天检查公司生产服务器的SQL Server数据库,惊讶的发现有三个生产数据库变为了single user mode.奇怪的是没有任何人和程序执行过SQL语句将这三个数据库设置为single user ...

  3. 配置jboss EAP 6.4 数据库连接超时时间

    Environment Red Hat JBoss Enterprise Application Platform (EAP) 6.x 7.x Issue Server throws followin ...

  4. 【史上最全】申请配置阿里云服务器,并部署IIS和开发环境,项目上线经验

    最近一年在实验室做web后端开发,涉及到一些和服务器搭建及部署上线项目的相关经验,写个帖子和小伙伴们分享,一同进步! 首先谈一下,为什么越来越多中小型公司/实验室,部署项目的趋势都是在云服务器而不是普 ...

  5. DevExpress07、DataNavigator、 ControlNavigator

    https://documentation.devexpress.com/WindowsForms/DevExpress.XtraEditors.DataNavigator.class 1.DataN ...

  6. 阿里八八Alpha阶段Scrum(6/12)

    今日进度 叶文滔: 修复了无法正确判断拖曳与点击的BUG,并且成功连接添加界面. 会议内容 会议照片 明日安排 叶文滔: 继续完善按钮功能 王国超: 继续攻克日程界面显示存在的BUG 俞鋆: 继续进行 ...

  7. yield协程

    1.Generator Generator , 一种可以返回迭代器的生成器,当程序运行到yield的时候,当前程序就唤起协程记录上下文,然后主函数继续操作,当需要操作的时候,在通过迭代器的next重新 ...

  8. php输出日志

    error_log('你要输出的信息', 3, 'E:\work\jiajiayue\Application\Api\Controller\1.txt');die; php error_log记录日志 ...

  9. Spark项目之电商用户行为分析大数据平台之(一)项目介绍

    一.项目概述 本项目主要用于互联网电商企业中,使用Spark技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.购物行为.广告点击行为等)进行复杂的分析.用统计分析出来的数据,辅助公司中 ...

  10. CentOS 6.5安装配置NFS服务器

    OS:centos 6.5 服务端:10.1.11.201 客户端:10.1.11.202 10.1.11.203 10.1.11.204 1.服务端的配置 安装必须的yum包: yum -y ins ...