函数、参数、*args、可变数据类型、匿名函数、字符串方法、递归、os uuid 模块方法、继承、方法的重写

Second week of learning::

函数

定义:def 函数名(参数):函数体

函数在定义的时候只是在系统中开辟了相应的内存空间,调用的的时候才会执行函数内部命令
1.两个不同的函数,先定义那个后定义那个是没关系的
2.不可以先调用函数在定义函数
带参数的函数:
在这里插入图片描述

return

函数中,可以用return返回想返回的结果,函数一旦被调用,就会返回设定的结果,可以在调用的时候用变量进行接收,一个函数可以有返回值也可以没有,但如果有,return后面不能有其他命令,因为return也代表结束整个函数,写在其后面的程序将不会被执行,如果一次返回多个值,系统会默认以元组的方式返回,如果不想以元组方式返回,可以把返回值用列表表示在return

函数与函数之间是相互独立的,不可以共用函数内部变量,但如果函数2想调用函数1的某个变量的值,那就return函数1的这个变量,然后函数2就可以进行调用了
在这里插入图片描述

函数的嵌套

函数是可以嵌套使用的,也就是说,一个函数定义完,是可以在另一个函数中被调用的。在这里插入图片描述

局部变量和全局变量

函数内部定义的变量叫局部变量,出了函数就不能用了哦,而在函数外部定义的是全局变量,如果函数内部想对全局变量进行修改,就必须要用global 全局变量 这个方法
在这里插入图片描述
在这里插入图片描述

如何查看函数的文档说明

如何查看函数的文档说明呢?也就是如何查看帮助文档:1.直接用help(函数名)即可 2.将光标置于函数名和括号之间,然后在pycharm标题栏的view里面选中Quick Documentation
函数的注释:不适用#而使用“”“注释”“”的形式,三个引号里的内容可以放入一大堆内容,它可以保留字符串的原始格式,里面的单引号双引号完全不需要进行处理了,但它并不是注释,只是可以当作是注释去使用,它是一个字符串,是真实的数据,三个引号里面的内容太多的时候,也会占用很大的内存的,而#那才是正真的注释,也不会占用内存的空间。

缺省参数

可以在函数定义的时候就写上参数的值,此时的值会被当做默认值,也叫做缺省参数,如果在调用函数时给了缺省参数的值,那就按照给的值调用,如果没给,就按着默认值调用,缺省参数在定义时需放在最后
在这里插入图片描述

不定长函数

*args

在函数的定义中def teast(*args): print(args)此时调用函数,函数会自动把输入的字符以元组方式存储,所以如果只输入一个数字或者一个字符,记得在末未加上逗号,否则就不是元组的形式啦

**kwargs

会对传递的参数进行字典的封装
**kwargs会对传递的参数进行字典的封装
元组、字典的特殊情况在这里插入图片描述

在这里插入图片描述

python中的一些小知识点:

python是如何进行内存机制的优化?

答:比如,python中有小整数常量池(小整数缓存池)的机制,它是将-5到256之间的数用的是同一块内存地址。也就是-5到256之间的数的id相同

可变数据类型和不可变数据类型

python中不可变的数据类型为:数字、字符串、元组。
python中可变的数据类型为:字典和列表。
只有不可变的数据类型可以做字典的键

匿名函数:lambda

匿名函数就是用比较简单的的方式,省略了函数的def定义的过程,直接c = lambda a,b:a+b 用c来接收lambda的结果,也相当于调用,无法定义复杂的函数,且只有一个返回值

在这里插入图片描述

python的动态体现:在这里插入图片描述

递归实现的两种方式:在这里插入图片描述

给程序传参数:sys模块中的argv不仅可以得到当前程序的文件名以及后面的一些参数信息,以列表的形式进行返回

字符串

字符串中不可以用“” “”或者‘’ ‘’这种形式,有了双引号再进行嵌套时就得用单引号啦
字符串有以下方法:在这里插入图片描述

python 自带模块:OS模块的应用

在这里插入图片描述
在这里插入图片描述

python中自带模块:uuid模块

UUID是通用唯一识别码(Universally Unique Identifier)的缩写,UUID是基于当前时间、计数器(counter)和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的,因为它们是不会被复制的独特标识符。

uuid(1):

根据当前的时间戳和MAC地址生成的,最后的12个字符408d5c985711对应的就是MAC地址,因为是MAC地址,那么唯一性应该不用说了。但是生成后暴露了MAC地址这就很不好了。

uuid(3):

基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。就是说如果name一致则生成的uuid3是一样的,你可以测试下不管运行多少次都是一样的uuid3。

uuid(4):

这是基于随机数的uuid。既然是随机就有可能真的遇到相同的,几率超小,也基本上是不会重复的,因为是随机而且使用还方便,所以使用这个的还是比较多的。

uuid(5):

和基于名字的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法,和uuid3差不多,uuid3用的是MD5算法,uuid5用的是SHA1算法, 如果你name不换,生成的uuid5一直是同一个。

面向对象

面向对象通过类的封装,可以解决程序的复用的问题

类和对象的关系

面向对象编程的2个非常重要的概念:类和对象
对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类
类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象。

类的构成

类(Class) 由3个部分构成:
① 类的名称:类名
② 类的属性:一组数据
③ 类的方法:允许对进行操作的方法 (行为)

__init__方法:创建一个对象后就会自动调用,所以一般用作对象的初始化
__str__方法:当对对象进行打印时,会自动打印该对象内存地址,不想打印这个就可以用这个方法,其中设置return值就是我们打印该对象时出现的内容
del:如果当程序结束的时候还有引用数,先执行程序结束的代码,再去调用此方法

隐藏属性:用get(),set()方法
私有属性、私有方法 :1.起名字是__开头 2.私有的不能在类的外面去使用,可以在类里面的任何地方进行使用
在继承的情况中:1、子类对象不能在自己的方法内部,直接访问父类的私有属性或私有方法。
2、子类对象可以通过父类的公有方法间接访问到私有属性或私有方法。

继承
1.单继承:

class 类名(父类名):pass
c继承了b,b又继承了a,则c也间接地继承了a

2.多继承:

class 类名(父类名1,父类名2,。。。):pass

如何让父类针对不同的子类进行返回不同的内容???:
1.使用super()
2.也可以使用:isinstance(obj, Class) 布尔函数:如果object是B类的实例对象,那么就返回真True。也就是判断一个对象是不是这个类实例化出来的

方法的重写
1.重写

如果在开发中,父类的方法实现和子类的方法实现完全不同,就可以使用覆盖的方式,在子类中重新编写父类的方法实现。
具体的实现方式:就相当于在子类中定义了一个和父类同名的方法并且实现。
重写之后,在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法。

2.拓展

如果在开发中,子类的方法实现中包含父类的方法实现,也就是父类原本封装的方法实现是子类方法的一部分,就可以使用扩展的方式。
具体步骤:
1、在子类中重写父类的方法。
2、在需要的位置使用super().父类方法来调用父类方法的执行。
3、代码其他的位置针对子类的需求,编写子类特有的代码实现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值