AI集中训练营Python打卡——第六天

Lambda匿名函数

count = lambda x, y: x + y
count(2, 3)
5
)
'''
函数式编程 是指代码中每一块都是不可变的,都由纯函数的形式组成。这里的纯函数,是指函数本身相互独立、互不影响,对于相同的输入,总会有相同的输出,没有任何副作用。
'''
def f(x):
    y = []
    for intem in range(x):
        y.append(intem)
    return y
x = 4
f(x)
[0, 1, 2, 3]
odd = lambda x: x % 2 == 1
number = filter(odd, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(number))
# filter()可以过滤序列
[1, 3, 5, 7, 9]
, y
m1 = map(lambda x, y: x + y, [1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
print(list(m1))
[2, 4, 6, 8, 10]
def apply_to_list(fun, some_list):
    return fun(some_list)
​
lst = [1, 2, 3, 4, 5]
print(apply_to_list(sum, lst))
# 15
​
print(apply_to_list(len, lst))
# 5
​
print(apply_to_list(lambda x: sum(x) / len(x), lst))
15
5
3.0
类与对象

'''
对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。
​
封装:信息隐蔽技术
我们可以使用关键字 class 定义 Python 类,关键字后面紧跟类的名称、分号和类的实现。
'''
# 对象 = 属性 + 方法
'\n对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。\n\n封装:信息隐蔽技术\n我们可以使用关键字 class 定义 Python 类,关键字后面紧跟类的名称、分号和类的实现。\n'
'
class Zhaoqianling:
    # 属性
    name = '赵倩琳'
    sex = 'woman'
    age = 21
    
    # 方法
    def eat():
        print('赵倩琳喜欢吃辣条、豆干')
    
    def hair():
        return 'black'
a = Zhaoqianling # 实例化对象
a.name # 查看对象的属性
a.sex
a.eat() # 调用对象的方法
a.hair()
赵倩琳喜欢吃辣条、豆干
'black'
class MyList(list):
    pass
​
​
lst = MyList([1, 5, 2, 7, 8])
lst.append(9)
lst.sort()
print(lst)
​
# [1, 2, 5, 7, 8, 9]
[1, 2, 5, 7, 8, 9]
# 多态:不同对象对同一方法响应不同的行动
class Animal:
    def run(self):
        raise AttributeError('子类必须实现这个方法')
​
​
class People(Animal):
    def run(self):
        print('人正在走')
​
​
class Pig(Animal):
    def run(self):
        print('pig is walking')
​
​
class Dog(Animal):
    def run(self):
        print('dog is running')
​
​
def func(animal):
    animal.run()
​
​
func(Pig())
# pig is walking
pig is walking
class Ball:
    def setName(self, name):
        self.name = name
​
    def kick(self):
        print("我叫%s,该死的,谁踢我..." % self.name)
​
​
a = Ball()
a.setName("球A")
b = Ball()
b.setName("球B")
c = Ball()
c.setName("球C")
a.kick()
# 我叫球A,该死的,谁踢我...
b.kick()
# 我叫球B,该死的,谁踢我...
我叫球A,该死的,谁踢我...
我叫球B,该死的,谁踢我...
# 类有一个名为__init__(self[, param1, param2...])的魔法方法,该方法在类实例化时会自动调用。
class Ball:
    def __init__(self, name):
        self.name = name
    def kick(self):
        print('我叫%s,该死的,谁踢我' % self.name)
a = Ball('张')
a.kick()
我叫张,该死的,谁踢我
# 在 Python 中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了。
class Site:
    def __init__(self, name, url):
        self.name = name  # public
        self.__url = url  # private
​
    def who(self):
        print('name  : ', self.name)
        print('url : ', self.__url)
​
    def __foo(self):  # 私有方法
        print('这是私有方法')
​
    def foo(self):  # 公共方法
        print('这是公共方法')
        self.__foo()
​
​
x = Site('老马的程序人生', 'https://blog.csdn.net/LSGO_MYP')
x.who()
# name  :  老马的程序人生
# url :  https://blog.csdn.net/LSGO_MYP
​
x.foo()
# 这是公共方法
# 这是私有方法
​
x.__foo()
# AttributeError: 'Site' object has no attribute '__foo'
name  :  老马的程序人生
url :  https://blog.csdn.net/LSGO_MYP
这是公共方法
这是私有方法
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\JINBIN~1\AppData\Local\Temp/ipykernel_15368/368040997.py in 
     26 # 这是私有方法
     27 
---> 28 x.__foo()
     29 # AttributeError: 'Site' object has no attribute '__foo'

AttributeError: 'Site' object has no attribute '__foo'

# 类定义
class people:
    # 定义基本属性
    name = ''
    age = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
​
    # 定义构造方法
    def __init__(self, n, a, w):
        self.name = n
        self.age = a
        self.__weight = w
​
    def speak(self):
        print("%s 说: 我 %d 岁。" % (self.name, self.age))
​
​
# 单继承示例
class student(people):
    grade = ''
​
    def __init__(self, n, a, w, g):
        # 调用父类的构函
        people.__init__(self, n, a, w)
        self.grade = g
​
    # 覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级" % (self.name, self.age, self.grade))
​
​
s = student('小马的程序人生', 10, 60, 3)
s.speak()
# 小马的程序人生 说: 我 10 岁了,我在读 3 年级
小马的程序人生 说: 我 10 岁了,我在读 3 年级
import random
​
class Fish:
    def __init__(self):
        self.x = random.randint(0, 10)
        self.y = random.randint(0, 10)
​
    def move(self):
        self.x -= 1
        print("我的位置", self.x, self.y)
​
​
class GoldFish(Fish):  # 金鱼
    pass
​
​
class Carp(Fish):  # 鲤鱼
    pass
​
​
class Salmon(Fish):  # 三文鱼
    pass
​
​
class Shark(Fish):  # 鲨鱼
    def __init__(self):
        self.hungry = True
​
    def eat(self):
        if self.hungry:
            print("吃货的梦想就是天天有得吃!")
            self.hungry = False
        else:
            print("太撑了,吃不下了!")
            self.hungry = True
​
​
g = GoldFish()
g.move()  # 我的位置 9 4
s = Shark()
s.eat() # 吃货的梦想就是天天有得吃!
s.move()  
# AttributeError: 'Shark' object has no attribute 'x'
我的位置 2 3
吃货的梦想就是天天有得吃!
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\JINBIN~1\AppData\Local\Temp/ipykernel_15368/2176935735.py in 
     40 s = Shark()
     41 s.eat() # 吃货的梦想就是天天有得吃!
---> 42 s.move()
     43 # AttributeError: 'Shark' object has no attribute 'x'

C:\Users\JINBIN~1\AppData\Local\Temp/ipykernel_15368/2176935735.py in move(self)
      7 
      8     def move(self):
----> 9         self.x -= 1
     10         print("我的位置", self.x, self.y)
     11 

AttributeError: 'Shark' object has no attribute 'x'

# 解决该问题可用以下两种方式:
# 调用未绑定的父类方法Fish.__init__(self)
class Shark(Fish):  # 鲨鱼
    def __init__(self):
        Fish.__init__(self)
        self.hungry = True
​
    def eat(self):
        if self.hungry:
            print("吃货的梦想就是天天有得吃!")
            self.hungry = False
        else:
            print("太撑了,吃不下了!")
            self.hungry = True
​
# 使用super函数super().__init__()
class Shark(Fish):  # 鲨鱼
    def __init__(self):
        super().__init__()
        self.hungry = True
​
    def eat(self):
        if self.hungry:
            print("吃货的梦想就是天天有得吃!")
            self.hungry = False
        else:
            print("太撑了,吃不下了!")
            self.hungry = True
class Turtle:
    def __init__(self, x):
        self.num = x
​
​
class Fish:
    def __init__(self, x):
        self.num = x
​
​
class Pool:
    def __init__(self, x, y):
        self.turtle = Turtle(x)
        self.fish = Fish(y)
​
    def print_num(self):
        print("水池里面有乌龟%s只,小鱼%s条" % (self.turtle.num, self.fish.num))
​
​
p = Pool(2, 3)
p.print_num()
# 水池里面有乌龟2只,小鱼3条
水池里面有乌龟2只,小鱼3条
# 类属性:类里面方法外面定义的变量称为类属性。类属性所属于类对象并且多个实例对象之间共享同一个类属性,说白了就是类属性所有的通过该类实例化的对象都能共享。
class A():
    a = 0  #类属性
    def __init__(self, xx):
        A.a = xx  #使用类属性可以通过 (类名.类属性)调用。
# 创建类对象
class Test(object):
    class_attr = 100  # 类属性
​
    def __init__(self):
        self.sl_attr = 100  # 实例属性
​
    def func(self):
        print('类对象.类属性的值:', Test.class_attr)  # 调用类属性
        print('self.类属性的值', self.class_attr)  # 相当于把类属性 变成实例属性
        print('self.实例属性的值', self.sl_attr)  # 调用实例属性
​
​
a = Test()
a.func()
​
# 类对象.类属性的值: 100
# self.类属性的值 100
# self.实例属性的值 100
​
b = Test()
b.func()
​
# 类对象.类属性的值: 100
# self.类属性的值 100
# self.实例属性的值 100
​
a.class_attr = 200
a.sl_attr = 200
a.func()
​
# 类对象.类属性的值: 100
# self.类属性的值 200
# self.实例属性的值 200
​
b.func()
​
# 类对象.类属性的值: 100
# self.类属性的值 100
# self.实例属性的值 100
​
Test.class_attr = 300
a.func()
​
# 类对象.类属性的值: 300
# self.类属性的值 200
# self.实例属性的值 200
​
b.func()
# 类对象.类属性的值: 300
# self.类属性的值 300
# self.实例属性的值 100
类对象.类属性的值: 100
self.类属性的值 100
self.实例属性的值 100
类对象.类属性的值: 100
self.类属性的值 100
self.实例属性的值 100
类对象.类属性的值: 100
self.类属性的值 200
self.实例属性的值 200
类对象.类属性的值: 100
self.类属性的值 100
self.实例属性的值 100
类对象.类属性的值: 300
self.类属性的值 200
self.实例属性的值 200
类对象.类属性的值: 300
self.类属性的值 300
self.实例属性的值 100
# 属性与方法名相同,属性会覆盖方法。
class A:
    def x(self):
        print('x_man')
​
​
aa = A()
aa.x()  # x_man
aa.x = 1
print(aa.x)  # 1
aa.x()
# TypeError: 'int' object is not callable
x_man
1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
C:\Users\JINBIN~1\AppData\Local\Temp/ipykernel_15368/852365297.py in 
      9 aa.x = 1
     10 print(aa.x)  # 1
---> 11 aa.x()
     12 # TypeError: 'int' object is not callable

TypeError: 'int' object is not callable

'''issubclass(class, classinfo) 方法用于判断参数 class 是否是类型参数 classinfo 的子类。
一个类被认为是其自身的子类。
classinfo可以是类对象的元组,只要class是其中任何一个候选类的子类,则返回True。'''
class A:
    pass
​
​
class B(A):
    pass
​
​
print(issubclass(B, A))  # True
print(issubclass(B, B))  # True
print(issubclass(A, B))  # False
print(issubclass(B, object))  # True
True
True
False
True
'''
isinstance(object, classinfo) 方法用于判断一个对象是否是一个已知的类型,类似type()。
type()不会认为子类是一种父类类型,不考虑继承关系。
isinstance()会认为子类是一种父类类型,考虑继承关系。
如果第一个参数不是对象,则永远返回False。
如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常。
'''
a = 2
print(isinstance(a, int))  # True
print(isinstance(a, str))  # False
print(isinstance(a, (str, int, list)))  # True
​
​
class A:
    pass
​
​
class B(A):
    pass
​
​
print(isinstance(A(), A))  # True
print(type(A()) == A)  # True
print(isinstance(B(), A))  # True
print(type(B()) == A)  # False
True
False
True
True
True
True
False
# hasattr(object, name)用于判断对象是否包含对应的属性
class Coordinate:
    x = 10
    y = -5
    z = 0
​
​
point1 = Coordinate()
print(hasattr(point1, 'x'))  # True
print(hasattr(point1, 'y'))  # True
print(hasattr(point1, 'z'))  # True
print(hasattr(point1, 'no'))  # False
True
True
True
False
# getattr(object, name[, default])用于返回一个对象属性值。
class A(object):
    bar = 1
​
​
a = A()
print(getattr(a, 'bar'))  # 1
print(getattr(a, 'bar2', 3))  # 3
print(getattr(a, 'bar2'))
# AttributeError: 'A' object has no attribute 'bar2'
1
3
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\JINBIN~1\AppData\Local\Temp/ipykernel_15368/2252145955.py in 
      7 print(getattr(a, 'bar'))  # 1
      8 print(getattr(a, 'bar2', 3))  # 3
----> 9 print(getattr(a, 'bar2'))
     10 # AttributeError: 'A' object has no attribute 'bar2'

AttributeError: 'A' object has no attribute 'bar2'

class A(object):
    def set(self, a, b):
        x = a
        a = b
        b = x
        print(a, b)
​
​
a = A()
c = getattr(a, 'set')
c(a='1', b='2')  # 2 1
​
2 1
# setattr(object, name, value)对应函数 getattr(),用于设置属性值,该属性不一定是存在的。
class A(object):
    bar = 1
​
​
a = A()
print(getattr(a, 'bar'))  # 1
setattr(a, 'bar', 5)
print(a.bar)  # 5
setattr(a, "age", 28)
print(a.age)  # 28
1
5
28
# delattr(object, name)用于删除属性。
class Coordinate:
    x = 10
    y = -5
    z = 0
​
​
point1 = Coordinate()
​
print('x = ', point1.x)  # x =  10
print('y = ', point1.y)  # y =  -5
print('z = ', point1.z)  # z =  0
​
delattr(Coordinate, 'z')
​
print('--删除 z 属性后--')  # --删除 z 属性后--
print('x = ', point1.x)  # x =  10
print('y = ', point1.y)  # y =  -5
​
# 触发错误
print('z = ', point1.z)
# AttributeError: 'Coordinate' object has no attribute 'z'
x =  10
y =  -5
z =  0
--删除 z 属性后--
x =  10
y =  -5
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\JINBIN~1\AppData\Local\Temp/ipykernel_15368/2478525000.py in 
     19 
     20 # 触发错误
---> 21 print('z = ', point1.z)
     22 # AttributeError: 'Coordinate' object has no attribute 'z'

AttributeError: 'Coordinate' object has no attribute 'z'

'''
class property([fget[, fset[, fdel[, doc]]]])用于在新式类中返回属性值。
fget -- 获取属性值的函数
fset -- 设置属性值的函数
fdel -- 删除属性值函数
doc -- 属性描述信息
'''
class C(object):
    def __init__(self):
        self.__x = None
​
    def getx(self):
        return self.__x
​
    def setx(self, value):
        self.__x = value
​
    def delx(self):
        del self.__x
​
    x = property(getx, setx, delx, "I'm the 'x' property.")
​
​
cc = C()
cc.x = 2
print(cc.x)  # 2
​
del cc.x
print(cc.x)
# AttributeError: 'C' object has no attribute '_C__x'
2
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\JINBIN~1\AppData\Local\Temp/ipykernel_15368/2864552183.py in 
     27 
     28 del cc.x
---> 29 print(cc.x)
     30 # AttributeError: 'C' object has no attribute '_C__x'

C:\Users\JINBIN~1\AppData\Local\Temp/ipykernel_15368/2864552183.py in getx(self)
     11 
     12     def getx(self):
---> 13         return self.__x
     14 
     15     def setx(self, value):

AttributeError: 'C' object has no attribute '_C__x'

你可能感兴趣的:(人工智能,python,开发语言)