Python一看就懂系列(四)

图片

专栏: python轻奢入门系列

作者: 豆破苍琼


【函数】

基本知识

定义

函数可以理解为创建一个具有某种用途的工具。使用def关键字来实现。

调用

def introduce():
    name = input("What's your name?")
    print("Hello,my name is {}".format(name))
introduce()

注意:
每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用的结束。当然如果函数执行到return处也会自行结束。

函数的参数

定义函数:

当定义函数时,小括号中的参数,是用来接收数据的,我们称之为"形参"。

调用函数:

当调用函数时小括号中的参数,是用来传递给函数参数的,我们称之为"实参"。

调用函数:

位置参数

位置参数就是咱们目前接触的传参方式,定义函数时设置两个形参,那么在函数调用时候就需要传入两个实参,如果传入数量不相同则会报错。

# 位置参数
def introduce(name):
    print("Hello,my name is {}".format(name))
def ask():
    name = input("What's your name?")
    while len(name)==0:
        name = input("What's your name?")
    introduce(name)
ask()
关键字参数

关键字参数为位置参数类似,不过在调用函数时候进行传参时有一定的区别。

def add(a,b):
    print("{} + {} = {}".format(a,b,a+b))
    
add(a=2,b=4)
不定长位置参数

这个不定长位置参数,只需要为函数设置一个不定长的位置参数,就可以接受多个值。设置方式是一个*号加上一个参数的名称,参数名称任意。

def playgame(*game):
    print(game)
playgame('绝地求生','王者荣耀','地下城')
def playgame(*game,xGame='地下城2'):
    for i in game:
        print(i)
    print(xGame)
playgame('绝地求生','王者荣耀','地下城')
不定长关键字参数

不定长关键字参数与不定长位置参数类似,同样都是设置一个参数就可以接收多个数据。但是在写法上存在一定的区别。

观察函数的输出就能够发现传入的参数以关键字参数的方式进行传值的。调用函数运行之后,输出的结果是一个字典。

一个星号的形参接收的数据之后是元组数据类型,两个星号的形参接收数据之后的数据类型是字典类型。

def playgame(**game):
    print("以不定长关键字传值方式:")
    for i in game.values():
        print(i)
playgame(QQ游戏='王者荣耀',微信游戏='跳一跳')
混合使用多方式参数

其实就是上面几种方式的组合。也没啥大不了的。

def sayHello(n1,*args,nx1='xb',nx2='xh',**kwargs):
    print('混合使用多方式参数:')
    print(n1,args,nx1,nx2,kwargs)
sayHello(1,2,3,4,nx1=2,mm=22,nn='a')

函数类型

  • 无参数、无返回值
  • 无参数,有返回值
  • 有参数,无返回值
  • 有参数,有返回值
  • 一个参数返回多个值

【面向对象】

面向对象和面向过程

面向对象

面向对象可以将整个任务封装成一个大的类,在这个类里面详细的分解每个步骤,我们只需要执行类就可以完成相应的任务。

面向过程

核心是过程,过程是解决问题的步骤,就好比一个流水线,是一种机械式的思维方式,优点是将复杂的问题流程化,进而简单化。缺点就是难以扩展。

定义类与方法

类是由三部分构成的。类名,类的属性,类的方法。

类的属性,可以在类的外面和里面对其进行赋值。

类中的魔法方法

魔法方法是指内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作时候被自动调用。

图片

  • __new__至少有一个参数cls,代表要实例化的类,此参数在实例化时由python解释器自动提供。它必须要有返回值,返回实例化出来的实例。
  • __init__方法就是在原有材料的基础上,加工,初始化商品的过程,而__new__方法就是前期的原材料的购买环节,return就是把原材料返回给自己本身,从而进行下一步操作。
  • __str__方法用来显示信息,此方法需要返回一个数据,并且只有一个self参数,当在类的外部print(实例对象名)则打印这个数据。
  • __del__方法是对象删除时候,默认调用的一种方式。
