基础回顾:
关于Python内置数据结构和库的最重要的功能,自行查阅:http://docs.python.org
- Python的字符串格式化
- 日期和时间
控制流:
if-elif-else
for循环
while循环
异常处理
三元表达式
数据结构和序列:
元组
元组拆包
元组方法( .count )
列表
添加和删除元素
合并列表
排序
切片
内置的序列函数
enumerate
sorted
zip
reversed
字典(使用大括号,并用冒号分隔key/value)
从序列类型创建字典(字典推导式)
默认值( .setdefault方法 & collections.defaultdict )
字典键的有效类型
集合
Python的集合运算(交、并、差)
推导式
列表、集合以及字典的推导式
嵌套列表推导式
#### def get_counts(sequence): counts = {} for x in sequence: if x in counts: counts[x] += 1 else: counts[x] = 1 return counts #### from collections import defaultdict def get_counts2(sequence): counts = defaultdict(int) for x in sequence: counts[x] += 1 return counts #### ''' 1.Python语言精要 关于Python内置数据结构和库的最重要的功能 http://docs.python.org 变量和按引用传递 二元运算符和比较运算符(is关键字--判断两个引用是否指向同一对象) Python的字符串格式化 日期和时间 控制流 if-elif-else for循环 while循环 异常处理 三元表达式 数据结构和序列 元组 元组拆包 元组方法( .count ) 列表 添加和删除元素 合并列表 排序 切片 内置的序列函数 enumerate sorted zip reversed 字典(使用大括号,并用冒号分隔key/value) 从序列类型创建字典(字典推导式) 默认值( .setdefault方法 & collections.defaultdict ) 字典键的有效类型 集合 Python的集合运算(交、并、差) 列表、集合以及字典的推导式 嵌套列表推导式 使用函数返回多个值 函数亦为对象 生成器(生成器表达式) ''' path = 'C:test.txt' lines = [x.rstrip() for x in open(path)] f = open(path) for line in f: pass ####生成器#### def make_change(amount, coins=[1, 5, 10, 25], hand=None): hand = [] if hand is None else hand if amount == 0: yield hand for coin in coins: if coin > amount or (len(hand) > 0 and hand[-1] < coin): continue for result in make_change(amount-coin, coins=coins, hand=hand+[coin]): yield result for way in make_change(100, coins=[10, 25, 50]): print way #### ####函数亦为对象#### states = [' Alabama ', 'Georgia!', 'Georgia', 'georgia', 'south carolina##', ' West virginia?', 'New York .', 'China.', 'Beijing...'] import re def clean_stings(strings): result = [] for value in strings: value = value.strip() value = re.sub('[!#?]', '', value) value = value.title() result.append(value) return result clean_stings(states) def remove_punctuation(value): return re.sub('[!?#]', '', value) clean_ops = [str.strip, remove_punctuation, str.title] def clean_stings2(strings, ops): result = [] for value in strings: for function in ops: value = function(value) result.append(value) return result clean_stings2(states, clean_ops) map(remove_punctuation, states) #内置的map函数有点牛逼啊! #### def f(): a = 5 b = 6 c = 7 return a, b, c x, y, z = f() ####推导式#### #列表推导式 strings = ['a', 'as', 'a', 'bad', 'boy', 'Python'] [x.upper() for x in strings] [x.upper() for x in strings if len(x)>2] #字典推导式 dict_map = {key:value for key, value in enumerate(strings)} dict_map = dict((value, key) for key, value in enumerate(strings)) #集合推导式 set_map = {key for key in strings} #嵌套列表推导式 all_data = [['Tom', 'Jerry', 'Lily', 'Lucy', 'Hello,world', 'Jefferson', 'Steven', 'Joe', 'Bill'], ['Susie', 'Cookie', 'Qunar', 'Baidu', 'Notepad', 'Apple', 'Alibaba']] names_of_interset = [] for names in all_data: enough = [name for name in names if name.count('e')>2] names_of_interset.extend(enough) names2 = [name for names in all_data for name in names if name.count('e') > 2] names3 = [name for names in all_data for name in names] #zip seq1 = ['a', 'b', 'c'] seq2 = ['one', 'two', 'three'] zip(seq1, seq2) #zip可以接受任意数量的序列,最终得到的元组数量由最短的序列决定 seq3 = ['True', 'False'] zip(seq1, seq2, seq3) #控制流 if x < 0: print 'It's negative' elif x == 0: print 'Equal to zero' elif 0 < x < 5: print 'Between 0 and 5' else: print 'Positive and larger than 5' #### sequence = [1, 2, None, 4, None, 5] total = 0 for value in sequence: if value is None: continue total += value #### sequence = [1, 2, 0, 4, 6, 5, 2, 1] total_until_5 = 0 for value in sequence: if value == 5: break total_until_5 += value #### #Python三元表达式 value = true_expr if condition else false_expr
用Python下载豆瓣上的音乐
#!/usr/bin/env python # -- coding:utf-8 -- import urllib, sys, gevent, re from gevent import monkey reload(sys) sys.setdefaultencoding('utf8') monkey.patch_all() def encode(s): return s.decode('utf-8').encode(sys.stdout.encoding, 'ignore') def worker(reg, url): response = urllib.urlopen(url) text = response.read() groups = re.finditer(reg, text) m_arr = [] for g in groups: name = encode(g.group(1).strip()) + ".mp3" path = g.group(2).replace('\', '') #print encode(name), path; sys.exit() m_arr.append((name, path)) return m_arr def grun(path, name): urllib.urlretrieve(path, name) if __name__ == '__main__': reg = re.compile('{"name":"(.+?)".+?"rawUrl":"(.+?)",.+?}', re.M) musicArray = worker(reg, "http://site.douban.com/huazhou/") jobs = [] for (name, path) in musicArray: #print name, path jobs.append(gevent.spawn(grun, path, name)) gevent.joinall(jobs)
代码参考地址:使用gevent多线程下载豆瓣音乐
字符串逆序
def reverseWords(s): wordlist = s.split() return ' '.join(wordlist[::-1]) print reverseWords("Haha, just do it")
《 “一些Python片段_2” 》 有 3 条评论
gevent:异步理论与实战
https://mp.weixin.qq.com/s/cPwJvN2Pe9bKI1Lguign0g
关于gevent的Timeout(超时)问题……
https://www.coder4.com/archives/2192
https://www.coder4.com/archives/tag/gevent
Python 3中下载图片的三种方法
https://blog.csdn.net/qq_34504481/article/details/79716106
`
from urllib.request import urlretrieve
urlretrieve(IMAGE_URL, ‘./image/img1.png’)
import requests
r = requests.get(IMAGE_URL)
with open(‘./image/img2.png’, ‘wb’) as f:
f.write(r.content)
import requests
r = requests.get(IMAGE_URL, stream=True)
with open(‘./image/img3.png’, ‘wb’) as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)
`