最全BATPython⾯试题及答案 最全BATPython⾯试题及答案 Python语⾔特性 1 Python的函数参数传递 看两个如下例⼦,分析运⾏结果: 代码⼀: a = 1 def fun(a): a = 2 fun(a) print(a) # 1 代码⼆: a = [] def fun(a): a.append(1) fun(a) print(a) # [1] 所有的变量都可以理解是内存中⼀个对象的"引⽤",或者,也可以看似c中void*的感觉。 这⾥记住的是类型是属于对象的,⽽不是变量。⽽对 象有两种,"可更改"(mutable)与"不可更改"(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,⽽ list,dict等则是可以修改的对象。(这就是这个问题的重点) 当⼀个引⽤传递给函数的时候,函数⾃动复制⼀份引⽤,这个函数⾥的引⽤和外边的引⽤没 有半⽑关系了.所以第⼀个例⼦⾥函数把引⽤指向了⼀个不可变对象,当函数返回的时候,外⾯的引⽤没半⽑感觉.⽽第⼆个例⼦就不⼀样了,函数内的 引⽤指向的是可变对象,对它的操作就和定 【Python的函数参数传递】 在Python中,函数参数的传递机制是基于引用的。当我们传递一个变量给函数时,实际上是传递了该变量所指向对象的一个引用。这意味着,如果对象是不可变的(如字符串、元组和数字),函数内部对该对象的任何修改都不会影响到外部的变量。例如,在代码一中,`a`是一个整数,是不可变对象,当函数`fun(a)`执行`a = 2`时,实际上是在函数内部创建了一个新的整数对象并让`a`引用它,而外部的`a`仍然保持对原来的1的引用,所以`print(a)`依然输出1。 然而,如果对象是可变的(如列表、字典),情况就不同了。在代码二中,`a`是一个列表,是可变对象。当调用`fun(a)`并执行`a.append(1)`时,函数内部对列表的修改会直接影响到外部的`a`,因为它们都引用了同一个列表对象。所以`print(a)`会输出包含1的列表`[1]`。 【Python中的元类(metaclass)】 元类在Python中是一种高级概念,它用来创建类的类。通常,我们创建类是为了实例化对象,而元类则用于创建这些类本身。元类允许我们自定义类的行为,比如在类创建时进行特殊处理。元类的应用场景较为特殊,不常见于常规编程,但在设计框架或扩展Python语言特性时可能会用到。 【@staticmethod和@classmethod】 在Python中,有三种方法类型:实例方法、类方法和静态方法。实例方法需要一个隐含的`self`参数,它指向调用方法的实例;类方法需要一个`cls`参数,它指向调用方法的类。静态方法与普通函数相似,不绑定任何特定的实例或类,可以直接通过类或实例调用。 - 实例方法:通过`self`参数与实例关联,如`a.foo(x)`。 - 类方法:通过`cls`参数与类关联,如`A.class_foo(x)`。 - 静态方法:不绑定实例或类,可以直接调用,如`a.static_foo(x)`或`A.static_foo(x)`。 【类变量和实例变量】 类变量是属于类的,可供所有实例共享,而实例变量是属于每个实例自己的。当我们通过实例修改类变量时,如果直接赋值(如`p1.name="bbb"`),实际上是在实例的作用域内创建了一个新的实例变量,覆盖了对类变量的引用。如果类变量是可变的(如列表),那么对实例的类变量进行修改(如`p1.name.append(1)`),会影响到其他实例,因为它们都共享同一个列表对象。 【Python的自省能力】 Python具有强大的自省能力,允许我们在运行时检查对象的类型、属性和方法。常见的自省函数有`type()`、`dir()`、`getattr()`、`hasattr()`和`isinstance()`。例如,`type(obj)`可以返回对象的类型,`dir(obj)`列出对象的所有属性和方法,`hasattr(obj, 'attr')`判断对象是否具有某个属性,`getattr(obj, 'attr')`获取属性的值,`isinstance(obj, Class)`检查对象是否为指定类的实例或其子类。 【字典推导式】 字典推导式是Python 2.7及更高版本中引入的特性,它类似于列表推导,但用于创建字典。例如,`d = {k: v for k, v in iterable}`,这个表达式会遍历可迭代对象`iterable`,并为每一对`(k, v)`生成一个键值对,构建出一个新的字典。 以上是对题目中提到的Python知识点的详细解释,涵盖了函数参数传递、元类、方法类型、类变量和实例变量以及Python的自省能力和字典推导式。这些内容是Python编程中基础且重要的知识点,理解它们对于深入学习Python和应对面试至关重要。
剩余39页未读,继续阅读
- 粉丝: 106
- 资源: 9354
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#ASP.NET幼儿园网站源码 前台+后台数据库 SQL2008源码类型 WebForm
- 这是一个用于IP和域名碰撞匹配访问的小工具优化版,能减少碰撞中出来的误报,旨意用来匹配出渗透过程中需要绑定hosts才能访问的弱主机或内部系统 .zip
- C#ASP.NET设备管理系统源码带文档+视频数据库 SQL2008源码类型 WebForm
- 电梯扶梯跌倒行为检测数据集VOC+YOLO格式1529张3类别.zip
- 自动化撰写渗透报告.zip
- 酒精检测游戏适用游戏游戏游戏游戏
- springboot设计-基于Spring Boot的员工管理信息系统设计方案
- asdasdasdafaff
- C#实现的ACCESS的增删改查
- mysql数据库项目-MySQL数据库设计与实现-图书管理系统的实例详解