首页 > 编程语言 >Python高级编程

Python高级编程

时间:2023-12-01 22:12:35浏览次数:41  
标签:__ 函数 Python self 编程 高级 type def

一、Python一切皆对象

1、函数的返回值

​ 在Python开发当中,编写一个函数即便不写return关键字,Python也会隐式添加上return None。通过print打印函数只会得到一个None的结果,在Python中函数和类也是可以赋值给一个变量的。函数可以接受的的返回值有:列表、元组、字符串、整数、字典、函数、类等。当然在Python最自由的还是可以返回一个函数或者类,通过打印得到输出的一个地址:<function outer at 0x000001F72BAD3CA0>。代表当前变量接收的一个函数地址。通过变量名加上('返回的函数有参数注意要添加参数')括号调用返回的函数,Python中类也是同理,得到对象<class 'main.Person'>。

def outer(name):
    print(name)
    return 1

class Person:
    def __init__(self,x,y) -> None:
        self.x = x
        self.y = y
        
    def sum(self, data):
        print(data)
        print(self.x + self.y)

 
def decorator_func():
    print('start...') 
    return Person #返回的是一个类对象<class '____main____.Person'>
    return outer #返回一个函数<function outer at 0x000001F72BAD3CA0>
    return max #在python中也可以返回内置函数,<built-in function max>

my_object = decorator_func()
my_object(3, 4).sum('调用sum方法') #调用类实例
my_object(name:'有参数必须加上参数,有约束加上约束的参数类型') #调用函数
# print(decorator_func())
print(my_func)

#输出结果:
"""
start...
调用sum方法
7
<class '__main__.Person'>
"""

2、函数的参数传递

​ 在Python中函数可以作为另外一个函数的参数进行传参。同时这个也是装饰器所用到的必要操作之一,装饰器通过装饰函数可以对该装饰的函数添加新的方法。装饰器:通过一个装饰器类或者一个装饰器函数对被装饰的函数或者类进行装饰,为其添加新的方法。

def a():
    print('a函数的输出')

def b(func):
    print('b函数的输出')
    return func

c = b(a) #将a函数对象当成b的参数
c() #调用a函数
# 输出结果
"""
>>>b函数的输出
>>>a函数的输出
"""

3、dir内置函数

​ 在Python开发中,不管是初学者还是精通Python开发的都不能保证能够记住其所有的方法,这个时候Python内置的dir()函数就非常有用了,使用 dir()函数可以查看对象内的所有的属性和方法。除了常用的方法之外,其他的你并不需要去记住他,交给dir()函数来帮你进行列举。如下:

dir([]) # 查看列表的所有方法
# >>>['__add__', '__class__', '__contains__', '__delattr__', ········]
dir(max) # 查看max函数的所有方法
# >>>['__call__', '__class__', '__delattr__', '__dir__', '__doc__',············]
# dir()里面的参数是你想要查看的Python对象,dir函数会帮你罗列该对象里面所有的方法,你并不需要完全记住这些方法名,通过dir函数可以帮你进行罗列。

4、type、object和class之间的关系

​ 在Python当中所有的类、对象、类型都是type创建的,通过type(类名)可以查看到结果是type创建的,type()函数除了可以查看对象的数据类型,还可以查看是谁创建的。还可以通过____bases____方法查看自己是继承自谁,Python中所有的类和类型都继承自object类,object是Python中所有类和类型的基类。在Python2.0版本可以在类后面写上(objects)代表继承,不加上则代表为经典类,差别就是类里面的方法增加或减少。在Python3.0以后不写(object)解释器会隐式添加上。Ps:简单来说就是Python中所有的类、类型、对象都是type创建的(包括object类),而所有的类和类型都是继承自object类(包括type方法)。

class Person: # class只是声明了一个类,创建还是type创建的
    pass

type(Person)
Person.__class__ # 一样是查看当前对象时谁创建的
# >>> type
type(int) # >>> type
type(str) # >>> type
type(list) # >>> type
type(type) # >>> type type也是其自身创建的

Person.__bases__ # >>> (object,)
int.__bases__ # >>> (object,)
type.__bases__ # >>>(object,) 当然type本身也是继承自object类
# 对象的三个特征:身份(内存id)、类型、值。

5、鸭子类型(多态)

鸭子类型:多个类实现了同一个方法(方法名称相同),只关注方法名不关注方法的具体实现方式,只看当前方法的名称是否相等被称为鸭子类型(可以不继承父类)。多态:在面向对象编程思想中分别有三个概念,封装、继承、多态。其中Python中多态指的是类继承父类使用同一种方法产生的结果不同,称之为多态。两个要点(1)继承:多态必须发生在父类与子类之间。(2)重写:子类重写父类方法

# 在鸭子类型中,关注点在于对象的行为,即提供的方法,而不在于对象所属的类型。
class Duck:
    def walk(self):
        print('I walk like a duck')
    def swim(self):
        print('i swim like a duck')

class Person:
    def walk(self):
        print('this one walk like a person') 
    def swim(self):
        print('this man swim like a Person')

6、Python抽象类

