最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
4)下面代码的输出结果将是什么
list = ['a','b','c','d','e']
print(list[10:])
代码将输出[],不会产生IndexError错误,就像所期望的那样,尝试用超出成员的个数的index来获取某 个列表的成员。例如,尝试获取list[10]和之后的成员,会导致IndexError。然而,尝试获取列表的切 片,开始的index超过了成员个数不会产生IndexError,而是仅仅返回一个空列表。这成为特别让人恶 心的疑难杂症,因为运行的时候没有错误产生,导致Bug很难被追踪到。
5)给定两个列表,怎么找出他们相同的元素和不同的元素
list1 = [1,2,3]
list2 = [3,4,5]
set1 = set(list1)
set2 = set(list2)
print(set1 & set2)
print(set1 ^ set2)
6)Python元组和列表的区别
答:列表可变,元组不可变。
如果只能回答上面的答案在大厂面试中一定会挂,下面进行详细解答:
元组(tuple)不可变是指它的内存地址不可变,如果元组内的元素是可变类型的值(例如:dict),那其中的元素是可以改变的。例如:
a = (1, {'key': 1})
a[1]['key'] = 2
print('改变之后的a的值', a)
输出结果
改变之后的a的值 (1, {'key': 2})
除此之外,元组占用的内存空间更小:
a = [1, 2, 3, 4, 5, 6]
print('列表的空间大小为:', a.__sizeof__())
b = (1, 2, 3, 4, 5, 6)
print('元组的空间大小为:', b.__sizeof__())
输出结果
列表的空间大小为: 136
元组的空间大小为: 72
元组可以作为字典的key,而列表不能:
列表作为字典的key时会报错!
a = {['a']:1}
输出结果
TypeError: unhashable type: 'list'
元组作为字典的key时则不会报错
a = {('a',):1}
另外,元组的元素必须用逗号分隔,哪怕只有一个元素:
(‘a’,)
元组和列表的区别总结如下:
元组内存地址不可变,列表内存地址可变;
元组占用空间比列表更少;
元组是不可变参数,所以可以作为字段的key,而列表(可变参数)不能;
元组的元素必须用逗号分隔,哪怕只有一个元素;
7)如何在一个函数内部修改全局变量
可以使用global修改:
a = 1
def test():
globals()['a'] = 2
print('原来的a值:', a)
test()
print('修改后的a值:', a)
输出结果
原来的a值: 1
修改后的a值: 2
函数也可以改成这样:
def test():
global a
a=2
8)解释一下Python的GIL
GlL是 python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占 python解释器(加了一把锁即GIL),使该进程內的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。多进程中因为每个进程都能被系统分配资源,相当于每个进程有了ー个 python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大。
9)Python列表去重
通过集合的方式去重:
a = [1, 2, 2, 3, 3, 6]
a = set(a) # 先转为集合进行去重
a = list(a) # 然后再转换为列表
print('去重后的列表', a)
手写去重代码:
a = [1, 2, 2, 4, 4, 6, 7]
b = []
for i in a:
if i not in b:
b.append(i)
print('去重后的列表', b)
10)列出 python中可变数据类型和不可变数据类型,并简述原理
不可变数据类型:数值型(int)、字符串型(str)和元组(tuple)不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址):
a = 3
b = 3
print('a的内存地址为', id(a))
print('b的内存地址为', id(b))
输出结果
a的内存地址为 1658574891376
b的内存地址为 1658574891376
可变数据类型:列表(list)和字典(dict),允许变量的值发生变化,即如果对变量进行 append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象:
a = [1,2]
b = [1,2]
print('a的内存地址为', id(a))
print('b的内存地址为', id(b))
输出结果
a的内存地址为 2122512488768
b的内存地址为 2122512662720
6)python2和 python3区别
Python3使用 print必须要以小括号包裹打印内容,而在Python2既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容:
print("hello world") #pyton3和python2都可
print "hello world" #python2
python2 range(1,10)返回列表, python3中返回迭代器,节约内存;
python2中使用asci编码, python中使用utf-8编码;
python2中 unicode表示字符串序列,str表示字节序列python3中st表示字符串序列,byte表示字节序列 ;
python2中为正常显示中文,引入 coding声明, python3中不需要;
python2中是 raw input0函数, python3中是 Input0函数;
11)python中内置的数据结构有几种
整型 int、 长整型 long、浮点型 float、 复数 complex
字符串 str、 列表 list、 元祖 tuple
字典 dict 、 集合 set
Python3 中没有 long,只有无限精度的 int
12)下面代码的输出结果将是什么
a = [1,2]
print(a[3:])
代码将输出[],不会产生IndexError错误,就像所期望的那样,尝试用超出成员的个数的index来获取某个列表的成员。例如,尝试获取list[10]和之后的成员,会导致IndexError。然而,尝试获取列表的切片,开始的index超过了成员个数不会产生IndexError,而是仅仅返回一个空列表。这成为特别让人恶心的疑难杂症,因为运行的时候没有错误产生,导致Bug很难被追踪到。
*13)Python代码中_args, _kwargs 含义及用法?
args: arguments 的缩写,表示位置参数
kwargs: keyword arguments 的缩写,表示关键字参数
14)请列出 5 个 python 标准库?
os:提供了不少与操作系统相关联的函数
sys: 通常用于命令行参数
re: 正则匹配
math: 数学运算
datetime:处理日期时间
15)Python的可变数据类型和不可变数据类型分别有?
可变数据类型:列表、字典、集合
不可变数据类型:数字、字符串、元组
16)Python 中魔法方法和其用途?
init:对象初始化方法
new:创建对象时候执行的方法,单列模式会用到
str:当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
del:删除对象执行的方法
17)Python 中os和sys模块的作用分别是?
os模块:负责程序与操作系统的交互,提供了访问操作系统底层的接口。sys模块:负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
18)简述Python引用计数机制?
python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题。
19)Python赋值、浅拷贝和深拷贝的区别?
Python 有 3 种赋值方式:直接赋值、浅拷贝、深拷贝;
直接赋值:就是对象的引用。(相当于给原来的对象起个别名),比如有个人叫张三,外号叫小张,对象的引用就是类似,虽然换个名字,但是两个名字指的是同一个人。
浅拷贝,拷贝的是父对象,不会拷贝到内部的子对象。(单从浅字就可以看出拷贝的东西不深,可以理解为只拷贝一层) { 1、完全切片方法;2、工厂函数,如 list();3、copy 模块的 copy()函数 }
深拷贝,包含对象里面的自对象的拷贝(可以理解为克隆,全拷贝过去但是两者没有任何关系了,各自是各自的);所以原始对象的改变不会造成深拷贝里任何子元素的改变 { copy 模块的 deep.deepcopy()函数 }
请阐述在Python中split(),sub(),subn()的功能分别是什么?
split(): 使用正则表达式模式将给定字符串“拆分”到列表中。
sub(): 查找正则表达式模式匹配的所有子字符串,然后用不同的字符串替换它们
subn(): 它类似于sub(),并且还返回新字符串。
20)举例 sort 和 sorted方法的区别?
使用 sort()方法对 list 排序会修改 list 本身,不会返回新 list,sort()不能对 dict 字典进行排序;
sorted 方法对可迭代的序列排序生成新的序列,对 dict 排序默认会按照 dict 的 key 值进行排序,最后返回的结果是一个对 key 值排序好的list;
sorted 对 tuple, dict 依然有效,而 sort 不行;
21)解释 Python 中的可变类型和不可变类型?
1.Python中的可变类型有list,dict;不可变类型有string,number,tuple.
2.当进行修改操作时,可变类型传递的是内存中的地址,也就是说,直接修改内存中的值,并没有开辟新的内存。
现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。
分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!