Python基础笔记-----------八

一、字典的遍历

1.1第一种方法dict.keys()

# dict.keys()获取字典的所有键
dict = {
    'name': '小龙女', 'age': '20', 'gender': '女'
}
print(dict.keys())

输出结果

dict_keys(['name', 'age', 'gender'])

第二种方法dict.values()

dict = {
    'name': '小龙女', 'age': '20', 'gender': '女'
}
print(dict.values())

输出结果

dict_values(['小龙女', '20', '女'])

第三种方法dict.items()

# dict.items()获取字典的所有键
dict = {
    'name': '小龙女', 'age': '20', 'gender': '女'
}
print(dict.items())
for k, v in dict.items():
    print(k,'=', v)

输出结果

dict_items([('name', '小龙女'), ('age', '20'), ('gender', '女')])
name = 小龙女
age = 20
gender = 女

二、集合

2.1集合的简介

集合的特点

  • 集合只能存储不可变对象
  • 集合中存储的对象是无序的
  • 集合不能出现重复元素

集合的创建
使用set()方法来创建集合

# 使用set()方法创建集合
x = set()
print(type(x))

输出结果

<class 'set'>

集合的去重

# 强制转换为集合的业务场景 去重
list1 = [1, 1, 2, 2, 3, 4, 4]
set3 = set(list1)
print(set3)

集合的使用

  • len() 使用len()来获取集合中元素的数量
set1 = {1,2,3,4,5,6}
print(len(set1))

输出结果

6
  • add()像集合中添加元素
set1 = {1,2,3,4,5,6}
set1.add(8)
print(set1)

输出结果

{1, 2, 3, 4, 5, 6, 8}
  • update()将一个集合中的元素添加到另一个集合当中
set1 = {1,2,3,4,5,6}
set2 = {7,8,9}
set1.update(set2)
print(set1)

输出结果

{1, 2, 3, 4, 5, 6, 7, 8, 9}
  • pop()随机删除集合中的一个元素
set1 = {2,3,4,5,6}
set1.pop()
print(set1)

输出结果

{3, 4, 5, 6}
  • remove() 删除集合中指定的元素
set1 = {4,5,6}
set1.remove(4)
print(set1)

输出结果

 {5, 6}

  • clear() 清空集合
set1 = {4,5,6}
set1.clear()
print(set1)

输出结果

set()

其他方法
在这里插入图片描述

可变类型与不可变类型
可变类型 : 列表 字典 集合 值改变了,但是id不变
不可变类型 字符串 元组 值改变了 ,id就改变了

三、 浅拷贝与深拷贝之间的区别

赋值
在我们开始讨论浅拷贝和深拷贝的区别之前,首先我们必须清楚什么是赋值?

在Python中,所谓的赋值实际上就是对象引用的传递而已,当创建一个对象的时候,再赋值给另外一个变量的时候,并不是赋值给另一个变量。而是把这个变量在地址空间的id地址值传递给另一个变量,简单的说就是拷贝了这个对象的引用。看图片,可能比较容易理解。
在这里插入图片描述
从图中,我们很容易的看到,a和b两个变量在地址空间中是一样。后来,我们又给a增加一个值89之后,a和b两个地址值还是一样。
浅拷贝
浅拷贝是对一个对象父级(外层)的拷贝,并不会拷贝子级(内部)。使用浅拷贝的时候,分为两种情况。
第一种,如果最外层的数据类型是可变的,比如说列表,字典等,浅拷贝会开启新的地址空间去存放。
第二种,如果最外层的数据类型是不可变的,比如元组,字符串等,浅拷贝对象的时候,还是引用对象的地址空间。
在这里插入图片描述
看图,我们就明白的看出,c的最外层是[a,b],可变数据类型,d在浅拷贝的时候,也直接把最外层拿过来。只拷贝最外层,而里面却没有拿到。
在这里插入图片描述

从图片看到,p(m,n)的最外层是元组不可变类型,当q在进行浅拷贝的时候,是直接引用p的地址,而不是再开辟新的地址空间存放
深拷贝
深拷贝对一个对象是所有层次的拷贝(递归),内部和外部都会被拷贝过来。
深拷贝也分两种情况:
第一种,最外层数据类型可变。这个时候,内部和外部的都会拷贝过来。
第二种,外层数据类型不可变,如果里面是可变数据类型,会新开辟地址空间存放。如果内部数据类型不可变,才会如同浅拷贝一样,是对地址的引用。
在这里插入图片描述
楼上的图片是一种最简单的深拷贝,很容易看出,两个id值发生了改变,修改了一方,并不会影响另一方。
在这里插入图片描述
上面是有嵌套的拷贝。可以很明显的看出来,外层和内层的地址空间都发生了改变。在这里插入图片描述
从图片看出,只要内部是可变数据类型,外部是可变的时候,深拷贝会开启新的地址空间存放。修改原本的变量,是不会影响深拷贝之后的。

深拷贝的作用:

减少内存的使用
以后在做数据的清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据。

浅拷贝与深拷贝部分内容来源
原文链接

四、函数

4.1函数的简介

.** 函数简介**
• 函数也是一个对象
• 函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
函数语法

def 函数名([形参1,形参2,形参3....]):
    代码块
``
示例
4.2自定义函数
def fun():
    print('这是我的第一个函数')


fun()
函数对象: fun
调用函数: fun()
4.3函数的参数
def fun(a, b):  # 这个参数叫做形参 也叫形式上的参数
    # a = 1
    # b = 2
    print(a + b)


fun(1, 2)  # 实参 实际参数, 当你调用的时候传递实际参数
fun(45663453, 42452412)

注意
实参可以为任何类型

4.4函数的传参方式

定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效
位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
混合使用位置参数和关键字参数的时候必须将位置参数写到关键字参数前面去

五、作业

  1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
    • 控制姓名长度为6-20
    • 电话号码长度11
    • 性别只能允许输入男或女
    • 每一样信息不允许为空
def name():
    while True:
        name = input('请输入你的姓名:')
        if not 6<=len(name)<=20:
            print('你输入的长度不在范围内,请重新输入')
        else:
            return name
        
def number():
    while True:
        number = input('请输入你的电话号码:')
        if len(number)!=11:
            print('你输入的电话号码长度不符合规范,请重新输入')
        else:
            return number
        
def gender():
    while True:
        gender = input('请输入你的性别:')
        if len(gender)>0 :
            if gender=='男' or gender=='女':
                print("name=",name)
                print("number=",number)
                print("gender=",gender)
                break
            else:
                print('你输入的信息不符合规范,请重新输入')
        else:
            print('你输入的信息不符合规范,请重新输入')
name = name()
number = number()
gender()

  1. 使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21…即: 起始两项均为1,此后的项分别为前两项之和
def list1():
    l = [1, 1]
    while len(l) < 20:
        l.append(l[-1] + l[-2])
    else:
        print('前20的斐波那锲数列:', l)
 

list1()

  1. 编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
def sum():
    sum = 0
    for i in range(1,101):
        sum = sum + i
    print(sum)
sum()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哥哥的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值