(1)抽象基类不能实例化(2)抽象基类必须重载内部方法。抽象基类主要场景是类型判断、限制用户继承抽象基类必须按照规则使用内置的接口(方法)。没有Python高端开发能力尽量不去使用,约束过多导致代码规则繁乱。一般使用多继承方法。

import abc

class CacheBase(metaclass=abc.ABCMeta):  # 定义一个抽象基类
    @abc.abstractmethod # 限制使用者按照规则继承
    def get(self, key):
        pass
    @abc.abstractmethod
    def set(self ,key, value):
        pass

class RedisCache(CacheBase):    
    def get(self, key): 
        pass
    def set(self, key, value):
        pass
    
redis_cache = RedisCache() # 没定义get和set方法实例化将会报错

标签:__,函数,Python,self,编程,高级,type,def
From: https://www.cnblogs.com/cloud07/p/17870955.html

相关文章

  • python网站创建009:注释和代码存放位置
    html的注释<!--这是html的注释-->css的注释/*这是css的注释*/javascript的注释//这是js的单行注释/*这是js的多行注释*/ css代码的存放位置:是实际项目中,css代码可以放在html的head中,如下: 也可以将css代码存放到别的文件中,如下: javascript代码的存放位置:js......
  • 无涯教程-Python - 图形数据(Graph)
    CSGraph代表压缩稀疏图,其重点是基于稀疏矩阵表示的快速图算法。稀疏图图只是节点的集合,节点之间具有链接,图几乎可以代表任何事物-社交网络连接,其中每个节点都是一个人,并与熟人相连;图像,其中每个节点是一个像素,并连接到相邻像素;高维分布中的点,其中每个节点都连接到其最近的邻居,并......
  • C++入门:掌握基本语法和面向对象编程
    C++入门:掌握基本语法和面向对象编程C++是一种通用的、高级的编程语言,广泛应用于开发各种应用程序。对于初学者来说,掌握C++的基本语法和面向对象编程是一个重要的起点。本篇博客将介绍C++的基本语法和面向对象编程的基本概念。了解C++的基本语法注释在C++中,你可以使用两种方式添加注......
  • ByteBuddy字节码编程学习(场景、增强方式、类加载器策略、实践)
    (目录)ByteBuddy介绍ByteBuddy是一个代码生成和操作库,用于在Java应用程序运行时创建和修改Java类,而无需编译器的帮助。除了Java类库附带的代码生成实用程序外,ByteBuddy还允许创建任意类,并且不限于实现用于创建运行时代理的接口。此外,ByteBuddy提供了一种方便的AP......
  • python网站创建008:初始JavaScript
    JavaScript:是一门可以操作html标签的一门语言。可以实现类似“弹框”的功能 实现需求:假如我想在一个输入框内输入“helloworld”,点击某个按钮,然后在“弹框”上显示出“helloworld”,这该怎么做呢? 1.首先将“输入框”和“点击”按钮写出来,如下:<!DOCTYPEhtml><html><he......
  • 无涯教程-Python - 正态分布
    正态分布是通过排列数据中每个值的概率分布来呈现数据的形式,大多数值保持在平均值附近,从而使排列对称。无涯教程在numpy库中使用各种函数来数学计算正态分布的值。将创建直方图,在该直方图上绘制概率分布曲线。importmatplotlib.pyplotaspltimportnumpyasnpmu,sigma=0......
  • 无涯教程-Python - 中心趋势
    数学上的中心趋势是指测量数据集值的中心或位置分布,它给出了数据集中数据平均值的概念,并指出了这些值在数据集中分布的范围。反过来,这有助于评估将新输入拟合到现有数据集中的机会,从而评估成功的可能性。可以使用pandaspython库中的方法计算出集中趋势的三个主要量度。均值(Me......
  • 小市值选股策略代码分享(附python源码)
    小市值选股策略的核心在于通过综合分析公司的基本面、行业定位、财务健康状况以及市场趋势,来寻找那些被市场低估但具备显著成长潜力的股票,同时也要重视风险管理和投资组合的多样化。 今天来给大家分享下小市值策略代码如下:#显式导入BigQuant相关SDK模块frombigdatas......
  • 无涯教程-Python - 时间序列(Time)
    时间序列(TimeSeries)是一系列数据点,其中每个数据点都与时间戳关联,一个简单的示例是在给定的一天中,股票在不同时间点的价格,另一个示例是该地区一年中不同月份的降雨量。在下面的示例中,无涯教程以特定股票代码每天四分之一的股价价格为示例,将这些值捕获为一个csv文件,然后使用pan......
  • ESP32简单实现新版HC-SR04超声波模块(MicroPython+Thonny)
    一、新版HC-SR04简介新版HC-SR04,性能远超老版HC-SR04,US-015;在测距精度高于老版HC-SR04和US-015的情况下,测距范围更远,可达6米,远超一般超声波测距模块。采用CS-100A超声波测距SOC芯片,高性能,工业级,宽电压、低价格,成本击穿底价,只有普通超声波测距模块一半的价格,而性能远超普通超声波......