玩蛇(Python)笔记之基础Part3

玩蛇(Python)笔记之基础Part1

一.集合

1.set 无序,不重复序列 {}创建,直接写元素

2.set功能 __init__()构造方法,,使用强制转换就会调用此方法

1 set1 = {'year', 'jiujiujiu'}
2 print(type(set1))
3 # 创建集合
4 s = set()  # 创建空集合
5 li = [11, 22, 11, 22]
6 s = set(li)
set

3.集合的基本操作

 1 # 操作集合
 2 s1 = set()
 3 s1.add(123)  # 添加元素
 4 s1.clear()  # 清空set
 5 s2 = s1.copy()  # 浅拷贝
 6 s1.difference(s2)  # s1中存在s2中不存在的元素
 7 s1.symmetric_difference(s2)  # 对称差集 去掉两个set中相同的元素
 8 s1.difference_update(s2)  # 同difference 不过会更新s1
 9 s1.symmetric_difference_update(s2)  # 同symmetric_difference 不过会更新s1
10 s1.discard(1111)  # 移除指定元素 不存在不报错
11 s1.remove(1111)  # 移除指定元素 不存在报错
12 s1.pop()  # 移除随机元素并且获取此元素
13 s1.intersection(s2)  # 取交集
14 s1.intersection_update(s2)  # 取交集并更新
15 s1.issubset(s2)  # 是否为子序列
16 s1.issuperset(s2)  # 是否为父序列
17 s3 = s1.union(s2)  # 取并集
18 s1.update(s2)  # 接收一个可迭代对象循环调用add()
set cmd

4.关于对象的内部特殊函数

1 li = [11, 22, 33]  # list __init__
2 li()  # list __call__
3 li[0]  # list __getitem__
4 li[0] = 123  # list __setitem__
5 del li[1]  # list __delitem__
__xxx__

5.set 小练习 更新字典

 1 old_dic = {
 2     '#1': 4,
 3     '#2': 4,
 4     '#4': 2,
 5 }
 6 new_dic = {
 7     '#1': 4,
 8     '#2': 4,
 9     '#3': 2,
10 }
11 new_set = set(new_dic.keys())
12 old_set = set(old_dic.keys())
13 
14 remove_set = old_set.difference(new_set)
15 add_set = new_set.difference(old_set)
16 update_set = new_set.intersection(old_set)
17 
18 #再根据以上集合 来更新字典
update dic

二.函数

1.什么是函数

1 def f1():  # def关键字,创建函数 函数名 ()
2     pass  # 函数体 返回值 默认返回值是none
func

2.来个发送邮件函数

 1 def sendMail():
 2     import smtplib
 3     from email.mime.text import MIMEText
 4     from email.utils import formataddr
 5     try:
 6         msg = MIMEText('内容', 'plain', 'utf-8')
 7         msg['From'] = formataddr(["YEAR", 'yearzhou93@gmail.com'])
 8         msg['To'] = formataddr(["揍你", '243132373@qq.com'])
 9         msg['Subject'] = "主题"
10 
11         server = smtplib.SMTP("smtp.gmail.com", 25)
12         server.login("yearzhou92@gmail.com", "year93926")
13         server.sendmail('yearzhou92@gmail.com', ['243132373@qq.com', ], msg.as_string())
14         server.quit()
15     except:
16         return False
17     else:
18         return True
19 
20 
21 ret = sendMail()
22 if ret:
23     print('OK')
24 else:
25     print('faild')
sendemail

3.函数变量

  普通参数(严格按照顺序将实际参数传递给形式参数)

  默认参数(必须放置到参数列表的最后)

  指定参数(将实际参数赋值给指定的形式参数)

  * 动态参数 默认将传入的参数放入一个元组中 f(*[11,22,3,4])每一个元素

  ** 动态参数2 默认将传入的参数放入一个字典中 f(**['1':11,'asdf':123])

  万能参数 f(*args,**kwargs) *在前**在后

  函数的参数进行传递的时候是引用还是值 是引用!!!!

  全局变量 作用域问题 所有作用域都可读!! 重新赋值得加上global关键词 特殊的是列表字典可修改但不能重新赋值因为是引用 全局变量大写约定俗成

 1 def sendMail1(xxoo, content, xx='biubiubiu'):  # 形式参数和默认参数 默认参数必须要放到参数列表最后!!!
 2     import smtplib
 3     from email.mime.text import MIMEText
 4     from email.utils import formataddr
 5     try:
 6         msg = MIMEText(content, 'plain', 'utf-8')
 7         msg['From'] = formataddr(["YEAR", 'yearzhou93@gmail.com'])
 8         msg['To'] = formataddr(["揍你", '243132373@qq.com'])
 9         msg['Subject'] = "主题"
