01.函数里面的 *args

1).可变参数

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

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

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

每次调用函数都要传一个列表或者元组进去,非常死板,不灵活,如果我要传多个列表,多个变量,我又不想改接口,但是改成下面这样就灵活很多: 在这里顺便说下不管你是为了Python就业还是兴趣爱好,记住:项目经验永远是核心,如果你缺新项目练习,可以去小编的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里面这些点,据说80%的新手都会一脸懵逼相关推荐

  1. python里的拼接_Python拼接字符串的7种方法总结

    前言 忘了在哪看到一位编程大牛调侃,他说程序员每天就做两件事,其中之一就是处理字符串.相信不少同学会有同感. 在Python中,我们经常会遇到字符串的拼接问题,几乎任何一种编程语言,都把字符串列为最基 ...

  2. install在python里什么意思_python setup.py install是什么意思

    python setup.py install是什么意思? python setup.py install 是我们用来安装下载的python包或者自己按照python官方规范开发的扩展包的常用指令. ...

  3. python里怎么输入θ_Python笔记——输入输出

    输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print('hello, world') p ...

  4. 求根公式在python里怎么表达_python求根公式

    len(x) 击败 x.len(),从内置函数看 Python 的设计思想 内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得. ...

  5. python里的非_python中逻辑非

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python逻辑运算的简介以及使用~ 逻辑运算在程序开发中,通常 在判断条件时, ...

  6. python里isalpha函数_Python isalpha函数判断字母

    Python isalpha() 方法检测字符串是否只由字母组成. Case 1: 纯字母 info = 'abcd' print(info.isalpha()) 返回结果是True Case 2: ...

  7. argument在python里什么意思_python add_argument() 的使用方法

    介绍: argparse argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数, ...

  8. python里π怎么打_python里的π怎么输入

    python去重函数是什么 用python写温度转换 python中的π就是math.pi变量 .它被包含在标准库中, 在你试图自己计算它之前,应该先去导入math库,才能调用math.pi方法 . ...

  9. pyqt在python里是啥_python pyqt

    一.控件 1.单行文本框QLineText clear() 清除文本框中的内容 contextMenuEvent() 右键菜单事件 copy() 复制文本框中的内容 cut() 剪切文本框中的内容 p ...

最新文章

  1. zabbix 实践 (一)
  2. python的100个案例_Python实例100个(基于最新Python3.7版本)
  3. freemarker写入word【未完,待续】
  4. Linux Shell常用技巧(一)
  5. 阿里最新php面试题及答案,面经网-阿里php面试题(四)
  6. Java牛角尖【003】:类初始化时的执行顺序
  7. SpringCloud基础组件总结,与Dubbo框架、SpringBoot框架对比分析
  8. UML建模工具Visio、Rational Rose、PowerDesign,Visual Paradigm for UML
  9. win7信息服务器,Windos2012 中的共享,win8/win10用户访问正常,WIN7用户不能访问
  10. 计算机科学数学背景,计算机科学中的数学教育.pdf
  11. 库存数量控制中储备定额方法的改进与实现
  12. 编程入门前应该先学什么?
  13. 计算机黑屏启动超慢,电脑开机慢黑屏时间长怎么解决
  14. 木子-前端-ajax传值与接收最简单的方式
  15. windows安装OHS(weblogic管理)
  16. Ubuntu18.04卸载并重新安装Ubuntu及
  17. python实现外部静态服务器,浏览器通过HTTP与之通信1
  18. Linux下Rootkit介绍
  19. Flutter(五)沉浸式状态栏
  20. C语言程序设计教程(第三版)课后习题6.7

热门文章

  1. 在堆区开辟内存(动态内存的开辟)
  2. 《日语综合教程》第七册 第四課 読み物 初日影のなかで
  3. 写在2020年的初秋
  4. CG-62 压电式雨量传感器
  5. 2.3、Segment Routing基础之IGP Segment 类型详解
  6. VScode直接执行ts文件
  7. [深度学习]动手学深度学习笔记-5
  8. Typora设置标题自动标号
  9. Python 实现键鼠操作
  10. java中倒出pdf增加高宽_java – 如何扩展PDF的页面大小以添加水印...