EffectivePython:str和bytes,生成器表达式,enumerate
来源:互联网 发布:鹏业算量软件好吗 编辑:程序博客网 时间:2024/05/22 12:12
1.用pythonic方式思考
"""查看版本"""import sysprint(sys.version_info)print(sys.version)
sys.version_info(major=3, minor=6, micro=3, releaselevel='final', serial=0)3.6.3 |Anaconda custom (64-bit)| (default, Oct 15 2017, 03:27:45) [MSC v.1900 64 bit (AMD64)]
"""修改路径"""import osos.getcwd()os.chdir(r'C:\Users\Xiaowang Zhang\Desktop\code')
"""检测代码风格"""from pylint import epylint as lint(pylint_stdout, pylint_stderr) = lint.py_run('rule3_ml.py',return_std=True)
3.bytes str and unicode
- python3有两种表示字符序列的类型:bytes和str。bytes的实例包含的是原始的字节;str的实例包含的是unicode字符。
- python2也有两种表示,str和unicode。str实例包含的是原始的字节,unicode包含的是unicode字符。
- Encode(编码):把unicode转成二进制数据。
- Decode(解码):把二进制转成unicode数据。
tip:Python程序的核心部分应该使用unicode字符类型。
"""python3中接受bytes和str返回str的函数"""def to_str(bytes_or_str): if isinstance(bytes_or_str, bytes): value = bytes_or_str.decode('utf-8') else: value = bytes_or_str return value"""python3中接受bytes和str返回bytes的函数"""def to_bytes(bytes_or_str): if isinstance(bytes_or_str, str): value = bytes_or_str.encode('utf-8'): else: value = bytes_or_str return value
9.生成器表达式改写数据量较大的列表推导
- 把实现列表推导所用的写法放在一对圆括号里,就是生成器表达式了。
"""例子"""value = [len(x) for x in open('/tmp/my_file.txt')]print(value)"""输出:[100,57,........]""""""如果文件过大,使用生成器表达式"""it = (len(x) for x in open('/tmp/my_file.txt'))"""打印的结果是generator"""print(it)"""使用内置的next函数取出生成器中的下一个值"""print(next(it))print(next(it))"""输出:100 57"""
10.尽量用enumerate取代range
from random import *random_bits = 0for i in range(64): if randint(0, 1): random_bits |= 1 << i #print(random_bits)"""例子"""flavor_list = ['vanilla', 'chocolate', 'pecan', 'strawberry']for flavor in flavor_list: print('%s is delicious '% flavor)
vanilla is delicious chocolate is delicious pecan is delicious strawberry is delicious
"""迭代list需要索引的时候"""for i in range(len(flavor_list)): flavor = flavor_list[i] print('%d: %s' % (i + 1, flavor))
1: vanilla2: chocolate3: pecan4: strawberry
"""更好的办法是用enumerate"""for i, flavor in enumerate(flavor_list): print('%d: %s' % (i + 1, flavor))
1: vanilla2: chocolate3: pecan4: strawberry
- enumerate可以把各种迭代器包装成生成器。
- 生成器每次产生一堆输出值,前者表示循环下标,后者表示从迭代器中的下一个序列的元素。
"""还可以指定enumerate函数开始计数时所用的值"""for i, flavor in enumerate(flavor_list, 1): print('%d: %s' % (i, flavor))
1: vanilla2: chocolate3: pecan4: strawberry
阅读全文
1 0
- EffectivePython:str和bytes,生成器表达式,enumerate
- bytes和str转换函数
- bytes & str
- EffectivePython-函数:闭包、生成器、迭代器协议
- Python str和bytes的相互转换
- Python3中的bytes和str类型
- 浅析Python3中的bytes和str类型
- 浅析Python3中的bytes和str类型
- python3.2的bytes和str数据拼接
- 了解python中bytes,str和unicode的区别
- python str bytes转换
- python str转bytes
- 爬虫学习01 str类型和bytes类型 Unicode UTF8 ASCII 的补充 str bytes如何转化
- 关于python2中的unicode和str以及python3中的str和bytes
- python3 bytes、str的区别
- Python中的str与bytes
- TypeError: expected bytes, not str
- Day24-列表和生成器表达式
- Linux下增加Sawp分区
- 服务器更新软件
- jdk版本导致的DB2异常:必需的字符转换器不可用。ERRORCODE=-4220, SQLSTATE=null
- oracle的时间函数
- 美国财政部报告:DLT数据存储引起监管担忧
- EffectivePython:str和bytes,生成器表达式,enumerate
- JCE cannot authenticate the provider BC
- Fedora 11忘记密码的解决办法
- 在windows下切换python2或python3创建scrapy
- Tomcat8.5 不能进入Manager App
- Android-关于传感器你需要知道的
- replace与replaceAll的区别
- linux添加环境变量对/etc/profile文件进行修改过后导致命令用不了
- 数据库DDL,DML,DCL简要概述