Python虽然语法简单,通俗易懂,但是再简单它也是一门语言,就像一棵大树,总有一些树枝是弯弯绕绕的,让新手看完之后一脸懵逼,今天我们就来说说这几个点,反正我学的时候是很困惑的!

01.函数里面的 *args

1).可变参数

这个是什么鬼,尤其是有其他c,c++语言基础的人,看到这个点,一定懵逼了,难道是指针,两个**又是什么鬼?

其实这个Python里面的函数入参的几种形式,假如你来设计一个语言,一个函数fun(),里面要传参数进来,要考虑扩展性:变量会有很多种形态,有可能是变量,也可能是数组,也可能是结构体,或者是哈希数组。

比如你有一个累加功能的函数:

每次调用函数都要传一个列表或者元组进去,非常死板,不灵活,如果我要传多个列表,多个变量,我又不想改接口,但是改成下面这样就灵活很多:

*args:表示可变参数,就是传入的参数个数是可变的,可以是1个、2个到任意个或者0个,其实就是把一堆参数当作一个数组(Python列表或者元组传递进来)。

02.关键字参数 **kwargs

关键字参数可以让你输入0或者多个含参数名的参数,并且自动组装为一个字典

你函数的接口设定为**kwargs,这样的好处,一个是灵活,扩展性好,也就是说我预留的了扩展的接口,你程序调用的时候可以根据自己的需求传1个,多个或者不传都可以。

另外:不用太纠集args和kwargs这些英语单词,只是大家约定这么叫而已

03.脸萌的@property

有其他经验的程序员,看到这个奇奇怪怪的@加一个关键字,一定是一脸懵逼,这其实是Python类里面的一些封装。这些都是类的内置装饰器,有一些特殊的用途!

1).装饰器@property

我们大部分人都比较熟悉比如Java的get/set方法,比如:

2).但是这样写比较麻烦,需要通过函数get/set 来访问属性

有木有直接对属性进行操作的同时就可以对属性进行处理,比如我们调用student.score=88,这一个时候会自动调用set_score函数,这样就非常灵活和简便!

Python里面为了简洁和优雅,设计了@property

对于外边访问的属性score,我们通过Python类中的property装饰器对它进行升级,改造,让它能变的更加灵活和强大!

其实它就是绑定了一些方法(fget,fset和fdel).尤其是你对属性进行升级功能而不改变外边代码的时候,这一招就非常有用!

04.傻傻分不清@classmethod和@staticmethod

看完了上面的property,刚刚回过神,现在又来了两个更大的家伙是啥,其实这个两个类装饰器都是类里面的概念!

只要是写代码最后一定会走到类,而类的封装和扩展是必须要掌握的,如何能有更好的封装性呢,classmethod和staticmethod就派上用场了!

1).假如有一个场景,计算日期的类

2).更改需求,如果我们传入的类初始化是字符串型日期

我们目前的类的init函数是一个三个参数的,如果我们希望我们传入一个字符串性的日期"2018-10-8",然后返回像上面的日期2018/10/8,怎么办呢?

传统的做法:

这样的做法会导致每次初始化的时候,都要先分割成3个参数再导入类,非常麻烦!

@staticmethod(类的静态方法就派上场)

通过静态函数,直接内置了分割的功能,会简洁很多,而且封装性也好很多!

3).但是静态方法也有弊端

因为静态方法是硬编码,如果我们修改了Date这个类的名字,比如叫MyDate这样的话,会导致我们写的format_date里面的代码也要改,因为我们直接是return Date()... ,好这个时候类方法classmethod上场了!

我们申明了一个类方法format_date2,里面有一个非常关键的变量cls,其实它就是类本身,这样无论我们把类的名字改成什么,都没有关系,因为我们返回的就是cls(...),这样代码的柔性就强了很多!

有同学看到这里会问,那静态函数还有什么用处,类方法都能代替了!在做一些类的预处理,或者条件判断的时候,静态函数还是很有用的!

05.super是啥

都说Python语言跟英语很类似,语法简单,通俗易懂,但是看到super这样关键字的时候,会有点懵懂!

其实只要是面向对象的语言,都有类的继承啊,组合等等。Python当然也有这样的设计,其实如果学过Java会非常好理解!比如子类要调用父类的方法,或者覆盖父类的方法都会用到super().

1).调用父类的方法

有的同学说我是不是可以直接调用A.say_hello(self),最好不要,涉及多重继承的时候就会有问题

2).初始化父类的__init__方法

如果我的分享对你有所帮助,加q u n 227-435-450,更多资源与教程与你共享。

我做开发几年的时间,如果大家对于学习Python的学习方法,学习路线以及:是自学还是培训的疑问,都可以随时来问我。

06.ABC模块

新手有的时候看到下面的代码会很懵,有点丈二和尚摸不着头脑的赶脚:

C++里面有抽象基类的概念,Python里面的类在设计的时候,也考虑到了这一点,但是由于Python本身的特性是一切皆对象,大部分的时候都依赖鸭子类型。

为了完成抽象基类的功能,借助了第三方模块abc(abc是抽象类的缩写,不是英语abc的意思)

b=Bird()
TypeError: Can't instantiate abstract class Bird with abstract methods fly

Bird继承ABC,也就是说Bird是一个抽象类,不能被初始化,比如你初始化一下,会报错的。

