自学python所记(十)

14.20、函数传参中的拆包

def my_sum(*args, **kwargs):
    num = 0
    for i in args:
        num += i

    for j in kwargs.values():
        num += j

    print(num)


# 需求,my_list=[1,2,3,4]  字典my_dict = {'a':1,'b':2,'c':3,'d':4}
my_list = [1, 2, 3, 4]
my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 将字典和列表中的数据使用my_sum函数进行求和,该如何传参的问题

# 想要将列表(元组)中的数据 分别作为位置参数,进行传参,需要对列表进行拆包操作,使用*对其进行拆包
my_sum(*my_list)  # my_sum(1,2,3,4)

#想要将字典中的数据,作为关键字传参,需要使用 使用**对字典进行拆包
my_sum(**my_dict)   # my_sum(a=1,b=2,c=3,d=4)

14.21、匿名函数

匿名函数:使用lambda关键字定义的函数
一般成为使用def关键字定义的函数为 标准函数

匿名函数只能书写一行代码
匿名函数返回值不需要return,一行代码(表达式)的结果就是返回值

使用场景:作为函数的参数,这个函数比较简单,值使用一次,没有必要定义def
  • 语法

    lambda参数:  #这一行代码,称为是表达式
    
    # 匿名函数一般不需要我们主动的调用,一般作为函数的参数使用
    #学习阶段为了查看匿名函数定义的是否正确,可以调用
    # 在定义的时候,将匿名函数的引用保存到一个变量中
    变量 = lambda 参数:一行代码
    # 使用变量进行调用
    变量()
    
# 1、无参无返回值
def func1():
    print('hello world')


func1()

lambda: print('hello world')  # 匿名定义函数
func11 = lambda: print('hello lambda')
func11()


# 2、无参有返回值
def func2():
    return 10


print(func2())

func22 = lambda: 10
print(func22())


# 3、有参无返回值
def sum3(a, b):
    print(a + b)


sum3(1, 2)

sum33 = lambda a, b: print(a + b)
sum33(10, 20)


# 4、有参有返回值
def func4(a, b):
    return a + b


print(func4(2, 3))

func44 = lambda a, b: a + b
print(func44(5, 6))

# 1.定义一个匿名函数可以求两个数的乘积(
#  参数需要两个
func1 = lambda a, b: a * b

print(func1(5, 6))

# 2.定义一个匿名函数,参数为字典,返回字典中键为age的值
# 参数只是一个占位的作用,定义的时候 没有具体的数据值,形参的值实在调用的时候进行传递,此时,形参才有数据
# 形参的类型由实参决定。函数定义时,形参只是一个符号,些什么都可以,想让其时字典类型,只需要保证 实参是字典
func2 = lambda x: x.get('age')
func3 = lambda x: x['age']

my_dict = {'name': '李白', 'age': 12}
print(func2(my_dict))
print(func2(my_dict))

14.22、匿名函数的应用

匿名函数作为函数参数------列表排序
list1=[{'name''jh','age':16},{'name''js','age':15},{'name''jl','age':19}]
list1=[{'name':'jh','age':16},{'name':'js','age':15},{'name':'jl','age':19}]

# 列表的排序,默认是对列表中数据进行比大小,可以对 数字类型和字符串进行比较大小
# 不能对字典进行比较大小,需要使用sort函数中的key这个参数,来指定字典比大小的方法
# key 这个参数,需要传递一个函数,一般是匿名函数,字典的排序,要根据字典的键进行排序
# 匿名函数返回字典的这个键对应的值

列表.sort(key=lambda x:x['键'])

# 根据年龄排序
# list1.sort(key=lambda x:x['age']

list1.sort(key=lambda x:x['age'],reverse=True)
print(list1)

# 说明:匿名函数中的参数是 列表中的数据 在sort函数内部,会调用key这个函数(将列表中每个数据作为实参传递给形参),
# 从列表中的获取函数的返回值,对返回值进行比大小操作(<)

列表.sort(key=lambda x:x['键'])
字符串比大小
字符串比大小,是比较字符对应的ASCII码值

A < Z < a < z

ord(字符)  # 获取字符对应的ASCII 的值
chr(ASCII值)  # 获取对应的 字符

