python_day09(笔记及练习)

"""
    复习
        函数内存
            1. 创建函数代码,加载到内存中,不执行函数体.
            2. 调用函数开辟空间(栈帧),函数执行过后空间释放.
        函数参数
            实际参数:调用者通过?方式传递数据
                位置实参:位置/顺序
                    序列实参:拆
                关键字实参:名字
                    字典实参:拆

            形式参数:约束实参
                默认形参:可选
                位置形参:必须
                    星号元组形参:合(位置实参)
                命名关键字形参:实参必须是关键字,星号以后的参数
                    双星号字典形参:合(关键字实参)
"""


def func01(p1, p2):
    # 修改的是栈帧中的变量
    p1 = "a"
    # 2. 修改的是可变对象
    p2[0] = "b"  # 3. 无需通过return,调用者也能获得结果


a = ["A"]
b = ["B"]  # 1, 传入可变对象
func01(a, b)
print(a)  # ["A"]
print(b)  # ["b"]

func01(p2=b, p1=a)


def func02(p1=0, p2=0):
    pass


func02(p2=10)

list01 = "悟空"
func02(*list01)

dict01 = {"p1": "a", "p2": "b"}
func02(**dict01)

面向对象 Object Oriented
概述
面向过程
1. 分析出解决问题的步骤,然后逐步实现。
例如:婚礼筹办
– 发请柬(选照片、措词、制作)
– 宴席(场地、找厨师、准备桌椅餐具、计划菜品、购买食材)
– 婚礼仪式(定婚礼仪式流程、请主持人)
2. 公式:程序 = 算法 + 数据结构
3. 优点:所有环节、细节自己掌控。
4. 缺点:考虑所有细节,工作量大。
面向对象
1. 找出解决问题的人,然后分配职责。
例如:婚礼筹办
– 发请柬:找摄影公司(拍照片、制作请柬)
– 宴席:找酒店(告诉对方标准、数量、挑选菜品)
– 婚礼仪式:找婚庆公司(对方提供司仪、制定流程、提供设备、帮助执行)
2. 公式:程序 = 对象 + 交互
3. 优点
(1) 思想层面:
– 可模拟现实情景,更接近于人类思维。
– 有利于梳理归纳、分析解决问题。
(2) 技术层面:
– 高复用:对重复的代码进行封装,提高开发效率。
– 高扩展:增加新的功能,不修改以前的代码。
– 高维护:代码可读性好,逻辑清晰,结构规整。
4. 缺点:学习曲线陡峭。
类和对象
1. 类:一个抽象的概念,即生活中的”类别”。
2. 对象:类的具体实例,即归属于某个类别的”个体”。
3. 类是创建对象的”模板”。
– 数据成员:名词类型的状态。
– 方法成员:动词类型的行为。
4. 类与类行为不同,对象与对象数据不同。

"""
    类和对象
        现实事物  -抽象化->  类  -实例化-> 对象
    15:20
"""

class Wife:
    """
        抽象的老婆
    """

    # 数据:姓名、颜值、钱....
    def __init__(self, name, face_score, money):
        self.name = name
        self.face_score = face_score
        self.money = money

    # 方法(函数):玩...
    def play(self):
        print(self.name, "在玩耍")

jg = Wife("金刚",6,5000)
jg.play()

"""
    创建1个狗类
        数据:爱称,年龄,颜色,品种
        行为:吃、坐下

    创建2个狗对象,调用相应的方法
    画出代码内存图
"""


class Dog:
    """
        狗
    """

    def __init__(self, name, age=0, color="", breed=""):
        self.pet_name = name
        self.age = age
        self.color = color
        self.breed = breed

    def eat(self):
        print(self.pet_name, "在吃")

    def sit(self):
        print(self.pet_name, "坐下")


mx = Dog("米咻", 4, "黄", "拉布拉多")
hm = Dog("黑米", 3, "黑", "拉布拉多")
mx.sit()
hm.sit()

# 练习1:
mx = Dog("米咻", 4, "黄", "拉布拉多")
d01 = mx
d01.pet_name = "咻咻"
mx.age = 5
print(d01.pet_name)
print(d01.age)
print(mx.pet_name)
print(mx.age)

# 练习2:
# 17:00
def func01(p1,p2):
    p1 = Dog("小白", 5)
    p2.pet_name = "小黑"
    p2.age = 6

mx = Dog("米咻", 4)
hm = Dog("黑米", 3)
"""

"""


class Wife:

    def __init__(self, name, face_score, money):
        self.name = name
        self.face_score = face_score
        self.money = money

    def print_self(self):
        print("%s--%d--%d" % (self.name, self.face_score, self.money))


w01 = Wife("建宁", 86, 999999)
list_wifes = [
    w01,
    Wife("双儿", 95, 5000),
    Wife("苏荃", 98, 10000),
    Wife("阿珂", 100, 6000),
    Wife("铁锤", 80, 0),
]


# 练习1:定义函数,在老婆列表中查找双儿对象
#       测试:调用双儿对象的print_self方法
def find01():
    for item in list_wifes:
        if item.name == "双儿2":
            return item


# 测试:
result = find01()
# 如果找到了
if result:
    result.print_self()


# 练习2:定义函数,在老婆列表中查找所有老婆的姓名
#       测试:打印列表
def find02():
    # list_result = []
    # for item in list_wifes:
    #     list_result.append(item.name)
    # return list_result
    return [item.name for item in list_wifes]


print(find02())

你可能感兴趣的:(#,python基础,python)