python进阶题
反正我⾯试遇到过部分,先总结下:
单引号,双引号,三引号的区别
1、单引号,双引号,三引号的区别
分别阐述3种引号⽤的场景和区别
⽐如:
2).三引号
区别:
若你的字符串⾥⾯本⾝包含单引号,必须⽤双引号
⽐如:”can’t find the log\n”
2、python函数的传值到底是值传递还是引⽤传递,要分情况
a.不可变参数⽤值传递:
像整数和字符串这样的不可变对象,是通过拷贝进⾏传递的,因为你⽆论如何都不可能在原处改变不可变对象
b.可变参数是⽤引⽤传递的
⽐如像列表,字典这样的对象是通过引⽤传递,和C语⾔⾥⾯的⽤指针传递数组很相似,可变对象能在函数内部改变.
def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print("list1 = %s" % list1)
print("list2 = %s" % list2)
print("list3 = %s" % list3)
# list1 = [10, 'a']  #1、3传⼊参数都是1个,列表可变,在⼀起了
# list2 = [123]        #2传递2参数,类似闭包,结果单独
# list3 = [10, 'a']
list2调⽤时,初始化并传⼊了⼀个空的列表参数,所以返回只有123
list1和list3list2调⽤时没有参数,使⽤了extentdList默认初始化的list,所以两次分别把10和a添加到list,得到[10,'a']。返回给list1和list3的都是extendList初始化的list的地址,所以返回的值相同。列表可变
下⾯这段代码可能能够产⽣想要的结果。
def extendList(val, list=None):
if list is None:
list = []
list.append(val)
return list
类似经典题⽬
什么是lambda函数?它有什么好处?
3 什么是lambda函数?它有什么好处?
举例说明lambda的⽤法,并说明⽤lambda的优点
1).lambda的⽤法:
lambda是匿名函数,⽤法如下:lambda arg1,arg2..argN:expression using args
2).优点
lambda能和def做同样种类的⼯作,特别是对于那些逻辑简单的函数,直接⽤lambda会更简洁,⽽且省去取函数名的⿇烦(给函数取名是个技术活)
字符串格式化:%和.format的区别
4、 字符串格式化:%和.format的区别
字符串的format函数⾮常灵活,很强⼤,可以接受的参数不限个数,并且位置可以不按顺序,⽽且有较为强⼤的格式限定符(⽐如:填充,对齐,精度等)
写⼀个函数, 输⼊⼀个字符串, 返回倒序排列的结果
5、写⼀个函数
text='acddfjkf'
编程先学c语言还是python把字符串变成列表,⽤列表的reverse函数
1、text[::-1]
2、把字符串变成列表,⽤列表的
6、按升序合并如下两个list, 并去除重复的元素,⼩到⼤排序
a = [1,3,5,7]
b = [1,3,4,6,8]
c = list(set(a+b))
7、下⾯的代码会不会报错
list = [1,2,3,4,5]
list[10:]
不会报错,⽽且会输出⼀个 [],并且不会导致⼀个 IndexError
试图访问⼀个列表的以超出列表长度数作为开始索引的切⽚将不会导致 IndexError,并且将仅仅返回⼀个空列表
⼀个讨厌的⼩问题是它会导致出现 bug ,并且这个问题是难以追踪的,因为它在运⾏时不会引发错误,吐⾎啊~~
8、
交互变量 a,b=b,a
列表推导式 [x for x in range(1,100) if x%2==0]
1. 列表推导式代替for
2. for 迭代
3. a, b = b, a
4. 初始化列表 bag = [0] * 10 注意:如果你列表包含了列表,这样做会产⽣浅拷贝。
5. 漂亮简洁的⽅法来代替,.format
6. 需要所有的元素被返回,⽤个下划线_
7. 使⽤库
8. 在列表中切⽚/步进
9. 长时间来看,将tab和空格混在⼀起会造成灾难,你会看到IndentationError: unexpected indent。不管你选择tab键还是空格键,
你应该在你的⽂件和项⽬中⼀直保持使⽤。
format原来
name = "Raymond"  age = 22
born_in = "Oakland, CA"  string = "Hello my name is " + name + "and I'm " + str(age) + " years old. I was born in " + born_in + "."  print(string)
改进
name = "Raymond"  age = 22
born_in = "Oakland, CA"  string = "Hello my name is {0} and I'm {1} years old. I was born in {2}.".format(name, age, born_in)
print(string)
随意列举⼀些新⼿普遍存在的问题:
1.不了解Python对象模型, 变量名, 对象概念含混.
在 Python 中,⼀切皆对象
2.不了解可变对象和不可变对象, 尤其是int.
列表是可变对象类型,因此传递的时候,变量名b绑定的内存地址与a绑定的内存地址是同⼀地址。
遍历来赋值,则变为深复制。
这和copy中的copy、deepcopy类似。
3.不了解切⽚意味着拷贝, 在循环中⼤量使⽤, 影响效率.
4.不了解切⽚是浅拷贝还是深拷贝.
5.遇到bytes和str(2.7中的str和unicode)就头晕.
6.经常在需要使⽤is的场景使⽤==.
7.不了解def是运⾏时执⾏语句, 并且是赋值语句.
8.类属性和实例属性混淆.
9.不了解在函数中修改可变对象参数会对调⽤者产⽣影响, 导致莫名其妙错误.
10.企图在函数中修改全局变量, 没有使⽤global, ⽽创建了本地变量.
11.以可变对象做函数默认参数.
你只能快跑, 进⼀步学习, Python语⾔层⾯还需要学习下⾯⼀些内容:
1.使⽤⽣成器, 迭代器
2.函数式编程, 匿名函数lambda, map, reduce, filter
3.列表解析, 字典解析, 集合解析, ⽣成器解析
4.运算符重载(setattr, getattr, getitem, gt, lt...)
5.property, 描述符(get, set, delete)
6.上下⽂管理器(enter, exit)
7.深⼊理解⾯向对象
列举⼀些极为常⽤的py库:
1.正则表达式 re
2.迭代⼯具 itertools
3.常⽤数据结构 collections, heapq, array
4.处理⼆进制数据 struct
5.随机 random
6.系统调⽤ os
7.Python对象序列化 pickle
8.多进程多线程处理 threading, multiprocessing
9.⽹络 socket, urllib
10.系统参数 sys
结合实战
1.使⽤django, flask开发⽹站.
2.开发⽹络爬⾍或使⽤Python爬⾍框架(如scrapy).
3.写⼀些⾃动化运维脚本, 定时读取某软件log, 出现异常⾃动发邮件.
4.使⽤selenium对⽹站进⾏测试.
5.使⽤Python开发树莓派⼩车(电机,传感器驱动).
6.使⽤Python开发Vim插件, 如在vim中做⼀个⾳乐播放器.
7.使⽤Python做算法题, 如leetcode.
8.opencv做图像识别.
9.使⽤numpy和pandas做数据处理.
10.使⽤机器学习库sklearn, tensorflow做应⽤.
11.使⽤PyQt编写桌⾯应⽤.
12.使⽤scipy, matplotlib做科学计算.
13.使⽤Python做渗透测试.
⾼级话题可以继续学习:
1.装饰器
2.元类

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。