class Hero(object):
    """
        定义了一个英雄类,可以实施攻击和移动
    """
    def __init__(self,name,skill,hp,atk,armor):
        # 英雄名称
        self.name = name
        # 英雄技能
        self.skill = skill
        # 生命值
        self.hp = hp
        # 攻击力
        self.atk = atk
        # 护甲值
        self.armor = armor
    def __new__(cls):
        print(id(cls))
    def __del__(self):
        print("__del__ 方法被调用")
        print("%s 被 GM 干掉了..."%self.name)
    
    def move(self):
        print("%s 正在前往事发地点..."% self.name)
    
    def arrack(self):
        print("发出了一招强力的%s..."%self.skill)
    
    def __str__(self):
        """
        魔法方法,用来信息的显示
        """
        return "英雄 <%s> 数据:生命值 %d ,攻击力 %d , 护甲值 %d"%(self.name,self.hp,self.atk,self.armor)
print(id(Hero))
hero = Hero()

类方法与静态方法

类方法

在类方法中,可以通过@classmethod装饰器定义,其中方法的参数是cls,代表调用这个方法的类对象本身。

类方法可以被类对象和实例对象调用,而实例方法只能被实例对象调用。

静态方法

静态方法与类方法相似。静态方法也需要装饰器来进行装饰,而这个装饰器就是@staticmethod。经过staticmethod装饰的函数没有self和cls这两个参数。

一般静态方法主要用来存放逻辑性的代码,静态方法内部的操作一般不会涉及到类中的属性和实例方法的操作。

import time
class Student(object):
    currentTime = 0
    @staticmethod
    def showTime():
        return time.strftime("%H:%M:%S",time.localtime())
    @classmethod
    def getCurrentTime(cls):
        cls.currentTime = time.localtime()
        return cls.currentTime
    def __str__(self):
        self.getCurrentTime()
        return time.strftime("%H:%M:%S",self.currentTime)
#Student.getCurrentTime()
std = Student()
std.getCurrentTime()
print(std)

私有属性和方法

只需要在属性名和方法名前面加上两个下划线__,那么这个属性和方法就会变成私有的。其中,有三点需要注意:

1、类的私有属性和私有方法都不能通过对象直接访问,但是可以在本类内部访问。

2、类的私有属性和私有方法,都不会被子类继承,子类也无法访问。

3、私有属性和私有方法通常处理类内部的事情,不通过对象处理,起到安全作用。

class Hero():
    """
        定义了一个英雄类,可以实施攻击和移动
    """
    __weight = "180 kg" # 私有类属性
    
    def __init__(self,name,skill,hp,atk,armor):
        # 英雄名称
        self.name = name
        # 英雄技能
        self.skill = skill
        # 生命值
        self.hp = hp
        # 攻击力
        self.atk = atk
        # 私有实例属性
        self.__age = 35
        # 护甲值
        self.armor = armor
    def __del__(self):
        print("__del__ 方法被调用")
        print("%s 被 GM 干掉了..."%self.name)
    
    def move(self):
        print("%s 正在前往事发地点..."% self.name)
    
    def arrack(self):
        print("发出了一招强力的%s..."%self.skill)
    
    def __str__(self):
        """
        魔法方法,用来信息的显示
        """
        return "英雄 <%s> 数据:生命值 %d ,攻击力 %d , 护甲值 %d"%(self.name,self.hp,self.atk,self.armor)
    
    def __takeKongFu(self):
        print("<%s> 长枪一出! 什么花在手!..." % self.name)
    # 访问私有属性和方法
    def visit(self):
        print(self.__weight)
        print(self.__age)
        self.__takeKongFu()
    # 修改私有属性和方法
    def amend(self,weight,age):
        self.__weight = weight
        self.__age = age
        
hero = Hero("菊花","菊花茶",100,2200,4000)
hero.arrack()
hero.visit()
hero.amend("100 kg",60)
hero.visit()
print(hero)

面向对象的三大特性

封装

面向对象编程一个重要特点就是数据的封装。主要有以下优点:

1、我们可以通过函数来访问这些数据

2、可以给类增加新的方法