十五、面向对象

15.1、基本介绍

面向对象一种编程思想
1.面向过程
2.面向对象
  • 面向过程

    • 关注的是具体步骤的实现,所有功能都自己书写
    • 亲力亲为
    • 定义一个个函数,最终按照顺序调用函数
  • 面向对象

    • 关注结果
    • 偷懒
    • 找一个对象(),让对象去处理

15.2、类和对象

面向对象的核心思想是 找一个对象去帮我们处理

在程序代码中, 对象是由 类 创建的

类和对象是 面向对象 编程思想中非常重要的两个概念
    • 抽象的概念 , 对 多个 特征和行为相同或相似事物的统称
    • 泛指的(指代多个,而不是具体的一个)
  • 对象

    • 具体存在的一个事物,看到见摸得着的

    • 特指的(指代一个)

15.3、类的组成

1.类名(给多个事物起一个名字,在代码中 满足大驼峰命名法(每个单词的首字母大写)

2.属性(事物的特征,即有什么,一般文字中的名词)

3.方法(事物的行为,即做什么事,一般是动词)

15.4、类的抽象(类的设计)

类的抽象 就是找到类的属性 类名 和方法

需求:小明今年8岁,身高1.58,每天早晨跑完步,会去吃东西

​ 小美今年17岁,身高1.66,小美不跑步,小妹喜欢吃东西

类名:人类(person,people)

属性:名字(name),年龄(age),身高(height)

方法: 跑步(run)  ,吃(eat)

15.5、面向代码的步骤

1.定义类,在定义类之前先设计类

2.创建对象,使用第一步定义的类创建对象

3.通过对象调用方法

15.6、面向对象基本代码的书写

1.定义类

先定义简单的类,不包含属性,在python中定义类需要使用关键字class

方法:本质在类中定义的函数,只不过第一个参数是 self
class 类名:
	# 在缩进中书写的内容,都是类中的代码
	def 方法名(self)  # 就是一个方法
		pass

2.创建对象

创建对象是使用 类名() 进行创建,即
类名()  # 创建一个对象,这个对象在后续不能使用
# 创建的对象想要在后续的代码中继续使用,需要使用一个变量,将这个对象保存起来
变量 = 类名()   # 这个变量保存的是对象的地址,一般可以称为这个变量为对象

# 一个类可以创建多个对象,只要出现 类名() 就是创建一个对象,每个对象的地址是不一样的

3.调用方法

对象.方法名()

例:

列表.sort()
列表.append()

4.案例实现

需求:小猫爱吃鱼,小猫爱喝水
类名:猫类(Cat)
属性:暂无
方法:吃鱼(eat)喝水(drink)
# 需求:小猫爱吃鱼,小猫爱喝水,定义不带属性的类

class Cat:
    #在缩进中书写方法
    def eat(self):  #self 会自动出现,暂不管
        print('小猫爱吃鱼')
    def drink(self):
        print('小猫要喝水')

# 2. 创建对象
blue_cat = Cat()

# 3.通过对象调用类中的方法
blue_cat.eat()
blue_cat.drink()

# 创建对象
black_cat=Cat()
black_cat.eat()
black_cat.drink()

15.7、self的说明

class Cat:
    #在缩进中书写方法
    def eat(self):  #self 会自动出现,暂不管
        print('小猫爱吃鱼')
    def drink(self):
        print('小猫要喝水')
        
1.从函数的语法上讲,self是形参,就可以是任意的变量名,习惯将这个形参写成self
2.self是普通的形参,但在调用的时候没有传递实参值,原因是,python解释器在执行代码的时候,自动将调用的这个方法的对象 传递给了self, 即self 的本质是对象

3.验证,只需要确定 通过哪个对象调用,对象的引用和self的引用是一样的

4. self是函数中的局部变量,直接创建的是全局变量
class Cat:
    #在缩进中书写方法
    def eat(self):  #self 会自动出现,暂不管
        print(f"{id(self)},self")
        print('小猫爱吃鱼')
    def drink(self):
        print('小猫要喝水')

# 2. 创建对象
blue_cat = Cat()
print(f"{id(blue_cat)},blue_cat")

# 3.通过对象调用类中的方法
blue_cat.eat()
blue_cat.drink()

输出:
2092055696368,blue_cat
2092055696368,self
小猫爱吃鱼
小猫要喝水

15.8、对象的属性操作

添加属性
对象.属性名 = 属性值
  • 类内部添加

    在内部方法中,self是对象
    self.属性名 = 属性值
    # 在类中添加属性一般写作 _init_ 方法中
    

  • 类外部添加

    对象.属性名 = 属性值  # 一般不使用
    
获取属性
对象.属性名
  • 类内部

    在内部方法,self是对象
    self.属性名
    
  • 类外部

    对象.属性名   # 一般很少使用
    
class Cat:
    #在缩进中书写方法
    def eat(self):  #self 会自动出现,暂不管
        print(f"{id(self)},self")

        print(f'小猫{self.name} 爱吃鱼')
        
        print('小猫爱吃鱼')
    def drink(self):
        print('小猫要喝水')

# 2. 创建对象
blue_cat = Cat()
print(f"{id(blue_cat)},blue_cat")

# 给蓝猫添加name属性
blue_cat.name = '蓝猫'

# 3.通过对象调用类中的方法
blue_cat.eat()          # blue_cat 对象调用eat方法,解释器就会将blue_cat对象传给self
blue_cat.drink()


# 1852769932272,blue_cat
# 1852769932272,self
# 小猫蓝猫 爱吃鱼
# 小猫要喝水

15.9、魔法方法

 python中有一类方法,以两个下划线开题偶,两个下划线结尾,并且在满足某个条件的情况下,会自动调用,这类方法称为 魔法方法

学习:
1.什么情况下自动调用
2.有什么用,用在哪
3.书写的注意事项

init 方法 **
1.创建对象后自动调用
2.1)给对象添加属性的(初始化方法,构造方法; 
  2)某些代码每次创建代码后,都要执行,就可以将这行代码写在__int__方法
