set
无须,不重复,可嵌套的集合
1 class set(object): 2 """ 3 set() -> new empty set object 4 set(iterable) -> new set object 5 6 Build an unordered collection of unique elements. 7 """ 8 def add(self, *args, **kwargs): # real signature unknown 9 """ 10 Add an element to a set,添加元素 11 12 This has no effect if the element is already present. 13 """ 14 pass 15 16 def clear(self, *args, **kwargs): # real signature unknown 17 """ Remove all elements from this set. 清除内容""" 18 pass 19 20 def copy(self, *args, **kwargs): # real signature unknown 21 """ Return a shallow copy of a set. 浅拷贝 """ 22 pass 23 24 def difference(self, *args, **kwargs): # real signature unknown 25 """ 26 Return the difference of two or more sets as a new set. A中存在,B中不存在 27 28 (i.e. all elements that are in this set but not the others.) 29 """ 30 pass 31 32 def difference_update(self, *args, **kwargs): # real signature unknown 33 """ Remove all elements of another set from this set. 从当前集合中删除和B中相同的元素""" 34 pass 35 36 def discard(self, *args, **kwargs): # real signature unknown 37 """ 38 Remove an element from a set if it is a member. 39 40 If the element is not a member, do nothing. 移除指定元素,不存在不保错 41 """ 42 pass 43 44 def intersection(self, *args, **kwargs): # real signature unknown 45 """ 46 Return the intersection of two sets as a new set. 交集 47 48 (i.e. all elements that are in both sets.) 49 """ 50 pass 51 52 def intersection_update(self, *args, **kwargs): # real signature unknown 53 """ Update a set with the intersection of itself and another. 取交集并更更新到A中 """ 54 pass 55 56 def isdisjoint(self, *args, **kwargs): # real signature unknown 57 """ Return True if two sets have a null intersection. 如果没有交集,返回True,否则返回False""" 58 pass 59 60 def issubset(self, *args, **kwargs): # real signature unknown 61 """ Report whether another set contains this set. 是否是子序列""" 62 pass 63 64 def issuperset(self, *args, **kwargs): # real signature unknown 65 """ Report whether this set contains another set. 是否是父序列""" 66 pass 67 68 def pop(self, *args, **kwargs): # real signature unknown 69 """ 70 Remove and return an arbitrary set element. 71 Raises KeyError if the set is empty. 移除元素 72 """ 73 pass 74 75 def remove(self, *args, **kwargs): # real signature unknown 76 """ 77 Remove an element from a set; it must be a member. 78 79 If the element is not a member, raise a KeyError. 移除指定元素,不存在保错 80 """ 81 pass 82 83 def symmetric_difference(self, *args, **kwargs): # real signature unknown 84 """ 85 Return the symmetric difference of two sets as a new set. 对称差集 86 87 (i.e. all elements that are in exactly one of the sets.) 88 """ 89 pass 90 91 def symmetric_difference_update(self, *args, **kwargs): # real signature unknown 92 """ Update a set with the symmetric difference of itself and another. 对称差集,并更新到a中 """ 93 pass 94 95 def union(self, *args, **kwargs): # real signature unknown 96 """ 97 Return the union of sets as a new set. 并集 98 99 (i.e. all elements that are in either set.) 100 """ 101 pass 102 103 def update(self, *args, **kwargs): # real signature unknown 104 """ Update a set with the union of itself and others. 更新 """ 105 pass
练习:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:wzc
dic1={
"a":"8",
"b":"4",
"d":"2",
}
dic2={
"a":"4",
"b":"4",
"c":"2",
}
old_dic=set(dic1)
print(old_dic)
new_dic=set(dic2)
print(new_dic)
add_key=old_dic.difference(new_dic)
print(add_key)
del_key=new_dic.difference(old_dic)
print(del_key)
up_key=list(old_dic.intersection(new_dic))
print(up_key)
for i in list(up_key):
#print(dic1[i],dic2[i])
if dic1[i] != dic2[i]:
print(i)
展示结果:
{'a', 'd', 'b'} {'a', 'c', 'b'} {'d'} {'c'} ['a', 'b'] a
函数
定义和使用
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。
def f1(): asdf asdff 1、def关键字,创建函数 2、函数名 3、() 4、函数体 5、返回值
只被定义的时候,函数体不被执行,只有调用的时候才执行
#!/usr/bin/env python # -*- coding: utf-8 -*- # Author:wzc def sendmail(): try: import smtplib from email.mime.text import MIMEText from email.utils import formataddr msg = MIMEText('邮件内容', 'plain', 'utf-8') msg['From'] = formataddr(["wpp",'wpp@126.com']) msg['To'] = formataddr(["走人",'400000000@qq.com']) msg['Subject'] = "主题" server = smtplib.SMTP("smtp.126.com", 25) server.login("wpp@126.com", "密码") server.sendmail('wpp@126.com', ['405348163@qq.com',], msg.as_string()) server.quit() except: return False else: return True sendmail()
这里面的执行顺序是,先执行def,然后在执行sendmail,然后才是执行函数里面的内容
#!/usr/bin/env python # -*- coding: utf-8 -*- # Author:wzc def sendmail(): import smtplib from email.mime.text import MIMEText from email.utils import formataddr msg = MIMEText('邮件内容', 'plain', 'utf-8') msg['From'] = formataddr(["wpp",'wpp@126.com']) msg['To'] = formataddr(["走人",'400000000@qq.com']) msg['Subject'] = "主题" server = smtplib.SMTP("smtp.126.com", 25) server.login("wpp@126.com", "密码") server.sendmail('wpp@126.com', ['405348163@qq.com',], msg.as_string()) server.quit() sendmail()
如果try成功了,执行下面的else,如果上面失败了,执行下面的except
def f1(): print(123) return “123” #在函数中,一执行return,后面的就不被执行 print(456)
参数
#!/usr/bin/env python # -*- coding: utf-8 -*- # Author:wzc def sendmail():... ret=sendmail('wzc')
def 那行的xxoo就叫做形式参数
ret那行的参数叫实际参数
形式参数和实际参数,默认是一一对应的
def send(xx,oo,xxoo="ok"): print(xx,oo,xxoo) return Ture send("www","haha") send("www","haha","nook")
默认参数,默认参数必须放到末尾,否则程序异常
def send(xx,oo): print(xx,oo) send(11,22) send(oo="ha",xx="hei")
结果:
11 22 hei ha
指定参数
def f1(*args): print(args,type(args)) f1(123,123)
结果:
(123, 123) <class 'tuple'>
可以传递多个参数
def f1(*args): print(args,type(args)) li=[11,22,"hah","hh"] f1(li) f1(*li)
结果:
([11, 22, 'hah', 'hh'],) <class 'tuple'> (11, 22, 'hah', 'hh') <class 'tuple'>
如果传的值里面有*,就把传的值的每一个元素,都当作元素的每一个元素
相当做了一个for循环
带*相当于可以接受动态参数
def f1(*args): print(args,type(args))
只有*里面获得的参数会变成元组
def f2(**kwargs): print(kwargs,type(kwargs)) f2(n1="wzc")
结果:
{'n1': 'wzc'} <class 'dict'>
这里面**变成了字典,传值的时候,必须
def f2(**kwargs): print(kwargs,type(kwargs)) dic={"k1":"v1","k2":"v2"} f2(**dic)
结果:
{'k2': 'v2', 'k1': 'v1'} <class 'dict'>
会把字典中的每一个元素赋值进去
万能参数
def f3(*args,**kwargs): print(args,kwargs) f3(1,2,34,w=1,z=2,c=3)
结果:
(1, 2, 34) {'c': 3, 'w': 1, 'z': 2}
自动封装进去
一定是一个*的在前面,2个* 的在后面
这就是上面讲到的五种参数
#!/usr/bin/env python # -*- coding: utf-8 -*- # Author:wzc s1="i am {0},age {1}".format("wzc",18) print(s1)
结果:
i am wzc,age 18
{0}和{1}这个叫做站位符
#!/usr/bin/env python # -*- coding: utf-8 -*- # Author:wzc s1="i am {0},age {1}".format("wzc",18) print(s1) a=["wzc",18] s2="i am {0},age {1}".format(*a) print(s2)
结果:
i am wzc,age 18 i am wzc,age 18
这样传参的时候,必须要写上name和age,这个没有顺序
#!/usr/bin/env python # -*- coding: utf-8 -*- # Author:wzc s1="i am {0},age {1}".format("wzc",18) print(s1) a=["wzc",18] s2="i am {0},age {1}".format(*a) print(s2) s3="i am {name},age {age}".format(name="wzc",age=18,) print(s3) dic={ "name":"wzc", "age":18 } s4="i am {name},age {age}".format(**dic) print(s4)
结果:
i am wzc,age 18 i am wzc,age 18 i am wzc,age 18 i am wzc,age 18
python在传参数的时候,是传递参数还是传递引用?
def f2(a1): a1.append(99) li=[11,22,33] f2(li) print(li)
结果:
[11, 22, 33, 99]
这样就可以确认,在传参数的时候是传一个引用,图2
def name(): name="wzc" print(name)
作用域,函数只能在作用域里面使用
全局变量,在所有的作用域都可读
NAME="wzc" def w1(): print("name:",NAME) global NAME NAME="www" def w2(): print("name:",NAME) print(id(NAME)) w1() print(id(NAME)) w2()
结果:
7135728 name: wzc 7135952 name: www
想要对全局变量重新赋值,先使用global
特殊:列表字典,可修改,不可重新赋值
全局变量,在定义的时候全部要用大写,潜规则
三元运算
红色框是条件
name="wzc" if 1 == 1 else "niubi" print(name)
结果:
wzc
如果1==1成立,name=wzc,否则name=niubi
对if 。。。 else的简写
def f1(a1): return (a1+100) r1=f1(9) print(r1) f2=lambda a1:a1+100 r2=f2(10) print(r2)
结果:
109 110
lambda表达式
简单的函数
n1=abs(-1) print(n1)
结果:
1
#0,None,"",[],{} #print(bool()) all()
结果:
Fales
这些的布尔值都是假的
n2=all([1,2,3,None]) print(n)
结果:
Fales
n4=any([1,0,""]) print(n4)
结果:
True
只要有真就为真
print(bin(10)) print(oct(10)) print(hex(10))
结果:
0b1010 0o12 0xa
二进制
八进制
十六进制
ss="王智超" nn=bytes(ss,encoding="utf-8") print(nn) nnq=bytes(ss,encoding="gbk") print(nnq)
结果:
b'xe7x8ex8bxe6x99xbaxe8xb6x85' b'xcdxf5xd6xc7xb3xac'
f=open("db.txt","r+",encoding="utf-8") # n=f.read() # print(n,type(n)) data=f.read(1) print(f.tell()) f.seek(f.tell()) f.write("888") f.close()
结果:
1
文件操作
f=open("db.txt","r+",encoding="utf-8")
python3里面新加的,如果文件存在报错,不存在创建并写内容,和w一样,只能写
在打开的时候,使用rb就告诉python直接用二进制进行读取。
f=open("db.txt","rb")
f.seek()主动的把指针调到某个位置,永远是以字节去找位置,不管是不是中文
print(f.tell())
获取当前指针的位置,永远是字节
a+,指针永远是在最后面,因为是追加
w+,先清空,然后才能读写
2、操作文件
# read() # 无参数,读全部;有参数,
# b,按字节
# 无b,按字符
# tell() 获取当前指针位置(字节)
# seek(1) 指针跳转到指定位置(字节)
# write() 写数据,b,字节;无b,字符
# close
# fileno
# flush 强刷
# readline 仅读取一行
# truncate 截断,指针为后的清空
# for循环文件对象 f = open(xxx)
# for line in f:
# print(line)