day5 - set、函数

就上次的一些所学内容:

    list(列表)

    tuple(元组):内容不可以修改

    dict(字典)

新添加:set :无序且不重复的集合

             1.创建:

                    s= set()

            或

                       s={ 11,22,33} #利用大括号

               2.转换例子:

                       li = [11,22,11,23]

                        s1 = set(li)

                    结果:11,22,33

今天新学习的内容:一些对(列表操作)函数

        def add(self, *args, **kwargs ) 添加元素

        def clear(self, *args, **kwargs) 清除所有元素

               实例:s={1,2,3,4}
print(s)
s.add(5)
print(s)
s.clear()
print(s)
结果: {1, 2, 3, 4}     原数据
{1, 2, 3, 4, 5}  >> add()

set() >> clear()

def difference(self, *args, **kwargs)   查找A中存在,B中不存在的集合并赋值新变量
def intersection(self, *args, **kwargs) 查找A,B都存在的集合并赋值新变量

def difference_update(self, *args, **kwargs)     查找A中存在,B中不存在的集合并更新

                 实例:A={1,2,3,4}
B={1,3,5}
C=A.difference(B)
print(C)
D=A.intersection(B)
print(D)
A.difference_update(B)
print(A)
结果:{2, 4} >> difference()
{2, 4} >> intersection()

{1,3} >> difference_update()

三目运算:

        变量 = 值1 if 条件:else 值2  》》类c表达式:if 条件  值1:值2

实例:
name="A" if 1==2 else "B"
print(name)

结果:B

变量背景(涉及值得地址的存在,还是不太懂):

    在str中数据是不可增删改,但是在list、字典中存在增删改        ===》即其值是否永远指向一个内存地址

    但list中的数据的增删改是不确定的,即内存是不确定的,所以存在了和c 的链表的存在

    但list中改中某个数据,新数据和旧的数据都还存在内存,变的是list列表的链表到新数据

深浅拷贝:

        1.数字和字符串

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝永远指向同一个内存地址。   

         2.其他基本数据类型

赋值:
只是创建一个变量,改变量指向原来的内存地址
浅拷贝:
在内存中只额外创建第一层数据
    实例:import copy
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n2=copy.copy(n1)
print(id(n1["k1"]),id(n2["k1"]))
print(id(n1),id(n2))

结果:467723739800 467723739800      n1["k1"]和n2["k1"]内存地址相同
467722861160 467722861232 n1和n2地址不同

深拷贝:

在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

函数:

        定义函数:

                def 函数(形参)

        执行函数:

                函数名(实参)

        指定函数:     实参的位置可变

                函数名(形参=实参.....)

        默认参数: 默认参数是放在参数尾部

                def   函数名(形参1,形参2=x)

              调用:函数名(实参1) ==》在实参2中可写可不写,不写默认:x

        1.动态参数:

                def  函数名(*形参)

            调用:函数名(实参)   ===》实参可有多个,其传值可为基本数据类型

        2.动态参数:

                   def  函数名(**形参)

            调用:函数名(实参)   ===》实参可有多个,其传值为字典形式

                    例子:函数名 (“k1”=123,”k2”=456)

                     结果:{“k1”:123,“k2”:456} 

           3.动态参数:

                    def 函数名(函数,*形参,**形参)

            调用:函数名(实参)   ==》实参可以为1、2或者12组合

                        *:元组,元组的元素

                        **:字典,字典的元素

            4.动态参数结果区别:
实例: def f1(*args):
    print(args,type(args))
      li=[11,22,33,44]
f1(li)
f1(*li)   加* 是传入地址 或 **args **li
结果:([11, 22, 33, 44],) <class 'tuple'>  

(11, 22, 33, 44) <class 'tuple'>

            5.全局变量、局部变量

                在函数内为局部变量
函数外为全局变量(大写),
在函数内修改全局变量:global 全局变量

猜你喜欢

转载自blog.csdn.net/tang12060/article/details/80593880