就上次的一些所学内容:
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 全局变量