列表,元组,字典的转换。
list列表是一组可变的元素集合
列表是‘[]‘括号组成的,[]括号包含所有元素,列表的创建可以传递字符串,也可以传递多个字符串来创建列表。如"asd", / "a","b" ...
tuple元组的创建和列表一致,区别在于 元组是以‘()‘创建的,并且元组数据不可变。
dict字典不同于列表和元组,他是一种键值对关系,即key-value,key是唯一的。
字典的作用就是储存一些需要关键字来索引数据的数据结构。
bytes类型转换
如果我们创建一个字符串,并且想把它转换成字节,那么需要用到bytes类型,如:
s = "asd"
bytes(s,encoding="utf-8") 需要指定字符串的自身的编码。否则会出错
dict的formkeys函数可以将列表创建字典的同时,在参数2设置一个共同的值。共享同一块内存,但如果分别赋值不同的值。则改变为分别指向不同的内存。
set -- 集合
set 集合是类似列表,但是不同的是set内不存在重复元素,这是set的天性就是去重。集合内的数据都是唯一的。 set的元素没有固定的顺序,随时变化。
set的函数
s.clear() 清除set元素
s.remove(x) 移除集合内的一个值,如果不存在报错。
s.add(x) 增加一个值
s.pop() 将集合内的自后一个pop并返回。
s.intersection(x) j交集 ,求s和x的交集,就是参数1 有的,同时参数2也有的。a & b
s.issubset(x) 判断x是不是s的子集,就是判断x的元素是否全部都在s中存在,并且s的元素比x多。
s.issuperset(x) 判断s是不是x的父序列
s.symmetric_difference(x) 交叉集- 把s存在的,x不存在的,x存在的。s不存在的一并返回
set.difference(形参1) 差集。求集合和参数1的差集,就是集合有的,参数没有的。,函数会返回差集的数据 = a - b
s.differents_update(x) 求差集的同时将差集数据更新到s
s.union(x) 并集。 == s | b
三目运算-》三元
res = value1 if 条件 else value2 ,如果为真res= value1,否则res = value2
深浅拷贝
对于str,int 的拷贝赋值,地址都是一样的。
对于浅拷贝,仅仅拷贝最外面一层。(不包括数据层,数据层是不拷贝的。因为内存优化机制问题,只要指向的数值一致。那么内存地址都是指向同一个地址)
对于深拷贝,也是不涉及数据层的。深拷贝只是将数据层以外的所有层都拷贝一份。
函数
函数是提高代码复用性的一个数据结构,因为在面向过程里代码往往是复制黏贴,很多代码都是重合的。
所以函数应用而生,为代码的重复利用而设计。
函数就是把实现特定功能的代码写到一个数据结构内,这个数据结构称为函数。
当需要时只需调用即可。
函数已可以传递参数进去,参数有多样:
1 位置参数,位置参数默认在前面。因为 其他参数都有其他功能。
2 默认参数,可以设置一些默认不需要赋值的参数。
3 可变参数,可变参数是用于接收数目不定的参数,因为有时候可以需要接收不确定数量的参数所以可变参数就派上用场了。 *argv
4 关键字参数,关键字参数类似于可变参数,也是可以接收数量不定的参数,不过却别在于关键字参数只接收key=value 这样的形式参数,不是这样形式的参数都是可变参数接收。
对于将一个list对象当做形参传递给函数时,参数传递时 可以直接传递变量,也可以变量前 带一个*号,
对于直接传递 ,函数内部*argv 是一个包含一个list对象的tuple
对于带*号传递,函数内部*argv是一个包含n个元素的tuple
全局变量 & 局部变量
1 全局变量可以在全局范围内使用,但是在局部内不可更改,除非使用golbal关键字声明全局变量。但是这样是不推荐的做法,行业内严禁。
2 局部变量是在函数内定义的或者循环结构内定义的变量,只要循环或函数结束就会删除局部变量。
全局变量推荐大写。
参数一共有几类:
1 普通参数 -> func("a"/variable)
2 指定参数 -> func(p="xxx")
3 默认参数 一般放到最后, def fnc(a,b,c,d=4,e=5)
4 可变参数/动态参数 可以接收数量不定的变量集合, def func(*args) func(1,2,3,4,5)
5 动态关键字参数,可以接收指定参数的形式参数,但是又没有相对应的形参。