10 
11         server = smtplib.SMTP("smtp.gmail.com", 25)
12         server.login("yearzhou92@gmail.com", "year93926")
13         server.sendmail('yearzhou92@gmail.com', [xxoo, ], msg.as_string())
14         server.quit()
15     except:
16         return False
17     else:
18         return True
19 
20 
21 ret = sendMail1('243132373@qq.com', 'SB')  # 普通参数 默认参数
22 
23 while True:
24     em = input("输入邮箱地址:")
25     ret1 = sendMail1(em, 'SB')
26     if ret:
27         print('ok')
28     else:
29         print('doubi')
30 
31 sendMail1(content='jjj', xxoo='jjj')  # 指定参数传参
32 
33 
34 def f2(*args):  # 将接收的n个参数放到一个元组李里
35     print(args)
36 
37 
38 f2(11, 22, 33, 44, 'asdfasdf')
39 li = [11, 22, 33, 44, 55, 'asdfasdf']
40 f2(li)  # 将此列表作为元组的一个元素
41 f2(*li)  # 将此列表所有元素作为元组的一个元素 *其实是对li做一个循环将每个元素分离出来
42 
43 
44 def f3(**args):  #
45     print(args, type(args))
46 
47 
48 f3(name='year')  # 传入键值对作为字典
49 dic = {'name': 'year', 'age': 23}
50 f3(kk=dic)  # 将dic作为一个元素
51 f3(**dic)  # **可以循环将dic里的每一个键值对分离出来
52 
53 
54 def f4(*args, **kwargs):  # 万能参数
55     print(args)
56     print(kwargs)
57 
58 
59 # string的format格式化输出
60 a = 'i am {0},age{1}'.format(*["alex", 234])
61 b = 'i am {name},age{age}'.format(**{'name': 'year', 'age': 123})
62 
63 
64 # 函数的参数进行传递的时候是引用还是值  是引用!!!!
65 def f5(list1):
66     list1.append(999)
67 
68 
69 li = [111, 222, 333, 444]
70 f5(li)
71 print(li)
72 
73 # 全局变量
74 name = 'year'
75 
76 
77 def f6():
78     # name = 'jiujiujiu'
79     global name
80     name = 'jiujiujiu'
81     # 特殊情况 列表字典
82     li.append('adsf')  # 可修改
83     global li  # 重新赋值得用global
84     # li = 'jiujiujiu'
85 
86 
87 print(name)
func

  4.函数式编程小练习

 1 # -*- coding:utf-8 -*-
 2 # Author:YEAR
 3 
 4 
 5 def login(user, pwd):
 6     """
 7     用于用户登录
 8     :param user: 用户输入的用户名
 9     :param pwd: 用户输入的密码
10     :return: true表示成功 False表示失败
11     """
12     f = open("db", 'r')
13     for line in f:
14         line_list = line.strip().split("|")
15         if line_list[0] == user and line_list[1] == pwd:
16             return True
17     return False
18 
19 
20 def register(user, pwd):
21     """
22     用于用户注册
23     :param user: 用户名
24     :param pwd: 密码
25     :return: True注册成功
26     """
27     f = open("db", 'a')
28     temp = user + "|" + pwd
29     f.write(temp)
30     return True
31 
32 
33 def main():
34     t = input("1:登录;2:注册")
35     if t == '1':
36         user = input("请输入用户名")
37         pwd = input("请输出密码")
38         r = login(user, pwd)
39         if r:
40             print("登录成功")
41         else:
42             print("登录失败")
43     else:
44         user = input("请输入用户名")
45         pwd = input("请输出密码")
46         r = register(user, pwd)
47 
48 
49 main()
func

 

