python进阶题

反正我面试遇到过部分,先总结下:

1、单引号,双引号,三引号的区别

分别阐述3种引号用的场景和区别

比如:

  • 单引号:’python’
  • 双引号:”python”

2).三引号

  • 三单引号:”’python ”’,也可以表示字符串一般用来输入多行文本,或者用于大段的注释
  • 三双引号:”””python”””,一般用在类里面,用来注释类,这样省的写文档,直接用类的对象__doc__访问获得文档

区别:

若你的字符串里面本身包含单引号,必须用双引号

比如:”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
类似经典题目   Python面试中8个必考问题

面试题  

3 什么是lambda函数?它有什么好处?

举例说明lambda的用法,并说明用lambda的优点

1).lambda的用法:

lambda是匿名函数,用法如下:lambda arg1,arg2..argN:expression using args

2).优点

lambda能和def做同样种类的工作,特别是对于那些逻辑简单的函数,直接用lambda会更简洁,而且省去取函数名的麻烦(给函数取名是个技术活)

4、 字符串格式化:%和.format的区别

字符串的format函数非常灵活,很强大,可以接受的参数不限个数,并且位置可以不按顺序,而且有较为强大的格式限定符(比如:填充,对齐,精度等)

5、写一个函数, 输入一个字符串, 返回倒序排列的结果

text='acddfjkf'

1、text[::-1]  2、把字符串变成列表,用列表的reverse函数

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]


Python开发的9个小贴士

  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.元类


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值