3.注意事项
  1)不要写错
  2)如果init方法中,存在除了self之外的参数,在创建对象的时候必须传实参值
  • 不带参数
'''
    猫类,属性 name age showa-info(输出属性信息)

'''

class Cat:

    # 定义添加属性的方法

    def __init__(self):
        self.name = '蓝猫'  # 给对象添加name属性
        self.age = 2   # 给对象添加age属性

    # 下方代码只是为了验证该方法调用,实际代码不要书写

        print('我是__init__,我被调用了')
    #输出属性信息
    def show_info(self):
        print(f'小猫的名字是:{self.name},年龄是:{self.age}')

# 创建对象,不要在自己类缩进中创建

blue_cat  = Cat()
blue = blue_cat  # 不是创建对象
blue.show_info()


  • 带参数
'''
    猫类,属性 name age showa-info(输出属性信息)
'''

class Cat:
    # 定义添加属性的方法
    def __init__(self,name,age): # 创建对象后调用
        self.name = name  # 给对象添加name属性
        self.age = age   # 给对象添加age属性

    #输出属性信息
    def show_info(self):
        print(f'小猫的名字是:{self.name},年龄是:{self.age}')

# 创建对象,不要在自己类缩进中创建
blue_cat  = Cat('蓝猫',2)
blue = blue_cat  # 不是创建对象
blue.show_info()

# 创建黑猫
black_cat = Cat('黑猫',3) # 创建对象
black_cat.show_info()

# 小猫的名字是:蓝猫,年龄是:2
# 小猫的名字是:黑猫,年龄是:3
str 方法 *
1。什么情况下调用
 > 使用print(对象)  打印对象的时候 会自动调用
2.有什么用,用在哪
 > 在这个方法中一般书写对象的 属性信息的,即打印对象的时候想要查看什么信息,在这个方法中进行定义
3.书写的注意事项
 > 这个方法必须返回 一个字符串

就是输出信息的
'''
    猫类,属性 name age showa-info(输出属性信息)
'''

class Cat:
    # 定义添加属性的方法
    def __init__(self,name,age):
        self.name = name  # 给对象添加name属性
        self.age = age   # 给对象添加age属性


    def __str__(self):
        # 必须返回一个字符串
        return f'小猫的名字是:{self.name},年龄是:{self.age}'  # 当print时想返回啥就写出啥