三.三元运算lambda表达式内置函数

  1.三元运算,三目运算 简单的ifelse可以用此方式

  2.lambada表达式 简单的function可以用此方式

  3.一些内置函数

 1 name = 'year' if 1 == 1 else 'SB'
 2 # 1.2lambada表达式 简单的function可以用此方式
 3 f2 = lambda a1: a1 + 100
 4 # 2.1内置函数
 5 # abs()绝对值
 6 n = abs(-1)
 7 # all() any()  0,None 负数 空字符串 空列表 空字典 空元组是false
 8 # all接收一个可迭代的对象 有一个是假就是假 所有为真才是真 any为任何一个为真就是真
 9 n = all([11, 22, 33, 44, ''])
10 n = any([11, 22, 33, 44, 55])
11 
12 
13 # ascii() #自动执行对象的__repr__方法
14 class Foo:
15     def __repr__(self):
16         return "111"
17 
18 
19 n = ascii(Foo())
20 
21 # bin() oct() hex() 分别接收十进制转换成2进制8进制16进制
22 print(bin(5))
23 print(oct(7))
24 print(hex(9))
25 # utf-8编码一个汉字三个字节 gbk一个汉字两个字节
26 # 字符串转换成字节类型 用bytes()
27 print(bytes('', encoding='utf-8'))
28 # 字节转换成字符串 用str
29 print(str(bytes('', encoding='utf-8'), encoding='utf-8'))
qqq

 

 四.文件操作

  

 1 # -*- coding:utf-8 -*-
 2 # Author:YEAR
 3 # 打开文件
 4 f1 = open('db', 'r', encoding='utf-8')  # 只读 encoding参数告诉python转化编码
 5 data = f1.read()
 6 print(data, type(data))  # 读出的为字符串类型,python默认做了编码转换将字节转换成了字符串,,
 7 f1.close()
 8 f1 = open('db', 'rb', encoding='utf-8')  # b表示2进制打开不要python做编码转换,写也一样
 9 data = f1.read()
10 print(data, type(data))  # 读出的类型为字节类型
11 f1.close()
12 
13 f2 = open('db', 'w')  # 只写 先清空源文件
14 f3 = open('db', 'x')  # 如果文件存在报错,,不存在创建并写内容
15 f5 = open('db', 'a')  # 追加
16 # +号 文件以可读可写打开
17 f1 = open('db', 'r+',
18           encoding='utf-8')  # 文件位置指针 打开时在最开始 读完后 指针在最后,,再去写的时候会写在最后 python只要你读指针必会变到最后!! 所以写一般用r+不用a+ 也不用w+ w会清空
19 
20 data = f1.read()  # read会按模式去读!!!
21 print(data, type(data))
22 f1.seek(1)  # seek会强行调整文件位置指针位置, 在其中某个位置写会覆盖其后的内容!!!! 永远是按字节方式找位置
23 f1.read(1)
24 f1.tell()  # 获取当前文件指针位置
25 f1.seek(f1.tell())  # 调整指针到指定位置
26 f1.write('888')
27 f1.close()
28 
29 # 操作文件
30 f2.read()  # 无参数读全部 如果有参数 b按字节无b按字符
31 f2.tell()  # 获取当前指针位置
32 f2.seek(1)  # 跳转指针位置 永远按字节
33 f2.write('ss')  # 打开方式有关 有b只能写字节 无b写字符串
34 f2.fileno()  # 文件的数字形式描述符
35 f2.flush()  # 强刷 将写的内容强制刷新到硬盘上 close()会自动刷新
36 f2.isatty()  # 是否是tty设备
37 f2.readable()  # 是否可读
38 f2.seekable()  # 是否可移动指针
39 f2.readline()  # 只读一行
40 f2.truncate()  # 从文件指针位置截断数据 后面的删除
41 
42 for line in f2:  # 迭代文件 一行一行
43     pass
44 # 关闭文件
45 f1.close()
46 with open('db', 'a') as f4:
47     pass
48 with open('db', 'a') as f6, open('db2', 'a') as f7:
49     for line1 in f6:
50         new_str = line1.replace('alex', 'st')
51         f7.write(new_str)
52     pass
file

 

posted @ 2016-11-22 21:13  YEAR~  阅读(150)  评论(0编辑  收藏  举报