一Python基础33函数与类

文章来源:一氧化碳中毒   发布时间:2021-6-27 13:38:57   点击数:
  网络客服求职招聘微信群 http://www.gdgoran.org/fengshang/chaoliu/1294.html

目录一.函数二.类一.函数1.函数构建

def函数名(参数列表):函数体eg:defhello():print(ddd)returnx=hello()print(x=,x)2.函数传参

不可变类型:如numbertuplestring只是传递一个对应的拷贝的值,不会真正的修改参数名对应的值(类似值传递)可变类型:如list,set,dict作为参数传递时是将对应的内存地址传进去,会修改对应的值(类似引用传递)3.参数类型

必需参数:有参数时必须传入参数才能调用关键字参数:有多个参数defprintinfo(name,age):时可以表明关键字打乱顺序printinfo(age=50,name="runoob")默认参数:defprintinfo(name,age=35):不定长参数:(1).一个*号:加*号的参数会以元祖形式保存defprintinfo(arg1,*vartuple):"打印任何传入的参数"print("输出:")print(arg1)print(vartuple)#调用printinfo函数printinfo(70,60,50)70(60,50)(2).两个**号,加了两个星号**的参数已key=value形式写入,已字典形式保存。defprintinfo(arg1,**vardict):"打印任何传入的参数"print("输出:")print(arg1)print(vardict)#调用printinfo函数printinfo(1,a=2,b=3)#key=value4.匿名函数lambda

lambda[arg1[,arg2,.....argn]]:expressioneg:sum=lambdaarg1,arg2:arg1+arg2sum(1,3)二.类1.类的创建

class类名:#首字母大写number=#类的属性:可以由实例self类cls和类名直接调用#单个实例self调用修改属性时只是单个实例的属性发生变化#类名和类cls调用修改属性时会发生同步变化def__init__(self):#实例方法:相当于构造函数,Python中只能有一个构造函数,多个init会覆盖(该方法可以有其他参数)definfo(self,name,age):#实例方法:self为实例对象本身,可以传递类和实例的属性和方法-----该方法只能由实例对象调用self.name=name#动态属性:不同于java,实例对象可以动态的添加属于本实例对象的属性self.age=age#例如这里的self.name,age相当于构造实例时添加了name,age两个实例的属性,只能被实例修改

classmethoddefcm(cls):#类方法:cls为类对象,cls只能传递类的属性和方法-----类名和实例对象可以直接调用

staticmethoddefsm()#静态方法:无参,方法体内不能调用类和实例的属性和方法-----类名和实例对象可以直接调用总结:(1).属性可以由实例的self+类的cls+类名直接调用(self调用修改只有当前实例生效浅拷贝,后两个直接同步修改)(2).__init__构造方法和普通方法中的参数会直接生成实例特有的属性,只能由实例调用修改这些属性(3).cls操作类的属性和方法,self可以操作实例和类的属性和方法2.实例化

stu=类名()stu=类名(jack,20)3.实例动态绑定属性和方法

stu.gender=男#gender属性之前并不存在于classStudent中defshow2():pass#该方法定义在类之外stu.show=show2(传参)#等号左边不写括号show是自定义方法名,随便写;等号右边有括号,有参时传参4.面对对象三特性:封装,继承,多态

(1).python中没有private修饰符,如果不希望该属性或方法被外部使用,前面加__(两个_,在类的属性,构造方法,实例方法体中都可以,实例对象动态绑定时无效,子类可以使用)(2).继承py可以多继承(java只能单继承)继承时不写__init__方法时会默认调用父类的init方法子类写__init__方法时会调用子类自己的init方法而子类的init方法继承了父类的init时两个init都会调用(先父后子),此时如果父类的init有参,子类必须传给父类对应的参数单继承:class类名(父类):def__init__(self,xxx):super().__init__(xxx)#写成super().形式时xxx参数前不能加self或父类.__init__(self,xxx)#写成父类.形式时xxx参数前必须加self多继承:class类名(A,B):def__init__(self,xxx):A.__init__(self,xxx)B.__init__(self,xxx)(3).多态静态语言(java)多态的条件:继承,方法重写,父类引用指向子类对象动态语言(python)多态的条件:崇尚鸭子类型,不关心对象是什么类型是不是鸭子,只关心对象的行为,比如下面都有eat行为deffun(obj):obj.eat()fun(Animal())#Dog和Cat继承了Animalfun(Dog())fun(Cat())fun(Person())#鸭子类型,只关心鸭子的行为5.重写

java中重写要求:方法名,返回类型,参数列表必须完全与被重写方法的一致。py中方法名即可(参数列表和返回类型是活的可以不一样,最好写成一样)。

6.重载

python是一门动态语言,不需要声明变量类型,函数中可以接受任何类型的参数,也就无法根据参数类型来支持重载。python没有必要去考虑参数的类型问题,这些都可以在函数内部判断处理,并无必要去在写一个函数。

7.object类

object类是所有类的父类

(1).该类常用方法__str__(self,xxx):return#重写这个方法可以自定义输出内容,而不是输出内存地址(相当于java的toString)__len__()#重写让内置函数len()的参数可以是自定义类型,输出对象的长度__add__()#重写可以使自定义对象具有类似加法“+”功能(stu1+stu2就可以直接使用)__init__()#对创建的对象进行实例化初始化self__new__()#创建类对象cls所以先执行__new__,再执行__init__(2).属性__dict__获取类对象或实例对象的所有属性和方法的字典形式8.类的深拷贝和浅拷贝

importcopy1.变量的赋值操作浅拷贝:只是形成两个变量,实际指向同一对象内存地址深拷贝:不同内存地址的两个对象2.浅拷贝用copy模块的copy函数,对象包含的子对象内容不拷贝,源对象和拷贝对象会引用同一个子对象a=copy.copy(b)3.深拷贝使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同a=copy.deepcopy(b)预览时标签不可点收录于话题#个上一篇下一篇

转载请注明:http://www.lwblm.com/bytj/12045.html