这个类的目的就是让继承它的子类一定要实例化fly函数,否则子类也永远无法实例化

其实当你完全熟悉这些用法之后,你要开始思考Python为啥要这么设计,慢慢的你就会领悟Python这门语言的设计思想,而不是只是看它的招式,当你明白里招式背后的含义,恭喜你,你的功力又大涨了!

Python里面这些点,据说80%的新手都会一脸懵逼相关推荐

  1. python里的点_Python里面这些点,据说80%的新手都会一脸懵逼

    01.函数里面的 *args 1).可变参数 这个是什么鬼,尤其是有其他c,c++语言基础的人,看到这个点,一定懵逼了,难道是指针,两个**又是什么鬼? 其实这个Python里面的函数入参的几种形式, ...

  2. 据说80%的人都不懂,你会控制你的债务吗?

    我们每个人都会有债务,大一点不就是房贷,车贷,或者消费贷款.小一点的比如花呗,信用卡啥的.其实理财的修炼之道里面,不光是要学会赚钱,还要会合理的控制你的债务,债务也是非常重要的一环.开源节流,这个节流 ...

  3. python入门新手项目-Python入门实战项目有哪些适合新手?

    Python入门实战项目有哪些适合新手?目前市面上有很多适合新手的Python入门练手项目,Python入门需要理论与实践相结合,前面夯实基础知识,后面通过实战项目帮助你更好的运用这些Python知识 ...

  4. python作用域排序_11道Python常见面试题,80%的人不会

    原标题:11道Python常见面试题,80%的人不会 1.final作用域的代码一定会被执行吗? 正常的情况下,finally作用域的代码一定会被执行的,不管是否发生异常.哪怕是调用了sys.exit ...

  5. Python小白的数学建模课-01.新手必读

    Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 欢 ...

  6. 那些曾让我一脸懵逼的python代码

    最近在学习python,选择学习python是有原因的.作为一名不专业的C/C++程序员来说,不掌握另一门脚本语言出门都不好意思和别人打招呼.在浏览别的职位要求时,也常常被"要求掌握一门脚本 ...

  7. 计算机配套产品分录,外购库存商品会计分录怎么做?如何做账?据说聪明的会计都会这样做!...

    外购存货商品会计分录怎么做?如何做账?外购商品涉及到外购原材料.外购原料外购包装物及外购低值易耗品等.那么对于外购库存商品,该怎么做会计分录呢?据说聪明的会计都会这样做!接下来就跟着会计网小编一起具体 ...

  8. 【Python】轻松识别文字,这款Python OCR库支持超过80种语言

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|Python大数据分析 什么是OCR? 有一款软件叫扫描全 ...

  9. python自学行_python自学行吗 新手可以自学python吗

    python自学行吗?我们知道python是开发人工智能的编程语言,多年来不温不火,直到最近python编程随着人工智能的火爆而变得热门起来,那么现在学习python编程可以吗,python自学难度大 ...

  10. python ocr 识别中文pdf_轻松识别文字,这款Python OCR库支持超过80种语言

    OCR是什么? 有一款软件叫扫描全能王,想必一些小伙伴听过,这是一个OCR集成软件,可以将图像内容扫描成文字. 所以说,OCR作用是对文本资料的图像文件进行分析识别处理,获取文字及版面信息. OCR的 ...

最新文章

  1. php 偷偷转移别人权重,判断百度蜘蛛偷偷进行301转移权重 给新站提权
  2. vue 动态添加路由
  3. 计算理论101:这可能是讲FSM的最生动的一篇了
  4. 页面报错webform_postbackoptions未定义
  5. 如何使用SMART原则
  6. 美国区块链与药品供应链管理的应用案例
  7. 十:javaee会议管理系统实现过程之会议室管理功能的代码(完整详细有注释)
  8. ARM处理器性能对比
  9. 10年经验总结:数据分析师7种工具,因果分析划重点!
  10. Android开发 个人开发者几大后端云比较
  11. android usb流程
  12. 关于扩展IP地址空间的几个方案的探讨
  13. GIC spec之ITS和LPI中断2
  14. 如何将ppt转换为jpg图片
  15. 用途DF无线数据收发模
  16. java 后台打开新页面_Java后台打开浏览器窗口
  17. 西南计算机维修技术0240,0240 2016《计算机维修技术》西南大学网上作业题及答案...
  18. 项目四 无线网络配置(使用华为模拟器eNSP)
  19. mac linux 性能测试工具下载,8款SSD固态硬盘性能测试软件,适用于Windows、Linux、MacOS、安卓系统等不同操作系统的...
  20. 【大项目】-商城管理系统

热门文章

  1. Python爬虫——Scrapy框架的基本使用
  2. windows Git Gui 汉化
  3. 2022年最新软件测试面试题,自动化测试面试题,接口自动化测试面试题详解,对标大厂。
  4. 时钟芯片AD9520
  5. python输出时间差_利用python计算时间差(返回天数)
  6. 拼多多的正品险是个假保险?
  7. js判断手机号码归属地查询接口--精确到地市
  8. 已知分布函数求概率密度例题_助力高考:吃透数学17个必考题型,必定可以考130!(内附解题技巧+例题解析)...
  9. Ubuntu20.04代理设置
  10. 加性噪声(目前不理解)