python面试的100题(18)

函数

52.python常见的列表推导式?

列表推导式书写形式:  

[表达式 for 变量 in 列表]

或者

[表达式 for 变量 in 列表 if 条件]

参考地址:https://www.cnblogs.com/yupeng/p/3428556.html

53.简述read、readline、readlines的区别?

(1) read(size):按字节从头读到最后,返回的是一个字符串类型,其中参数size是表示读取的字节数,size的默认是读取全部。

(2) readline() :每次只读取一行,跟read一样,也是返回的是str字符串对象。

(3) readlines() : 读取文件的所有行,把读取的每一行作为一个元素放在一个列表中,返回的是一个列表对象。

参考地址:https://blog.csdn.net/gangzi__csdn/article/details/80703542

54.什么是Hash(散列函数)?

散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。

hash函数就是把任意长的输入字符串变化成固定长的输出字符串的一种函数。输出字符串的长度称为hash函数的位数。

散列(Hashing)通过散列函数将要检索的项与索引(散列,散列值)关联起来,生成一种便于搜索的数据结构(散列表)。

性质

(1)确定性:哈希的散列值不同,那么哈希的原始输入也就不同。

(2)不确定性:同一个散列值很有可能对应多个不同的原始输入。称为“哈希碰撞”。

参考地址:https://blog.csdn.net/m0_37925202/article/details/82015731

55.python函数重载机制?

参考地址:https://blog.csdn.net/lx1607/article/details/50530045

56.写一个函数找出一个整数数组中,第二大的数

arr_ = arr
arr_[np.argmax(arr_)] = np.min(arr)
print(arr_)
print("# arr中最大的数为{},位于第{}位".format(np.max(arr_), np.argmax(arr_)+1))

57.手写一个判断时间的装饰器

import datetime

class TimeException(Exception):
    def __init__(self, exception_info):
        super().__init__()
        self.info = exception_info

    def __str__(self):
        return self.info

def timecheck(func):
    def wrapper(*args, **kwargs):
        if datetime.datetime.now().year == 2019:
            func(*args, **kwargs)
        else:
            raise TimeException("函数已过时")

    return wrapper

@timecheck
def test(name):
    print("Hello {}, 2019 Happy".format(name))

if __name__ == "__main__":
    test("backbp")

结果为:Hello backbp, 2019 Happy

58.使用Python内置的filter()方法来过滤?

list(filter(lambda x: x % 2 == 0, range(10)))

59.编写函数的4个原则

1、函数设计要尽量短小,嵌套层次不宜过深。避免过长函数,嵌套最好能控制在3层之内。
2、函数申明应该合理,简单,易于使用。除函数名能够够正确反映其大体功能外,参数的设计也应该简洁明了,参数个数不宜太多。
3、函数参数设计应该考虑向下兼容。可以通过加入默认参数来避免退化。

4、一个函数只做一件事,就要尽量保证抽象层级的一致性,所有语句尽量在一个粒度上。若在一个函数中处理多件事,不利于代码的重用。

Python中函数设计的好习惯还包括,不要在函数中定义可变对象作为默认值,使用异常替换返回错误,保证通过单元测试等。

参考地址:https://www.jianshu.com/p/ef4196b47659

60.函数调用参数的传递方式是值传递还是引用传递?

函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。

值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间来存放由主调函数放进来的实参的值,从而想成为了实参的一个副本。值传递的特点是被调函数对形势参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做任何的操作都影响了主调函数中的实参变量。

在python中,可以有多个引用同时指向一个内存。

python不允许程序员选择采用传值还是传引用。python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(字典、列表)的引用,就能修改对象的原始值--相当于‘传引用’来传递对象。如果函数收到的是一个不可变对象(数字、字符或元组)的引用,就不能直接修改原始对象--相当于通过‘值传递’来传递对象。

参考地址:https://www.cnblogs.com/spring-haru/p/9320493.html

原文地址:https://www.cnblogs.com/Fiona-Y/p/10592122.html

时间: 2024-10-12 09:14:01

python面试的100题(18)的相关文章

python面试的100题(21)

正则表达式 94.请写出一段代码用正则匹配出ip? ip地址的生成规则. IP地址,是由32位数字二进制转为四个十进制的字符串组成. 怎么转化?下面讲解: 二进制:11111111111111111111111111111111 分为四部分:11111111.11111111.11111111.11111111 转化:2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=255 转为十进制范围:0~255.0~255.0~255.0~255 这就是IP地址的范围. 根据这个生成IP的规

python面试的100题(15)

41.super函数的具体用法和场景 为了调用父类(超类)的一个方法,可以使用 super() 函数,比如: class A: def spam(self): print('A.spam') class B(A): def spam(self): print('B.spam') super().spam() # Call parent spam() super() 函数的一个常见用法是在 __init__() 方法中确保父类被正确的初始化了: class A: def __init__(self

python面试的100题(9)

17.python如何实现单例模式?请写出两种实现方式? 第一种方法:使用装饰器 def singleton(cls): instances = {} def wrapper(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return wrapper @singleton class Foo(object): pass foo1 = Fo

python面试的100题(7)

8.将字符串 "k:1 |k1:2|k2:3|k3:4",处理成字典 {k:1,k1:2,...} str1 = "k:1|k1:2|k2:3|k3:4" def str2dict(str1): dict1 = {} for iterms in str1.split('|'): key,value = iterms.split(':') dict1[key] = value return dict1 #字典推导式 d = {k:int(v) for t in str

LeetCode面试常见100题( TOP 100 Liked Questions)

LeetCode面试常见100题( TOP 100 Liked Questions) 置顶 2018年07月16日 11:25:22 lanyu_01 阅读数 9704更多 分类专栏: 面试编程题真题合集 常见算法问题 LeetCode试题 LeetCode常见试题 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lanyu_01/article/details/81062232 这篇文章

python面试的315题

copy自武sir的博客,如有疑问请联系武sir 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? Python解释器种类以及特点? 位和字节的关系? b.B.KB.MB.GB 的关系? 请至少列举5个 PEP8 规范(越多越好). 通过代码实现如下转换: 二进制转换成十进制:v = “0b1111011”?十进制转换成二进制:v = 18? 八进制

python练习集100题(1-20)

题目1:有1.2.3.4四个数,能组成多少个互不相同且无重复的三位数?都是多少? list_num=[1,2,3,4] all_num=[] for i in list_num:     for j in list_num:         for k in list_num :             if (i!=j) and (i!=k) and (j!=k):                 num=i*100+j*10+k                 all_num.append(

python自测100题,来看看你和月薪3万的差距(含答案)

-------------人生苦短,必须性感! 1.为什么学习Python? 人生苦短?人间不值得?想想自己的初心吧! 2.通过什么途径学习的Python? 官网.网上视频.学习网站.论坛.大牛的辅导 3.Python和Java.PHP.C.C#.C++等其他语言的对比? (1).python代码,简介,明确,优雅,简单易懂(2).开发效率高(3).可扩展性强 4.简述解释型和编译型编程语言? 解释型:在执行程序时,计算机才一条一条的将代码解释成机器语言给计算机来执行编译型:是把源程序的每一条语

python练习集100题(21-40)

题目21:两个乒乓球队进行比赛,各出3人.甲队为a,b,c三人,乙队为x,y,z三人.以抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x.z比,请编程找出三队比赛名单. first_list=['x','y','z'] for i in first_list:        #i是a的对手,j是b的对手,k是c的对手     for j in first_list:         if(j!=i):                        for k in fir