设为首页 加入收藏

TOP

Python3 编程面试题(一)
2023-07-25 21:27:54 】 浏览:42
Tags:Python3 程面试

Python global 语句的作用

在编写程序的时候,如果想要改变(重新赋值)函数外部的变量,并且这个变量会作用于许多函数中,就需要告诉 Python 程序这个变量的作用域是全局变量,global 语句可以实现定义全局变量的作用。

lambda 匿名函数好处

精简代码,lambda省去了定义函数,map 省去了写 for 循环过程:

str_1 = ["中国", "美国", "法国", "", "", "英国"]
res = list(map(lambda x: "填充值" if x=="" else x, str_1))
print(res)  # ['中国', '美国', '法国', '填充值', '填充值', '英国']

Python 错误处理

和其他高级语言一样,Python 也内置了一套try...except...finally... 的错误处理机制。

当我们认为某些代码可能会出错时,就可以用 try 来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至跳转至错误处理代码,即 except 语句块,执行完 except 后,如果有 finally 语句块,则执行。至此,执行完毕。跳转至错误处理代码,

Python 内置错误类型

  • IOError:输入输出异常
  • AttributeError:试图访问一个对象没有的属性
  • ImportError:无法引入模块或包,基本是路径问题
  • IndentationError:语法错误,代码没有正确的对齐
  • IndexError:下标索引超出序列边界
  • KeyError: 试图访问你字典里不存在的键
  • SyntaxError: Python 代码逻辑语法出错,不能执行
  • NameError: 使用一个还未赋予对象的变量

简述 any() 和 all() 方法

  • any(): 只要迭代器中有一个元素为真就为真;
  • all(): 迭代器中所有的判断项返回都是真,结果才为真.

Python 中什么元素为假?

答案:(0,空字符串,空列表、空字典、空元组、None, False)

提高 Python 运行效率的方法

  1. 使用生成器,因为可以节约大量内存;
  2. 循环代码优化,避免过多重复代码的执行;
  3. 核心模块用 Cython PyPy 等,提高效率;
  4. 多进程、多线程、协程;
  5. 多个 if elif 条件判断,可以把最有可能先发生的条件放到前面写,这样可以减少程序判断的次数,提高效率。

Python 单例模式

为什么 Python 不提供函数重载

参考知乎为什么 Python 不支持函数重载?其他函数大部分都支持的?

我们知道 函数重载 主要是为了解决两个问题。

  1. 可变参数类型。
  2. 可变参数个数。

另外,一个函数重载基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。

  1. 对于情况 1 ,函数功能相同,但是参数类型不同,Python 如何处理?答案是根本不需要处理,因为 Python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 Python 中很可能是相同的代码,没有必要做成两个不同函数。
  2. 对于情况 2 ,函数功能相同,但参数个数不同,Python 如何处理?大家知道,答案就是缺省参数(默认参数)。对那些缺少的参数设定为缺省参数(默认参数)即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。所以,鉴于情况 1 跟 情况 2 都有了解决方案,Python 自然就不需要函数重载了。

实例方法/静态方法/类方法

Python 类语法中有三种方法,实例方法,静态方法,类方法,它们的区别如下:

  • 实例方法只能被实例对象调用,静态方法(由 @staticmethod 装饰器来声明)、类方法(由 @classmethod 装饰器来声明),可以被类或类的实例对象调用;
  • 实例方法,第一个参数必须要默认传实例对象,一般习惯用self。静态方法,参数没有要求。类方法,第一个参数必须要默认传类,一般习惯用 cls .

实例代码如下:

class Foo(object):
    """类三种方法语法形式
    """
    def instance_method(self):
        print("是类{}的实例方法,只能被实例对象调用".format(Foo))

    @staticmethod
    def static_method():
        print("是静态方法")

    @classmethod
    def class_method(cls):
        print("是类方法")


foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('##############')
Foo.static_method()
Foo.class_method()

程序执行后输出如下:

是类 <class 'main.Foo'> 的实例方法,只能被实例对象调用
是静态方法
是类方法
##############
是静态方法
是类方法

__new__和 __init __方法的区别

  • __init__ 方法并不是真正意义上的构造函数, __new__ 方法才是(类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行);
  • __new__ 方法用于创建对象并返回对象,当返回对象时会自动调用 __init__ 方法进行初始化, __new__ 方法比 __init__ 方法更早执行;
  • __new__ 方法是静态方法,而 __init__实例方法

Python 的函数参数传递

参考这两个链接,stackoverflow的最高赞那个讲得很详细
How do I pass a variable by reference?
Python 面试题

个人总结(有点不好):

  • 将可变对象:列表list、字典dict、NumPy数组ndarray和用户定义的类型(类),作为参数传递给函数,函数内部将其改变后,函数外部这个变量也会改变(对变量进行重新赋值除外 rebind the reference in the method
  • 将不可变对象:字符串string、元组tuple、数值numbers,作为参数传递给函数,函数内部将其改变后,函数外部这个变量不会改变
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python函数的参数 下一篇软工综合实践课设——员工招聘系..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目