# 创建对象,不要在自己类缩进中创建
blue_cat  = Cat('蓝猫',2)
print(blue_cat)


del 方法 0颗*
init__方法,创建对象之后,会自动调用

__del__方法,对象被销毁时,自动调用

调用场景:
1.调用场景,程序代码运行结束 所有对象都被销毁
2.调用场景:直接使用del删除对象(如果对象有多个名字或者多个对象引用引用一个对象,需要把所有的对象都删除
class Demo:
    def __init__(self,name):
        print('我是__init__,我被调用')
        self.name=name
    def __del__(self):
        print(f'{self.name}没了,给他处理后事')

Demo('a')

a = Demo('a')

b= Demo('b')

del a  # 删除销毁 对象
print('代码运行结束')

# 我是__init__,我被调用
# a没了,给他处理后事
# 我是__init__,我被调用
# 我是__init__,我被调用
# a没了,给他处理后事
# 代码运行结束
# b没了,给他处理后事

15.10、案例

  • 案例一:

需求:

1.小明体重85.0公斤

2.小名每次跑步会减肥0.5公斤

3.小明每次吃东西体重会增加1公斤

类名:人类(person
属性:姓名(name) 体重(height)
方法:跑步(run) 
    吃东西(eat) 
    添加属性__init__
    属性信息__str__
class Person:
    def __init__(self,name,weight):
        self.name =name
        self.weight=weight

    def __str__(self):
        return f"姓名:{self.name},体重:{self.weight}kg"

    def run(self):
        print(f'{self.name}跑步5km,体重减少')
        # 减体重,即修改属性
        self.weight-=0.5

    def eat(self):
        print(f'{self.weight}体重增加了')
        self.weight+=1

xm = Person('小明',75)
print(xm)
xm.run()
print(xm)
xm.eat()
print(xm)

输出:
    姓名:小明,体重:75kg
    小明跑步5km,体重减少
    姓名:小明,体重:74.5kg
    74.5体重增加了
    姓名:小明,体重:75.5kg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,今天我们来学习Python中的字典(Dictionary)。 字典是一种无序的、可变的数据类型,它以键值对(key-value)的形式存储数据,其中键(key)必须是唯一的,而值(value)可以是任意数据类型。字典用花括号{}表示,每个键值对之间用逗号隔开。 下面是一个简单的字典示例: ``` my_dict = {'name': '张三', 'age': 18, 'gender': '男'} ``` 这个字典中,'name'、'age'、'gender'就是键,而'张三'、18、'男'就是相应的值。 可以使用`dict()`函数来创建一个字典,也可以使用`{}`来创建一个空字典。 接下来,我们来看一些常用的字典操作。 1. 访问字典元素 可以通过键来访问字典中的元素,例如: ``` print(my_dict['name']) # 输出:张三 ``` 如果键不存在,则会抛出KeyError异常。 2. 修改字典元素 可以通过键来修改字典中的元素,例如: ``` my_dict['age'] = 20 print(my_dict) # 输出:{'name': '张三', 'age': 20, 'gender': '男'} ``` 3. 添加字典元素 可以通过键来添加字典中的元素,例如: ``` my_dict['address'] = '北京市' print(my_dict) # 输出:{'name': '张三', 'age': 20, 'gender': '男', 'address': '北京市'} ``` 4. 删除字典元素 可以通过键来删除字典中的元素,例如: ``` del my_dict['gender'] print(my_dict) # 输出:{'name': '张三', 'age': 20, 'address': '北京市'} ``` 5. 字典长度 可以使用`len()`函数来获取字典的长度,例如: ``` print(len(my_dict)) # 输出:3 ``` 6. 字典遍历 可以使用`items()`方法来遍历字典中的每一个键值对,例如: ``` for key, value in my_dict.items(): print(key, value) ``` 输出: ``` name 张三 age 20 address 北京市 ``` 通过上述操作,我们可以初步了解字典的基本用法。在实际应用中,字典是非常重要的数据类型,它可以用来存储和处理各种复杂的数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值