iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 关于高级特性的问题
  • 793
分享到

python 关于高级特性的问题

特性高级python 2023-01-31 05:01:34 793人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

  1.函数装饰器有什么作用?请列举说明?  2. python 垃圾回收机制?  3. 魔法函数 _call_怎么使用?  4. 如何判断一个对象是函数还是方法?  5. @claSSMethod 和 @staticmethod 用法和区

  1.函数装饰器有什么作用?请列举说明?

  2. python 垃圾回收机制?

  3. 魔法函数 _call_怎么使用?

  4. 如何判断一个对象是函数还是方法?

  5. @claSSMethod 和 @staticmethod 用法和区别

  6. Python 中的接口如何实现?

  7. Python 中的反射了解么?

  8. metaclass 作用?以及应用场景?

  9. hasattr()、getattr()、setattr() 的用法

  10. 请列举你知道的 Python 的魔法方法及用途。

  11. 如何知道一个 Python 对象的类型?

  12. Python 的传参是传值还是传址?

  13. Python 中的元类 (metaclass) 使用举例

  14. 简述 any() 和 all() 方法

  15. filter 方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

  16. 什么是猴子补丁?

  17. 在 Python 中是如何管理内存的?

  18. 当退出 Python 时是否释放所有内存分配?

  1.函数装饰器有什么作用?请列举说明?

  答: 装饰器就是一个函数,它可以在不需要做任何代码变动的前提下给一个函数增加额外功能,启动装饰的效果。 它经常用于有切面需求的场景,比如:插入日志性能测试事务处理、缓存、权限校验等场景。 下面是一个日志功能的装饰器

  from functools import wraps

  def log(label):

  def decorate(func):

  @wraps(func)

  def _wrap(*args,**kwargs):

  try:

  func(*args,**kwargs)

  print("name",func.__name__)

  except Exception as e:

  print(e.args)

  return _wrap

  return decorate

  @log("info")

  def foo(a,b,c):

  print(a+b+c)

  print("in foo")

  #decorate=decorate(foo)

  if __name__ == '__main__':

  foo(1,2,3)

  #decorate()

  2.Python 垃圾回收机制?

  答:Python 不像 c++,Java 等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值。对 Python 语言来讲,对象的类型和内存都是在运行时确定的。这也是为什么我们称 Python 语言为动态类型的原因。

  主要体现在下面三个方法:

  1.引用计数机制 2.标记-清除 3.分代回收

  3.魔法函数 _call_怎么使用?

  答: call 可以把类实例当做函数调用。 使用示例如下

  class Bar:

  def __call__(self, *args, **kwargs):

  print('in call')

  if __name__ == '__main__':

  b = Bar()

  b()

  4.如何判断一个对象是函数还是方法?

  答:看代码及结果就懂了

  from types import MethodType, FunctionType

  class Bar:

  def foo(self):

  pass

  def foo2():

  pass

  def run():

  print("foo 是函数", isinstance(Bar().foo, FunctionType))

  print("foo 是方法", isinstance(Bar().foo, MethodType))

  print("foo2 是函数", isinstance(foo2, FunctionType))

  print("foo2 是方法", isinstance(foo2, MethodType))

  if __name__ == '__main__':

  run()

  输出:

  foo 是函数 False

  foo 是方法 True

  foo2 是函数 True

  foo2 是方法 False

  5.@classmethod 和 @staticmethod 用法和区别

  答:

  相同之处:@staticmethod 和@classmethod 都可以直接类名.方法名()来调用,不用在示例化一个类。

  @classmethod 我们要写一个只在类中运行而不在实例中运行的方法。如果我们想让方法不在实例中运行,可以这么做:

  def iget_no_of_instance(ins_obj):

  return ins_obj.__class__.no_inst

  class Kls(object):

  no_inst = 0

  def __init__(self):

  Kls.no_inst = Kls.no_inst + 1

  ik1 = Kls()

  ik2 = Kls()

  print(iget_no_of_instance(ik1))

  @staticmethod 经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法:

  IND = 'ON'

  class Kls(object):

  def __init__(self, data):

  self.data = data

  @staticmethod

  def check_ind():

  return (IND == 'ON')

  def do_reset(self):

  if self.check_ind():

  print('Reset done for:', self.data)

  def set_db(self):

  if self.check_ind():

  self.db = 'New db connection'

  print('DB connection made for: ', self.data)

  ik1 = Kls(12)

  ik1.do_reset()

  ik1.set_db()

  6.Python 中的接口如何实现?

  答:

  接口提取了一群类共同的函数,可以把接口当做一个函数的集合,然后让子类去实现接口中的函数。但是在 Python 中根本就没有一个叫做 interface 的关键字,如果非要去模仿接口的概念,可以使用抽象类来实现。抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。使用 abc 模块来实现抽象类。

  7.Python 中的反射了解么?

  答:Python 的反射机制设定较为简单,一共有四个关键函数分别是 getattr、hasattr、setattr、delattr。

  8.metaclass 作用?以及应用场景?

  答:

  metaclass 即元类,metaclass 是类似创建类的模板,所有的类都是通过他来 create 的(调用new),这使得你可以自由的控制创建类的那个过程,实现你所需要的功能。 我们可以使用元类创建单例模式和实现 ORM 模式。

  9.hasattr()、getattr()、setattr() 的用法

  答:无锡妇科医院排行 Http://www.0510bhyy.com/

  这三个方法属于 Python 的反射机制里面的,hasattr 可以判断一个对象是否含有某个属性,getattr 可以充当 get 获取对象属性的作用。而 setattr 可以充当 person.name = "liming"的赋值操作。代码示例如下:

  class Person():

  def __init__(self):

  self.name = "liming"

  self.age = 12

  def show(self):

  print(self.name)

  print(self.age)

  def set_name(self):

  setattr(Person, "sex", "男")

  def get_name(self):

  print(getattr(self, "name"))

  print(getattr(self, "age"))

  print(getattr(self, "sex"))

  def run():

  if hasattr(Person, "show"):

  print("判断 Person 类是否含有 show 方法")

  Person().set_name()

  Person().get_name()

  if __name__ == '__main__':

  run()

  10.请列举你知道的 Python 的魔法方法及用途。

  答:

  1 __init__:

  类的初始化方法。它获取任何传给构造器的参数(比如我们调用 x = SomeClass(10, ‘foo’) , __init__就会接到参数 10 和 ‘foo’ 。 __init__在 Python 的类定义中用的最多。

  2 __new__:

  __new__是对象实例化时第一个调用的方法,它只取下 cls 参数,并把其他参数传给 __init__ 。 __new__很少使用,但是也有它适合的场景,尤其是当类继承自一个像元组或者字符串这样不经常改变的类型的时候.

  3 __del__:

  __new__和 __init__是对象的构造器, __del__是对象的销毁器。它并非实现了语句 del x (因此该语

  11.如何知道一个 Python 对象的类型?

  答:

  可以通过 type 方法

  12.Python 的传参是传值还是传址?

  答:

  Python 中的传参即不是传值也不是传地址,传的是对象的引用。

  13.Python 中的元类 (metaclass) 使用举例

  答:

  可以使用元类实现一个单例模式,代码如下:

  class Singleton(type):

  def __init__(self, *args, **kwargs):

  print("in __init__")

  self.__instance = None

  super(Singleton, self).__init__(*args, **kwargs)

  def __call__(self, *args, **kwargs):

  print("in __call__")

  if self.__instance is None:

  self.__instance = super(Singleton, self).__call__(*args, **kwargs)

  return self.__instance

  class Foo(metaclass=Singleton):

  pass # 在代码执行到这里的时候,元类中的__new__方法和__init__方法其实已经被执行了,而不是在 Foo 实例化的时候执行。且仅会执行一次。

  foo1 = Foo()

  foo2 = Foo()

  print(foo1 is foo2)

  14.简述 any() 和 all() 方法

  答: any(x):判断 x 对象是否为空对象,如果都为空、0、false,则返回 false,如果不都为空、0、false,则返回 true。 all(x):如果 all(x) 参数 x 对象的所有元素不为 0、’’、False 或者 x 为空对象,则返回 True,否则返回 False。


--结束END--

本文标题: python 关于高级特性的问题

本文链接: https://www.lsjlt.com/news/188554.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 关于高级特性的问题
      1.函数装饰器有什么作用请列举说明  2. Python 垃圾回收机制  3. 魔法函数 _call_怎么使用  4. 如何判断一个对象是函数还是方法  5. @classmethod 和 @staticmethod 用法和区别  6....
    99+
    2023-01-31
    特性 高级 python
  • 详解python关于多级包之间的引用问题
    首先得明确包和模块。 包:在一个目录下存在__init__.py,那么该目录就是一个包。 模块:一个.py文件就是一个模块。 我们可以通过from 包 import 模块来引入python文件,...
    99+
    2022-06-02
    python 多级包引用 python 多级包
  • 关于bootstrap.yml和bootstrap.properties的优先级问题
    目录bootstrap.yml和bootstrap.properties优先级问题bootstrap.yml跟application.yml加载顺序bootstrap.yml和boo...
    99+
    2022-11-13
  • 关于R语言包的升级与降级问题
    R语言包的升级与降级 这篇博客只是记录一下在使用偏最小二乘判别分析时遇到的一些问题: 暑期实习期间曾自行使用R语言caret包进行机器学习某些方法的训练,在训练过程中需要对某些包进行...
    99+
    2022-11-13
    R语言包 R语言包升级 R语言包降级
  • 关于vue3使用particles粒子特效的问题
    目录第一步:引入 particles.js第二步:找到 node_modules 内的 particles.js第三步:项目 components 下创建 particles 目录第...
    99+
    2022-11-13
  • 关于python中.xpath的使用问题
    在python中使用xpath定位时,有时候会先用.xpath定位到一个地点,for循环后,继续使用.xpath,但是会出现问题,比如在下面这个例子中:    根...
    99+
    2022-11-12
  • 关于Python的主(main)函数问题
      初次接触Python的人会很不习惯Python没有main主函数。 这里简单的介绍一下,在Python中使用main函数的方法 #hello....
    99+
    2023-01-31
    函数 Python main
  • 关于python中range()的参数问题
    目录range()的参数问题当参数只有一个时range(n)当参数有两个时range(x,y)当参数有三个时range(i,j,k)range(1,2)函数只有两个参数时语法rang...
    99+
    2022-11-11
  • 关于python中pika模块的问题
    工作中经常用到rabbitmq,而用的语言主要是python,所以也就经常会用到python中的pika模块,但是这个模块的使用,也给我带了很多问题,这里整理一下关于这个模块我在使用过程的改变历程已经中间碰到一些问题 的解决方法 刚开写代...
    99+
    2023-01-30
    模块 python pika
  • 关于云服务器的升级配置问题
    云服务器是一种虚拟化软件,允许企业将数据存储在云服务器上,并根据需要随时扩展或缩减规模。在进行任何云服务器升级或配置时,可能会涉及到不同的软件、硬件和操作系统,因此应该在购买之前进行详细的需求评估和配置。下面是一些需要考虑的因素: 存储...
    99+
    2023-10-26
    服务器 于云
  • python中关于for else的特殊特性举例分析
    本篇内容主要讲解“python中关于for else的特殊特性举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中关于for else的特殊特性举例分析”吧!不管我们使用哪种编程...
    99+
    2023-06-25
  • 关于mysql8.x中insertignore的性能问题
    目录mysql 8.x中insert ignore性能问题mysql insert ignore()函数INSERT IGNORE语句mysql 8.x中insert ignore性...
    99+
    2022-11-13
  • 关于Python的pymouse click 双击的问题
    Python pymouse click 双击 m.click是双击 想让点击一次 最后就用下面任意一个。。。 按下:m.press(x,y) 松开:m.release(x,y) Python学习笔记|python之...
    99+
    2022-06-02
    Python pymouse click双击
  • 关于python安装lxml插件的问题
      文章只是介绍自己安装时从安装不上到安装后报错,再到安装成功的心路历程,并不代表广大欧皇也会会出现同类型的问题,也不是总结和汇总各种出问题的原因. 直接进入正题,首先我这边是win环境,电脑上装的是python3.8和anaconda(...
    99+
    2023-01-31
    插件 python lxml
  • 关于将WebSphere Portal5.1.0.2升级到6.0版本的问题。
    前一阵子有人在网上询如何将WebSphere Portal5.1.0.2升级到6.0版本,经过研究得到以下结论:portal5.1.0.2升级到6.0版本还是比较麻烦的。可能会涉及到您Schema页面的重新调试和开发,您自己开发的Portl...
    99+
    2023-06-03
  • python入门学习关于for else的特殊特性讲解
    目录For-Else 特性的基础知识使用 For-Else 特性的三个场景1. 迭代并查找没有标志变量的项2. 帮助打破嵌套循环3. 帮助处理异常总结不管我们使用哪种编程语言,我们都...
    99+
    2022-11-12
  • 关于SpringCloud本地属性覆盖的问题
    目录SpringCloud本地属性覆盖优先级如下官方给出了解决方案如下SpringCloudConfig本地配置覆盖远程配置SpringCloudConfig配置的优先级Spring...
    99+
    2022-11-13
  • 关于Python的高级数据结构与算法
    目录一、简介二、栈(Stack)三、队列(Queue)四、堆(Heap)五、排序算法(Sorting Algorithms)1. 冒泡排序(Bubble Sort)2. 选择排序(S...
    99+
    2023-05-14
    Python高级数据结构 Python算法
  • 关于layui+php,三级联动-编辑回显的问题。
    注 忍不住吐槽一波。都什么年代了。现在都前后端分离,但是公司老项目非得用tp+layui。。 代码如下 layui.use(['form'], function () { var ...
    99+
    2023-10-02
    layui php
  • Python 关于面向对象的六个问题
    本文写给初学 Python 的朋友,试图讲明白以下问题:什么是类和对象即然有了函数,为什么还要有类Python 如何定义 公有/保护/私有 属性/方法私有是否是真正的私有,这样做的目的是什么如何定义类函数、成员函数、静态函数,他们的作用分别...
    99+
    2023-05-14
    Python 编程 映射
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作