Python里面这些点,据说80%的新手都会一脸懵逼,不信就往下看......
Python虽然语法简单,通俗易懂,但是再简单它也是一门语言,就像一棵大树,总有一些树枝是弯弯绕绕的,让新手看完之后一脸懵逼,今天我们就来说说这几个点,反正我学的时候是很困惑的!
01.函数里面的 *args
1).可变参数
这个是什么鬼,尤其是有其他c,c++语言基础的人,看到这个点,一定懵逼了,难道是指针,两个**又是什么鬼?
其实这个Python里面的函数入参的几种形式,假如你来设计一个语言,一个函数fun(),里面要传参数进来,要考虑扩展性:变量会有很多种形态,有可能是变量,也可能是数组,也可能是结构体,或者是哈希数组。
我们都知道Python容易学,但是就是不知道如何去学,去哪里找资料,机器学习,人工智能,深度学习,都在这学习,欢迎加入python学习交流qq群250933691,分享我精心准备的Python学习资料,0基础到进阶!希望你们在学习Python道路上少走弯路!加油!
比如你有一个累加功能的函数:
每次调用函数都要传一个列表或者元组进去,非常死板,不灵活,如果我要传多个列表,多个变量,我又不想改接口,但是改成下面这样就灵活很多:
*args:表示可变参数,就是传入的参数个数是可变的,可以是1个、2个到任意个或者0个,其实就是把一堆参数当作一个数组(Python列表或者元组传递进来)。
02.关键字参数 **kwargs
关键字参数可以让你输入0或者多个含参数名的参数,并且自动组装为一个字典
你函数的接口设定为**kwargs,这样的好处,一个是灵活,扩展性好,也就是说我预留的了扩展的接口,你程序调用的时候可以根据自己的需求传1个,多个或者不传都可以。
另外:不用太纠集args和kwargs这些英语单词,只是大家约定这么叫而已
03.脸萌的@property
有其他经验的程序员,看到这个奇奇怪怪的@加一个关键字,一定是一脸懵逼,这其实是Python类里面的一些封装。这些都是类的内置装饰器,有一些特殊的用途!
1).装饰器@property
我们大部分人都比较熟悉比如Java的get/set方法,比如:
小编推荐一个学Python的学习裙【 二二七,四三五,四五零 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!希望新手少走弯路
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__方法
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容易学,但是就是不知道如何去学,去哪里找资料,机器学习,人工智能,深度学习,都在这学习,欢迎加入python学习交流qq群250933691,分享我精心准备的Python学习资料,0基础到进阶!希望你们在学习Python道路上少走弯路!加油!
Python里面这些点,据说80%的新手都会一脸懵逼,不信就往下看......相关推荐
- python里的点_Python里面这些点,据说80%的新手都会一脸懵逼
01.函数里面的 *args 1).可变参数 这个是什么鬼,尤其是有其他c,c++语言基础的人,看到这个点,一定懵逼了,难道是指针,两个**又是什么鬼? 其实这个Python里面的函数入参的几种形式, ...
- 据说80%的人都不懂,你会控制你的债务吗?
我们每个人都会有债务,大一点不就是房贷,车贷,或者消费贷款.小一点的比如花呗,信用卡啥的.其实理财的修炼之道里面,不光是要学会赚钱,还要会合理的控制你的债务,债务也是非常重要的一环.开源节流,这个节流 ...
- python入门新手项目-Python入门实战项目有哪些适合新手?
Python入门实战项目有哪些适合新手?目前市面上有很多适合新手的Python入门练手项目,Python入门需要理论与实践相结合,前面夯实基础知识,后面通过实战项目帮助你更好的运用这些Python知识 ...
- python作用域排序_11道Python常见面试题,80%的人不会
原标题:11道Python常见面试题,80%的人不会 1.final作用域的代码一定会被执行吗? 正常的情况下,finally作用域的代码一定会被执行的,不管是否发生异常.哪怕是调用了sys.exit ...
- Python小白的数学建模课-01.新手必读
Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 欢 ...
- Python 基础入门大合集,新手小白必看!
Python 入门 一.第一个 Python 程序 >>> print("Hello world!") 二.变量和简单数据类型 >>> mess ...
- python尝试不同的随机数进行数据划分、使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征的卡方检验的p值,如果所有p值都大于0.05则训练集和测试集都具有统计显著性、数据划分合理
python尝试不同的随机数进行数据划分.使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征(categorical)的卡方检验的p值,如果所有p值都大于0.05则退出循环.则训练集和测试 ...
- python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...
[背景] Python中的字符编码,其实的确有点复杂. 再加上,不同的开发环境和工具中,显示的逻辑和效果又不太相同,尤其是,中文的,初级用户,最常遇到的: (1)在Python自带的IDE:IDLE中 ...
- 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...
- python小技巧之:同时安装py2和py3,如何在指定的版本下pip安装包
前言 由于python官方声明2020年以后不再维护python2,而之前的很多代码都是python2编写的,很多小伙伴在学习的时候同时安装了py2和py3两个版本,那么如果我想将第三方的包安装到指定 ...
最新文章
- Error in exists(x): 第一个参数不对
- python输入hello*3_Python3基础(一) Hello World
- xfce4桌面的标题栏都变成了透明的
- python常用模块教程_盘点Python常用的模块和包
- Android SurfaceView实现静态于动态画图效果
- fastjson 判断value是对象还是数组
- RuoYi框架使用手册
- ToString函数用法
- “让天下没有难开的店”,宣言来自无人车公司AutoX
- Android Eclipse 导入 AS Gradle AAR 库手册
- 队列与栈(Queue,Deque,Stack)
- ubuntu gif 制作工具
- R语言入门(3)——R包的使用
- 计算机功能自定义,设计大师学教学:自定义鼠标右键功能提升CAD绘图效率-鼠标右键菜单设置...
- 【前端性能】浅谈域名发散与域名收敛
- 思科网络设备常用命令
- C# Excel 新建工作表,新增工作表,更改工作表的名字
- 计算机如何回到桌面,电脑系统教程:win10怎么返回到桌面状态
- ExtJs 第二章,Ext.form.Basic表单操作
- Cydia 软体介绍
热门文章
- php项目部署到服务器
- IT售前工程师需要掌握哪些技术
- 互联网日报 | 5月6日 星期四 | 阿里巴巴旗下“天猫香港”上线试营业;蔚来汽车将进军海外市场;五一档票房超16亿创新高...
- 学科分类号 计算机技术,学科分类号 0806.DOC
- PS 学习笔记(一)
- 怎么用java打开.jar文件
- 学习是对自己最好的投资
- 15b万用表怎么测电容_如何把15B万用表隐藏的功能用起来
- 金仓数据库KingbaseES实现主键自增的方式
- 贪睡的理发师问题程序设计c语言,【操作系统经典问题】睡眠理发师问题