list与字典互换的技巧:
info = {} for tt in soup.select('.trl-item1'): value, key = tt.text.strip().split() # 这里value, key 等于['aaa', 'bbb']这样的一个list info[key] = value
===========================================================
map使用:
map函数会对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含了所有函数调用的结果的一个列表
counters = [1, 2, 3, 4] updated = [] for x in counters: updated.append(x + 10) updated [11, 12, 13, 14] def inc(x): return x + 10 list(map(inc, counters)) [11, 12, 13, 14]
def abc(a, b, c): return a*10000 + b*100 + c list1 = [11,22,33] list2 = [44,55,66] list3 = [77,88,99] map(abc,list1,list2,list3) [114477, 225588, 336699]
===========================================================
set 与list近似,但set是无序,不重复的序列
se = {"123", "456"}
s1 = {11, 22, 33} s2 = {22, 33, 44} s3 = s1.difference(S2) # A中存在, B中不存在 print(s3) {11} s3 = s2.difference(s1) print(s3) {44}
===========================================================
函数
def email(): print("我要发邮件“) return True ret = email() # 执行函数 # 函数return后面的值赋给ret # 如果没有设置return, 默认返回None, 这样就可以根据返回的使用if判断函数是否成功
形参和实参 Parameters and arguments
def dosomething(do): ... ... ret = dosomething("drive") # do为形式参数 # drive为实际参数
有多少个形参就要传递多少个实参
def dosomething(first, second, three): ... ... ret = dosomething(second = "drive", three = "test", first = "one") # 可以通过指定实形参出入实参,默认是一一对应
默认参数
def dosomething (do = 'drive'): ... ... ret = dosomething() # 形参指定默认参数,当直接调用不传入参数的话,直接使用默认参数
动态参数
def dosomething(*do): ... ... dosomething(drive, stop, drive) # 当形参加上*就成为动态参数,可以无限传入参数,作为元组tuple def dosomething(**do): ... ... dosomething(k1='drive', k2='stop', k3='drive') # 当两个星的时候接收字典的方式 def dosomething(*do, **dodo): print(do, type(do)) print(dodo, type(dodo) dosomething(11,22,33,k1=123,k2=321) # 使用*和**组合就可以既使用元祖又可以使用字典
*元组
**字典
def f1(*arges, **kwargs)
邮件实例
import smtplib from email.mime.text import MIMEText from email.utils import formataddr msg = MIMEText('邮件内容', 'plain', 'utf-8') msg['From'] = formataddr(["武沛齐",'wptawy@126.com']) msg['To'] = formataddr(["走人",'424662508@qq.com']) msg['Subject'] = "主题" server = smtplib.SMTP("smtp.126.com", 25) server.login("wptawy@126.com", "邮箱密码") server.sendmail('wptawy@126.com', ['424662508@qq.com',], msg.as_string()) server.quit() 发送邮件实例
函数中只要执行return后就会直接跳出
===========================================================
三元表达式
if 1 ==1: name = "alex" else: name = "SB" ==equal== name = "alex" if 1 == 1 else "SB"
lambda表达式(对简单赋值进行操作) - lambda argument1, argument2... argumentN:expression using arguments
同样的函数表达式不同的写法
def f1(arg): return arg + 100 result = f1(10) print(result)
==equal== f1 = lambda arg: arg + 100 result = f1(10) print(result)
lambda表达式默认包含return功能,自动会返回函数
=========================================================
abs() - 取绝对值
n = abs(-1) print(n)
=========================================================
return
当函数运行到return时,会将return的数值返回出函数,并且结束函数
如果函数没有return世,python会自动返回none值
==========================================================
all() - 所有为真,才为真
# 0, None, "", [], {}, () 这些都为False # 可以通过print(bool("")) 这样的方法进行判断 n = all([1, 2, 3]) print(n) # 返回True.
any() - 任何一个为真,即为真
n = any([[], 0, 1] ) print(n) # 返回True.
==========================================================
ascii() - 自动执行对象的__str__方法 (不常用)
==========================================================
bin() - 接收十进制返回二进制
print(bin(5))
oct() - 接收十进制返回八进制
hex() - 接收十进制返回十六进制
==========================================================
bytes() - 转换的字符串,按照什么编码
utf8 一个汉字占用三个字节 (一个字节8位), gbk 一个汉字占用二个字节
s = "李杰" # 一个汉字占用三个字节 (一个字节8位)
01010101 01010101 01010101 01010101 01010101 01010101
s = "李杰" n = bytes(s, encoding='utf8') print(n)
n = bytes(s, encoding='gbk') print(n)
str() - 字节转化成字符串
str(bytes("李杰", encoding='utf8'))
==========================================================
open() - 打开文件操作( 1. 打开文件 2. 操作文件 3. 关闭文件)
with open('file') as f: pass # 使用with方式操作文件,不需要另外添加f.close()的方式来关闭文件
1. 打开文件:
file = open('db', 'r') # 只读文件 file = open('db', 'w') # 只写文件,写前全部清空 file = open('db', 'x') # python3.0新功能,如果这个文件存在,报错。如果不存在,创建并只写。 file = open('db', 'a') # 追加
file = open('db', 'rb') # 使用二进制的方式读取,读出来时字节
file = open('db', 'r', endcoding="utf-8) # 如果文件出现乱码,可能在endcoding这里没有选对编码 data = f.read() # 一次所有的文件全部读出来 print(data, type(data)) f.close
file = open('db', 'r+') # 读写 file = open('db', 'w+') # 读写 file = open('db', 'a+') # 读写 file = open('db', 'r+b) # r+b 以字节的方式来操作
f = open('db', 'r+', encoding="utf-8") #如果打开模式无b,则read,按照字符读取 data = f.read(1) print(f.tell()) # tell当前指针所在的位置(字节) f.seek(f.tell()) # 调整当前指着你的位置(字节),当前指针位置开始覆盖 f.write("777") f.close
2. 操作文件
read() # 无参数,全部读取 # 有参数,b: 按字节读取 无b:按字符读取 tell() # 获取当前指针位置(字节) seek(1) # 跳转到指针位置(字节) write() # 写数据,b: 写字节;无b,写字符 close() # 关闭文件 flush # 强刷文件 readline() # 仅读取一行 truncate() # 截断,根据指针位置后的内容清空 for 循环文件对象: f = open(xxx) for line in f: print(line)
with 文件操作,同打开N个文件:
with expression [as variable]:
with-block
with open('db') as f: # 打开一个文件,不用使用close()函数,文件会自动关闭 pass # 同时打开两个文件,读取一个文件,复制到另外一个文件内 with open('db1', 'r') as f1, open('db2', 'w') as f2: # 同时打开两个文件 times = 0 for line in f1: times +=1 if times <=10: f2.write(line) else: break # 同时打开两个文件,将文件里面的内容,Eric替代alex。 with open('db1', 'r', encoding='utf-8) as f1, open('db2', 'w', encoding='utf-8') as f2: for line in f1: new_str = line.replace('alex', 'Eric') f2.write(new_str)