天池龙珠计划-Python训练营3
大家好,我又来更第三节啦。本节讲的内容比较多,其中魔法方法有些抽象,需要多翻找资料强化了解。
一、函数
1.参数类型
*args是可变参数,args接受的是tuple
**kwargs是关键字参数,kwargs接受的是dict
#可变参数示例
def func(a,*b):
return a,b
func(1,2,3)
#(1, (2, 3))
#关键字参数示例
def func(a,**b):
return a,b
func(1,x=1,y=2)
#(1, {'x': 1, 'y': 2})
2.变量作用域
1、定义在函数内部的变量拥有局部作用域,称为局部变量
2、定义在函数外部的变量拥有全局作用域,称为全局变量
3、 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问
4、当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal
3.函数类型
什么是闭包函数?
举个栗子!!!
def funX():
num=100
def funY(y):
nonlocal num
num=1000
return num*y
return funY
# i=funX()
# i(100)
当内部函数需要引用外部函数的外部非全局变量时,需要使用关键字nonlocal,此时内部函数称为闭包函数。
闭包函数的返回值通常是函数
什么是递归函数?
举个栗子!!!
def func(n):
if n==1:
return n
return n*func(n-1)
如果一个函数在内部调用自身,那该函数称为递归函数
二、lambda 表达式
在python中,有两种定义函数的方式,第一种是前面提到的def函数,第二种是本小节提到的匿名函数lambda
lambda x : 表达式
#x可以是位置参数、默认参数、可变参数、关键字参数
1、 匿名函数的返回值由表达式的值决定
2、 匿名函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
三、类与对象
1.对象=属性+方法
在python里面,万物皆对象
class Myclass:
def __init__(self,x,y):
self.x=x
self.y=y
def add(self):
return self.x+self.y
以Myclass为例,x,y是类的属性,add()是类的方法
2.self是什么?
类的方法与普通的函数只有一个特别的区别 —— 它们必须有一个额外的第一个参数名称(对应于该实例,即该对象本身),按照惯例它的名称是
self。在调用方法时,我们无需明确提供与参数 self 相对应的参数。
3.继承
举个栗子!!!
class father_class:
def __init__(self,a,b,c):
self.a=a
self.b=b
self.c=c
def func(self):
print("%s 说了两个数字:%d %d" %(self.a,self.b.self.c))
class son_class(father_class):
def __init__(self,a,b,c,d):
father_class.__init__(self,a,b,c)
self.d=d
def add(self):
return self.b+self.c
cls=son_class(1,2,3,4)
cls.add()
#5
注意:1、基类必须与派生类定义在同一个作用域
2、如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性
4.公有和私有
在python中定义私有变量只需在变量名或函数名前加上"__"两个下划线,那么该函数或变量就会为私有的了。
5.类、类对象和实例对象
类对象:只能有1个,类属性和类方法可共享
e.g.类名.属性、类名.方法
实例对象:可以有多个,实例属性和实例方法不可共享
e.g.实例.属性、实例.方法
注意:属性与方法名相同,属性会覆盖方法
四、魔法方法
1、魔法方法总是被双下划线包围,例如__init__
2、魔法方法是面向python对象的一切,一般是用来定义python的行为
3、魔法方法的第一个参数应为cls(类方法)或者self(实例方法)
cls:代表1个类的名称
self:代表1个实例的名称