Opencv EasyCVR rest jpa matrix tfs terminal hive interface clojure pmp视频教程 python查看数据类型 iot系统 h5下拉刷新 mysql入门 java字符串 java访问数据库 java环境安装 java中tostring java地址 java时间格式化 java时间戳转换 javac java重命名 php实例代码 java网络编程实例 路由器有辐射吗 圆形截图 网络工程师教程 陌陌电脑直播设置教程 python求和 foobar2000插件 文件粉碎工具 安卓游戏辅助 mysql数据库恢复 软媒u盘启动 su镜像 101图集电子版 ppt去掉背景音乐 php教程下载
当前位置: 首页 > 学习教程  > 编程语言

Python进阶专题

2020/7/24 9:23:33 文章标签:

【推荐专区】
Python面试50题
Python综合性面试大全

1、Python中hash数据类型
答:可变类型数据不可哈希,如列表、字典
同值不同址,不同值同址
不可变类型数据可哈希,数值、字母、字符串、数字、元组不可变
同值同址,不同值不同址
2、深拷贝和浅拷贝
答:浅拷贝指的是仅仅拷贝的事变量内存区的地址,修改新变量的内容等于修改原来变量的内容;深拷贝相等于C语言中的变量赋值,重新申请一块内存区,且为该内存区填入相同的内容,修改新变量内容并不会影响原来变量的内容

#python中对象,赋值后是同一地址,
#如果是可变对象,对其中一个修改会影响到另一个,
#如果要生成完全新的对象,应使用deepcopy
import copy
data1=copy.deepcopy(data)

3、猴子补丁推荐博文
答:属性在运行时被动态替换,主要是运行中新增模块和替换模块
4、函数调用参数的传递方式是值传递还是引用传递推荐博文
答:是值传递和引用传递的结合,主要看的是传入参数是否可变数据类型,不可变数据类型为值传递,函数内部不改变外部值的内容,可变数据类型相当于引用传递,函数内部针对数据的改变,会直接影响传入参数的改变
5、GIL锁和Python的伪并行
每个时刻只有一条线程在执行,即使在多核架构中也是如此——毕竟,解释器只有一个。如此一来,单进程的 Python 程序便无法利用到多核的优势了

  1. 我们把整个进程空间看做一个车间,把线程看成是多条不相交的流水线,把线程控制流中的字节码看作是流水线上待处理的物品。Python 解释器是工人,整个车间仅此一名。操作系统是一只上帝之手,会随时把工人从一条流水线调到另一条——这种“随时”是不由分说的,即不管处理完当前物品与否
  2. 若没有 GIL。假设工人正在流水线 A 处理 A1 物品,根据 A1 的需要将房间温度(一个全局对象)调到了 20 度。这时上帝之手发动了,工人被调到流水线 B 处理 B1 物品,根据 B1 的需要又将房间温度调到了 50 度。这时上帝之手又发动了,工人又调回 A 继续处理 A1。但此时 A1 暴露在了 50 度的环境中,安全问题就此产生了
  3. GIL 相当于一条锁链,一旦工人开始处理某条流水线上的物品,GIL 便会将工人和该流水线锁在一起。而被锁住的工人只会处理该流水线上的物品。就算突然被调到另一条流水线,他也不会干活,而是干等至重新调回原来的流水线。这样每个物品在被处理的过程中便总是能保证全局环境不会突变

6、工程中的__init__.py文件的作用
init.py文件最常用的作用是标识一个文件夹是一个 python包
init.py文件的另一个作用是定义模糊导入时要导入的内容
使用类似 from package import * 的导入语句的时候就是在使用模糊导入了,这时包的编写者就可以在__init__.py文件中定义 all 来限制模糊导入的内容
7、Python变量的作用域(global)
函数内定义的变量为局部作用域,若要在函数内定义全局作用域,需要加上global修饰符
变量名解析:LEGB原则
当在函数中使用未认证的变量名时,Python搜索4个作用域:

  1. 本地作用域(L)(函数内部声明但没有使用global的变量)
  2. 上一层结构中def或者lambda的本地作用域(E)
  3. 全局作用域(G)(函数中使用global声明的变量或在模块层声明的变量)
  4. 内置作用域(B)(即python的内置类和函数等)
    在第一处能够找到这个变量名的地方停下来

8、类的继承和重载
继承后子类有父类的所有属性和方法,用self来取用
重写父类中的方法,只需要和父类中方法名和形参数量相同即可
9、两种函数赋值给变量的形式(有些区别)

  1. a=f ----a=f型属于将变量指向函数
  2. a=f()----a=f()型属于将f()的返回值赋值给a的过程

10、python的输入输出模式

  1. input()
  2. sys.stdin(.readline() / .readlines())
  3. 迭代每一个,.split(’ ')
  4. 数据类型转换int
import sys
from functools import reduce
while True:
	input()
sys.stdin.readline()
for line in sys.stdin:
	re = list(map(int, line.split()))

11、内建标志符——下划线
变量名_xxx被看作是“私有的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python 来说有特殊含义,对于普通的变量应当避免这种命名风格
"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和自类对象自己能访问到这些变量。
【示例】以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入。

"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
【示例】以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(foo)代表python里特殊方法专用的标识,如 init()代表类的构造函数。

12、如何自建一个异常类
参考文献

13、常见的数据类型转换
int()  - 将任何数据类型转换为整数类型
float()  - 将任何数据类型转换为float类型
tuple() - 此函数用于转换为元组。
set() - 此函数在转换为set后返回类型。
list() - 此函数用于将任何数据类型转换为列表类型。
dict() - 此函数用于将顺序元组(键,值)转换为字典。
str() - 用于将整数转换为字符串。
ord()  - 将字符转换为整数

hex() - 将整数转换为十六进制
oct()  - 将整数转换为八进制
int() -可以默认转换为十进制整数,可以在参数上选择进制的类型

14、lambda匿名函数
参考文献

lambda x: x+1(与下面函数类似)
def f(x):
	return x+1
>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]
>>>
>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
>>>
>>> print reduce(lambda x, y: x + y, foo)
>print[x for x in foo if x % 3 == 0]for.. in.. if.. 方式)

15、python中编码问题
参考文献1
参考文献2
字符编码:选用的字符集不同,每一个编码方式都有对应的字符集
文件编码:文件编码存储在硬盘中的方式,存到硬盘上时是以何种编码存的,再从硬盘上读出来时,就必须以何种编码读
(对应有在内存中显示的编码方式)
python3中字符编码为Unicode(内存编码方式)、文件编码为UTF8
不同编码方式的内容如何转换:

把数据从硬盘上读到内存,转成unicode来显示即可,由于所有的系统、编程语言都默认支持unicode
所有我们的gbk编码软件放在美国电脑上,加载到内存里面,变成了unicode,中文就可正常展示
类似用如下的转码的过程:
    源有编码 -> unicode编码 -> 目的编码

16、垃圾回收机制
参考文献

17、内存管理机制
参考文献

18、python定义多维数组
参考文献

myList = [([0] * 3) for i in range(4)]

myList = [[0]*3]*4

19、列表赋值的情况

a = [2,1]
In [92]: b = a
In [93]: c = a[:]
In [94]: id(a)
Out[94]: 1911478129032
In [95]: id(b)
Out[95]: 1911478129032
In [96]: id(c)
Out[96]: 1911479852104

20、简单递归的使用方案
常用递归实例


本文链接: http://www.dtmao.cc/news_show_50061.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?