python面试的100题(18)

函数

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

列表推导式书写形式:  html

[表达式 for 变量 in 列表]    python

或者  git

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

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

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

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

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

(3) readlines() : 读取文件的全部行,把读取的每一行做为一个元素放在一个列表中,返回的是一个列表对象。数据结构

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

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个原则

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

四、一个函数只作一件事,就要尽可能保证抽象层级的一致性,全部语句尽可能在一个粒度上。若在一个函数中处理多件事,不利于代码的重用。

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

相关文章
相关标签/搜索