一, 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
来源: http://www.bubuko.com/infodetail-2655518.html