一、set #集合
set的定义:集合是无序的,不重复的序列。
1.创建集合
例1:
set() #创建空集合
例2:
li = [11,22,11,22,3] #创建列表li 当执行这条命令时候,python内部自动会去执行list()来进行创建列表
s1 = set(li) #将列表li转换成集合s1
print(s1)
2.操作集合
例:
s1 = {11,22,33}
s2 = {22,33,44}
a = [\'lich\',\'dddd\',999]
1.s1中存在,但是s2中不存在的元组
s1.difference(s2)
2.s1 和s2 中不一致的组成一个set
s1.symmetric_difference(s2)
3.提取s1中存在,s2中不存在的元素,并更新并覆盖s1集合中
s1.difference_update(s2)
4.提取s1 和s2 中不一致的组成一个set 更新并覆盖s1集合中
s1.symmetric_difference_update(s2)
5.移除s1集合中的元素‘22’(当集合中没有该元素时,使用remove 不会有语法报错)
s1.remove(22)
6.移除s1集合中的元素‘22’(当集合中没有该元素时,使用discard 不会有语法报错)
s1.discard(22)
7.随机移除一个元素
s1.pop()
8.取s1 和 s2交集
s1.intersection(s2)
9.取s1 和 s2交集,并覆盖更新到s1
s1.intersection_update(s2)
10.联合/并集,将s1 和s2 合并
s1.union(s2)
11.s1集合中,增加一个元素‘ddd\'
s1.add(\'ddd\')
12.将列表a 全部加入s1集合
s1.update(a)
二、函数
1.自定义函数
发邮件函数
如下:
def send_mail():
try:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
msg = MIMEText(\'邮件正文内容\', \'plain\', \'utf-8\')
msg[\'From\'] = formataddr([\'显示的发件人姓名\', \'发件人邮箱地址\'])
msg[\'To\'] = formataddr([\'显示的收件人姓名\', \'收件人邮箱地址\'])
msg[\'Subject\'] = \'邮件主题\'
server = smtplib.SMTP(\'发件箱公网IP/域名\', 25)
server.login(\'发件人邮箱地址\',\'发件人邮箱密码\') #发件人邮箱和密码
server.sendmail(\'发件人邮箱地址\', [\'收件人邮箱地址\', ], msg.as_string()) #前者邮箱为发件者邮箱,后者为收件人邮箱
server.quit()
except:
#发送失败时候执行
return False
else:
#发送成功时候执行
return True
ret = send_mail()
if ret == True:
print(\'发送成功\')
else:
print(\'发送失败\')
定义一个函数:
1.def 是关键字,用于创建函数
2.def 函数名(): #这是标准函数格
3.函数体 #函数体中可以实现该函数的具体功能
4.返回值 #该函数执行后的结果
****定义函数后,函数不会被执行,一旦被调用后 才会被执行****
****在函数中,一旦 执行了return后,函数不在往下执行,函数终止****
2.函数中的参数
1.普通参数 #(如果给某个参数设置默认参数的话,这个形式参数必须要放到参数列表的最后)
2.默认参数
3.指定参数
4.动态参数
5.万能参数 #(*在前面,**在后面)
* (可以接受任意个 实际参数) 默认将传入的参数,全部放入元祖中。 当传值时,f1(*[1,2,3,4,5])
** (直接赋值) 默认将传入的参数,全部放入字典中。
例1:
li = \'lich\'
f1(*li) #内部做了个for循环,把每一个字母作为一个元素
f1(li) #直接把li的值当作一个元素
例2:
def f1(**args):
print(args,type(args))
f1(n1=\'lich\',n2=20) #**进入字典模式,把n1 和n2的值进行赋值,n1是key ,lich是value
例3: 万能参数
def f1(*args,**kwargs):
print(args)
print(kwargs)
f1(11,111,333,4,n1=\'kkk\',n2=\'ddd\')
3.函数补充内容(一)
a.函数的创建,以下面创建的为准,从上至下
b.函数中传递的是引用
c.全局变量(均可读,赋值时先global+变量名,全局变量必须大写,对于列表、字典等特殊情况,只能进行修改值,不能进行赋值)
例1:
def f1(a1):
a1.append(999)
li = [1,2,3,4]
f1(li)
print(li)
#####函数中传递的值 是引用,所以a1=li=[1,2,3,4,999]
例2:
name = \'lich\'
name2 = [1,2,3,4]
def f1():
global name #修改全局变量重新赋值的开关
name = \'alex\' #修改了全局变量name
def f2():
print(name2)
name2.append(999) #对于特殊的,‘列表’、‘字典’、‘元祖’ 可以直接修改,但是不可重新赋值
***自己本身函数体中的变量,只能在本函数体中进行调用,所以f2中的name 压根没有定义,所以无法调用;如果定义了全局变量后,在每个函数体中分别调用***
***如果在自己函数体中定义了name后,在本函数体中调用name时,优先调用自己本函数体中的变量,如果本函数体没有name变量,则去全局变量中找name变量***
***定义全局变量的时候,一定都要大写***
4.内置函数
#abs() 取绝对值
#all() 如果()中的所有元素都为真,则all()输出为真,只要有一个为False,则all()输出为False
#0 = False , None = False ,空的[]/()/{} = False
#any() 任意有真元素,则any()为真
#acsii() 自动会去执行对象的__repr__方法
#bin() 接收一个十进制,输出一个二进制
#oct() 接收一个十进制,输出一个八进制
#hex() 接收一个十进制,输出一个十六进制
#bool() 布尔值
#bytes() 标准格式:bytes(需要转换的字符串,\'按照什么编码\') 字符串转换成字节类型只能通过bytes来转
*****
对于utf-8 编码 一个汉字占3个字节
对于GBK编码 一个汉字占2个字节
*****
例如:
s = \'李杰\'
bytes(s,encoding=\'utf-8\') #使用utf-8 转换成字节类型
bytes(s,encoding=\'gbk\') #使用utf-8 转换成字节类型
#str() 字节转换成字符串 (在转换成字符串时候,也需要用相同的编码进行转换)
例如:str(bytes(\'李杰\',encoding=\'utf-8\'),encoding=\'utf-8\')
5.文件操作
1.打开文件-操作文件-关闭文件
- f=open(\'db\',\'r\') 只读
- f=open(\'db\',\'w\') 只写,先清空源文件
- f=open(\'db\',\'x\') 如果文件存在,会发生报错;如果不存在,就新建这个文件并只写
- f=open(\'db\',\'a\') 追加
- f=open(\'db\',\'xb\') 告诉python 不要对文件进行编码转换处理,直接输出二进制给我
- f=open(\'db\',\'wb\') 告诉python 不要对文件进行编码转换处理,直接输出二进制给我
- f=open(\'db\',\'rb\') 告诉python 不要对文件进行编码转换处理,直接输出二进制给我
- r+ 可读 可写 (最常用,可以以seek()进行定位,随便在哪写)
- a+ 可读 可写 (每次写的时候,不能定位,只能末尾追加)
- w+ 可读 可写 (将原来内容清空,再进行写入)
- x+ 可读 可写
- r+b 读写都是字节
- ###只要有b 都是字节,没有b 则按字符进行读写
2.操作文件
- read() #无参数,读全部;如有参数,/1.有b 按字节; /2.无b,按字符
- teel() #获取当前指针位置
- seek(1) #跳转到指针指定位置 (按字节来读写)
- write() #写数据,和打开方式也有关系 有b,写字节;无b,写字符。
- close() #关闭
- fileno() #文件描述符
- flush() #强制刷新到硬盘,见pycharm
- readline() #读取第一行
- 在上面命令之后,再输入readline() #则读取第二行了 ,因为指针在移动,所以才读取第二行
- truncate #用来截断,根据seek()的指针位置,将后面所有内容清除
for循环文件对象 f = open(xxx)
for line in f
print(line)
3.关闭文件
- 1.f.close()
例:with open(\'xb\') as f:
pass
- 通过with同时打开n个文件
例:with open(\'db1\') as f1, open(\'db2\') as f2
pass
- 3.替换文件中部分内容
6.三元运算
if 1 == 1:
name = \'alex\'
else:
name = \'sb\'
上下两个一样一样的
name = \'alex\' if 1 == 1 else \'sb\' #三元运算
7.lambdab表达式
例:
def f1(a1):
return a1 + 100
ret = f1(10)
print(ret)
上述简单函数 可以用lambda表达式书写
f2 = lambda a1:a1 +100