|
一、SET集合
set集合是无序的,不重复的。
1.创建
第一种:
s1 = {"123","456"} #集合用大括号包起来,字符串用逗号隔开
第二种:
li = [11,22,33]
s2 = set(li)
#当执行set()的时候,实际上是调用set的__init__来对li里边的元素做一个for循环,然后转成set。
|
| 2.功能
1.s1.add() #增加元素
2.s1.clear() #清空集合内容
3.s1.copy()#浅复制
4.s1.difference #a中存在,b中不存在
5.s1.symmetric_difference #a中存在,b中不存在拿出来 和 b中存在,a中不存在拿出来(也称对称差级)
6.s1.difference_update #a中存在,b中不存在拿出来,然后重新赋值给左边的变量s1
7.s1.symmetric_difference_update #a中存在,b中不存在拿出来 和 b中存在,a中不存在拿出来,然后重新赋值给左边的变量s1
8.s1.discard #移除特定元素,如果没有元素不报错
9.s1.remove #移动特定元素,如果没有会报错
10.s1.pop #随机移除,把移除的值赋给变量
11.s1.intersection #取两个变量的交集(就是两个变量里边相同的元素)
12.s1.inteersection_update #取两个变量的交集,然后赋值给左边的变量s1
13.s1.isdisjoint #如果有交集,返回True,否则返回False
14.s1.issubset #一个变量是否是另一个变量的子序列
15.s1.union #并集,就是把两个变量的元素联合起来
16.s1.update #批量添加元素,接收一个可迭代的对象,例如:列表、元祖、字符串
|
| 3.集合练习题
有两个字典,现在要把新的字典里边的内容添加到旧的字典里,找出
1.应该删除的项
2.应该添加的项
3.应该更新的项
需求分析:
1.首先确定可以用set功能来实现
2.需要把字典的keys读取出来转成set集合
3.找出旧字典应该删除、添加、更新的项
#旧字典
old_dict = {
'#1':8,
'#2':4,
'#4':2,
}
#新字典
new_dict = {
'#1':4,
'#2':4,
'#3':2,
}
old_set = set(old_dict.keys()) #把旧字典keys转换成集合
new_set = set(new_dict.keys()) #把新字典keys转换成集合
remove_set = old_set.difference(new_set) #找出应该删除的
add_set = new_set.difference(old_set) #找出应该添加的
update_set = old_set.intersection(new_set) #找出应该更新的
print(remove_set,add_set,update_set) #打印找出的删除、添加、更新
输出:
{'#4'} {'#3'} {'#1', '#2'} | 二、函数
函数分为自定义函数和内置函数
1、定义函数
1.函数关键字def
2.函数名
3.写个()
4.函数体(具体内容)
5.返回值
6.自定义的函数自己不被执行
例如:
def aa():
函数体
| 在PyCharm中可以点击代码左端空白处,可以打断点执行代码,查看代码执行流程。 | 2、执行函数返回值
函数利用try retrun来实现返回值。
def aa():
try :
函数体
except:
return False #失败返回False
else:
return True #成功返回True
注意:
1.在函数中一旦执行了return,函数的执行过程立即终止,不会再往下走!
2.函数中如果没有指定return,默认python返回一个return值为None
| 3、函数的基本参数
1.普通参数 #一一对应,严格按照顺序执行,将实际参数赋值给行为参数;
2.默认参数 #当函数执行的时候没有给变量赋值的时候,使用默认参数;设置默认参数的行为参数要放到最后,可以连着多个;
3.指定参数 #给指定的参数赋值
(函数冒号左边括号里边的叫做行为参数;执行函数的时候,括号里边的参数叫做实际参数。)
| 4、函数的动态参数
1.行为参数之前加一个* 就可以接受多个实际参数(接收迭代参数列表、元组、字符串,不接收字典)输出格式为元祖,按顺序处理。
def f1(*args):
print ("abc","123")
例一:当实际参数前不加*时,函数会把迭代参数整体作为一个元素放到元祖里。
def f1(*args):
print (args)
li = [11,22]
f1(li)
输出:([11,22])
例二:当实际参数前也加一个*时,函数会对迭代参数里边的所有元做一个for循环,然后赋值到元祖里;
def f1(*args):
print (args) li = [11,22] f1(*li) 输出:(11,22) 2.行为参数之前加两个* 就可以接受字典参数,输出格式为字典,处理key、values键值对
def f1(**args):
print (args)
f1('n1'='aaa','n2'='ddd')
输出:{'n1':'aaa','n2':'ddd'}
3.万能参数(就是*args和**kwargs一起使用,它会自动识别是列表还是字典,然后赋值给*args和**kwargs)
|
| 5、利用动态函数实现format功能
格式:str.format
功能:实现格式化输出方法(同万能参数功能,都是通过*args和**kwargs)
例如:s = "i am {0},age{}".format('abc','123') (括号里边的abc和123也可以写成一个列表)
s = "i am {0},age{}".format(*['abc','123'])
输出:i am abc,age 123
| 6、函数内容补充
例一:
def f1(a1,a2):
return a1+a2
def f1(a1,a2): #当运行到这里的时候f1已经重新赋值,内存段也不一样了,
return a1*a2
result = f1(8*8)
print (result) #所以结果是64
|
例二:
python函数中,当传递参数的时候,python默认为引用参数,不是重新复制参数赋值。
def f1(a1):
a1.append(111)
li= [11,22]
f1(li) #这里的li为引用,不是重新赋值
print (li) #结果为[11,22,999]
| 7、全局变量
1.作用域内的变量只能作用域内使用;
2.全局变量所有作用域都可以读取,但不能修改;
3.局部变量优先于全局变量;
4.作用域要修改变量,需要在作用域中加global+变量名;
5.如果全局变量是列表或者字典时,作用域不加global可直接添加元素,但不能重新赋值;如果重新赋值,要加global+变量名;
(注意:所有全局变量名要都用大写,方便区分)
| 8、函数式编程实现登录和注册
三、三元运算(也称三目运算,if else的简写)
用来简单的if else的运用;
例如:
常规的写法:
if 1 == 1:
name = 'aaa'
else:
name = 'bbb'
三元运算写法:
name = 'aaa' if 1 == 1 else 'bbb'
|
| 四、lambda表达式
用作简单函数的简写,对简单的函数赋值做操作,只能写一行。
例如:
def f1(a):
return a+100
lambda写法:
f1 = lambda 1: a+100 #return默认隐含了
| 五、内置函数
1. .abs() #取绝对值
2. .all() #接收可以被迭代的对象。当括号里所有为真时,为真;括号里只有一个为假时,就为假。
3. .any() #括号里只要有真,就为真。
4. .ascii() #自动执行某对象的的__str__方式
5. .bin() #接收十进制,然后转成二进制 0b代表二进制
6. .oct() #接收十进制,然后转成八进制 0o代表八进制
7. .nex() #接收十进制,然后转成十六进制 0x代表十六进制
8. .bool() #真或假、True或False
9. .bytes() #把字符串转成字节类型 例如:bytes(s,encoding"utf-8")
10. .bytearry() #把字符串转成字节类型,放到一个列表里。
| 五、文件操作
1.打开文件
f = open ('文件名字','什么方式')
打开文件的方式有:
1.r 只读
2.w 只写(清空之后再写)
3.x (如果文件存在,就报错;如果不存在,就创建再写内容)
4.a 追加 永远是追加到光标所在位置的最后
5.r+ 读写
6.w+ 先清空再写读
7.a+ 读写,但是永远是追加到最后
8.x+ 读写
9.b 以二进制的方式读写
10.b+
2.操作文件(文件操作功能)
1.read()
2.tell()
3.seek()
4.write()
5.close()
6.flush()
7.readable()
8.seekable()
9.readline()
10.readlines()
11.truncate()
12.for循环文件对象
例如;
f = open("aaa.txt",'r=')
for line in f: #会把f里边的一行一行读取出来赋值给line
print (line)
3.with 同时打开多个文件
with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:
例一:同时打开两个文件,读取第一个文件,同时写入第二个文件,当写到10行时退出;
with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:
times = 0
for line in f1:
times += 1
if times <= 10:
f2.write(line)
else:
break
例二:当有个文件,把文件里边的aaa改成bbb
with open("db1",'r',encoding="utf-8") as f1 ,open('db2','w',encoding="utf-8")as f2:
for line in f1:
new_str = line.replace('aaa','bbb')
f2.write(new_str)
|
|