"""
面向对象的三大特性
"""
class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print('%s : %s'%(self.name,self.score))
    def get_score(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'
    
bboy = Student('楚怀王',"96")
bboy.print_score()

继承

使用继承的原因:

1、减少代码的冗余

2、功能的升级和扩展

单层继承、多层继承、多继承
class Animal:
    def eat(self):
        print("Eat...")
    def drink(self):
        print("Drink...")
    
class Dog(Animal):
    def bark(self):
        print("Barking...")
        
class HSQ(Dog):
    def __init__(self,name):
        self.__name = name
    def __str__(self):
        return "HSQ's name is %s"%(self.__name)
hsq = HSQ("大壮")
print(hsq)
hsq.eat()
hsq.bark()
# 查看类的继承链
HSQ.__mro__


class Father():
    def talk(self):
        print("哔哔哔")
class Mother():
    def smart(self):
        print("嘟嘟嘟")
class Child(Father,Mother):
    pass
child = Child()
child.talk()
child.smart()
调用被重写的方法、重写__init__

子类重写了父类的方法,但是仍然想执行父类中的方法,可以选择以下几种方式:

  • 父类名.方法名(self)
  • super(类名,self).方法名()
  • super().方法名 当前类的下一个类的方法

重写__init__可以定义不同的属性。

class Animal:
    def eat(self):
        print("Eat...")
    def drink(self):
        print("Drink...")
    
class Dog(Animal):
    def __init__(self):
        self.name ="哈士奇"
        self.age = 3
        self.color = "蛋黄色"
    def bark(self):
        print("Barking...")
        
class HSQ(Dog):
    def __init__(self,name):
        super(HSQ,self).__init__()
        self.__name = name
        self.color = "黑色" 
    def bark(self):
        super(HSQ,self).bark()
        print("Wa... i\'m special dog!'")
    def __str__(self):
        return "HSQ's name is %s,age is %d,color is %s"%(self.__name,self.age,self.color)
hsq = HSQ("大壮")
print(hsq)
hsq.eat()
hsq.bark()

多态

多态指一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。

在继承关系中,如果实例的数据类型是某个子类,那它的数据类型也可以被看作是父类,反过来就不行。

图片

判断方式用isinstance(实例,类名)对其进行判断。


【参考】

1.https://www.runoob.com/w3cnote/python-func-decorators.html

2.https://www.zhihu.com/question/26930016/answer/1047233982

3.https://www.jianshu.com/p/ee82b941772a

【Python爬虫】懂车帝_车型库页面 爬爬懂车帝... 阅读详情

相关推荐

一文学懂经典算法系列之:顺序查找(附讲解视频)

本文关键字:经典算法、查找算法、元素查找、顺序查找、算法实践。顺序查找也称线性查找,是最简单的查找方法。思路也很简单,从数组的一边开始,逐个进行元素的比较,如果与给定的待查找元素相同,则查找成功;如果整个扫描结束后,仍未找到相匹配的元素,则查找失败。......

微光点亮星辰 8783

怎样建设和培养懂战略懂技术懂业务懂产品的技术团队

怎样建设和培养懂战略、懂技术、懂业务、懂产品的技术团队 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 1. 背景介绍 1.1 问题的由来

AI天才研究院 1279

Python一看就懂系列(零)

专栏: python轻奢入门系列 作者:????豆破苍琼 【Python简介】 简介 python是一种简单、便捷、优雅、明确的胶水语言。 Python源码目录结构 Include: 这个目录包括了 Python 的所有头文件。 Lib:这里是 Python 标准库,都是用 Python 实现的。 Modules:用 C 语言编写的模块,比如 cStringIO / tkinter 高性能实现 Objects:Python 内建对象,如 int / list 的实现 Parser:Python 解释器

豆破苍琼 221

Python一看就懂系列(一)

专栏: python轻奢入门系列 作者: 豆破苍琼 【Python注释】 注释的引入 注释就是对代码的解释和说明,其目的就是为了让人们能够更加轻松的了解代码,提高代码的阅读性。 未注释 已注释 注释分类 单行注释 以#开头,#右边的所有内容都当做对代码的解释说明,而不是真正要执行的程序,起辅助说明的作用。 多行注释 【标识符和关键字】 标识符 引入 开发人员在程序中自定义的一些符号或者名称 标识符是程序员自己编写定义的,example: 变量名、函数名、类名等。 标识符的规则 标识符是.

豆破苍琼 194

Python爬虫自学系列(一)

还是想先哔哔几句,虽然大家可能已经迫不及待了。目录在上边,可以直接点击跳转哦。 之前一直是零零散散的更新爬虫相关的,毕竟在学校嘛,很多时间不能自主的。要上课,要考试什么什么的。 现在好了,寒假了,系统的整理一份爬虫系列文。 哎,背后隐藏的,是一个过气博主想要死灰复燃的心呐。 大家多多支持,赞评收藏都可以,多多益善☺☺ 昨天呢,做了一份系列目录,本来是要用来带一位朋友的,结果发现我俩技术差不多,但是我觉得这个路径还是很不错的 就拿来当做我们这个系列的指导吧!!

看,未来的博客 1万+

Python一看就懂系列(五)

专栏: python轻奢入门系列 作者: 豆破苍琼 【异常】 异常介绍 异常通常分为两类:语法引出的异常: 语法引出的异常:由于违反了编程语言的规则而导致的编译错误,也被称为语法错误。 运行时引出的异常:运行错误是代码能够顺利的编译通过,但是在程序运行过程中会产生的错误,称为运行错误。 处理异常的语法 与Python异常处理相关的关键字有:try、except、else、finally等,处理异常的语法如下: 其中,try语句只有一个,会首先被执行。except语句可以有多个,else和fina.

豆破苍琼 305

【python】懂车帝字体反爬逐层解密案例(附完整代码)

懂车帝字体反爬解密,完整代码分享

景天科技苑 2万+

Python一看就懂系列(三)

专栏: python轻奢入门系列 作者: 豆破苍琼 【字符串】 字符串介绍 字符串格式 被单引号或者双引号括起来的数据就是字符串。 字符串输出 """ 字符串输出 """ def printStream(nums): import time for i in range(nums): print('正在持续输出{}次'.format(i)) if i != nums-1: print("等待1秒后...") tim.

豆破苍琼 446

【原创】Python 懂车帝口碑分爬虫

懂车帝全系车型懂车分(口碑)页面中的详细车系评分数据先来web端试下能否找到需要的数据接口,随便找个车型打开口碑页面F12查看Network 根据页面关键字先搜索一波 只在页面的标签中找到了数据,没有发现有明显的数据接口,其实用charles抓包的时候发现一个疑似的js好像数据是通过这个js加载出来的,打开看了一下数据相当混乱,暂且先放一边,先从APP分析一波看能否直接拿到数据接口PS:手机环境、抓包环境的配置在这不在赘述,有兴趣的可参考之前的文章 APP抓包环境配置下载懂车帝APP,并安装至手机 手

拉灯的小手的博客 2276

Python爬虫实战:基于最新技术抓取懂车帝汽车评测数据

在当今数据驱动的时代,汽车评测数据对于消费者购车决策、行业趋势分析以及竞品研究都具有重要价值。懂车帝作为国内领先的汽车垂直媒体平台,拥有大量专业的汽车评测内容。本文将详细介绍如何使用Python最新爬虫技术获取懂车帝汽车评测数据,并构建一个完整的爬虫项目。本文详细介绍了如何使用Python最新技术抓取懂车帝汽车评测数据。通过Playwright实现动态页面渲染,结合asyncio提高爬取效率,使用MongoDB存储非结构化数据,构建了一个完整的汽车评测数据爬虫系统。汽车数据分析平台竞品监控系统。

2201_76125261的博客 1804

Python 懂车帝全车系销量排行榜

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删! Python 懂车帝全车系销量排行榜 需求 车系ID 城市 时间段 车系名称 销量 4363 深圳 2022年2月 Model Y 1,224

拉灯的小手的博客 3471

保姆级拆解:HP 1312NF/CM1415打印机进纸离合器清洁与更换全记录(附B站/油管视频指路)

本文详细记录了HP 1312NF打印机进纸离合器故障的诊断与修复全过程,包括故障判断、工具准备、拆解步骤、清洁更换技巧及预防措施。特别针对离合器内部海绵老化粘连问题,提供了电工胶布和硬纸片两种实用替代方案,并附有B站/油管视频指路,帮助用户轻松完成打印机维修。

weixin_31102231的博客 373

World Creator地形导入UE

导出预设选择高度图(heigh map)格式选择PNG 16位,或者RAW 16位,需要反转y轴(与虚幻不同),命名格式会自动带一个× , 将×改成_ 或者删掉自己命名 (虚幻名称不支持x符号)导入虚幻 , 修改Z轴 , 就是用 地形最高 - 地形最低 , 然后除以512 , 再乘以100。把这个数字填入Z轴缩放 , 点击生成即可。

UE星空 2152

别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案

本文介绍了如何利用Python和正交设计高效优化多因素实验方案。正交设计通过精心设计的正交表,用最少的实验次数覆盖所有因素的水平组合,显著提升实验效率。文章详细讲解了正交设计的核心优势、Python实现工具链、实验实施与数据分析方法,以及高级技巧与常见问题解决方案,帮助读者快速掌握这一强大的实验优化技术。

weixin_42526087的博客 331

AIDD机器学习深度学习药物发现与设计教程总结

AIDD(AI Drug Discovery & Design):是近年来非常火热的技术应用,且已经介入到新药设计到研发的大部分环节当中,为新药发现与开发带来了极大的助力。倾向于机器对数据库信息的自我学习,可以对数据进行提取和学习,一定程度上避免了化合物设计过程中的试错路径,同时还会带来很多全新的结构,为药物发现打破常规的结构壁垒。覆盖了机器学习和深度学习,能与新药研发相结合并实质性的应用到靶点预测、高通量筛选、药物设计、药物的ADMET性质预测等;且算力方面,由早期应用于药物发现领域的决策树、随机

wutianlin0723的博客 6814

从零开始用STM32驱动RGB屏:配置PCLK、DE同步信号的避坑指南

本文详细介绍了如何使用STM32驱动RGB接口LCD屏幕,重点解析了PCLK配置、同步信号极性和DE使能等关键参数的设置方法。通过实战代码示例和常见问题排查指南,帮助开发者避免常见配置错误,实现稳定的显示效果。特别针对800x480 IPS屏提供了优化建议和调试技巧。

sky77的博客 539

国科大学习资料--VLSI测试与可测试设计--2020期末考试试题

国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 一、概念题 1简述可测试性测度与两个主要的测度指标的含义; 2以March C-算法为例,说明March算法的构成,以及March C-算法的故障覆盖率; 3“效果-原因”诊断法和“原因效果诊断法”的不同; 4列举四条扫描设计时出现的问 题及解决办法; 5最少写出1149.1与1500的五点不同; = = = = =

无名何许人的博客 1150

109. SAP ABAP 应用程序中的锁机制和工作原理介绍

SAP ABAP 系统中的锁概念,是 SAP ABAP 为了保证`数据一致性`而引入的一种保护机制。 像 SAP 这种复杂的企业级应用,系统中同一时间段的同一份数据,可能会有多个 Transaction(终端用户或者 API )同时进行读写操作。为了防止出现数据不一致,SAP ABAP 引入了锁机制。 这种锁机制并非数据库服务器层面的锁,而是在 SAP ABAP 应用服务器层面上工作,加锁和解锁都由专门的 ABAP Function Module 来完成。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1466

【保姆级教程】基于UNet++&MobileNetv2的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv2作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

FJN110的博客 210

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: Python一看就懂系列(三)
下一篇: Python一看就懂系列(五)
Yao.Li
博客等级 码龄10年 405粉丝 110原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yao.Li

爱的魔力,一被卡布奇诺~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值