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'\xe7\x8e\x8b\xe6\x99\xba\xe8\xb6\x85'
b'\xcd\xf5\xd6\xc7\xb3\xac'
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)