随笔分类 -  流畅的Python

摘要:支持函数式编程的包 Python的目标不是变成函数式语言,但是得益于operator和functools等包的支持,函数式编程风格也可以信手拈来 operator模块 在函数式编程中,经常需要把算术运算符当作函数使用。例如,不适使用递归计算阶乘。求和可以使用sum函数,但是求积没有这样的函数。可以使 阅读全文
posted @ 2022-01-04 21:45 里列昂遗失的记事本 阅读(44) 评论(0) 推荐(0)
摘要:函数注解 Python 3提供了一种句法,用于为函数声明中的参数和返回值附加元数据 # 有注解的clip函数 def clip(text: str, max_len: 'int>0' = 80) -> str: # max_len参数的注解是字符串 '''在max_len前面或后面的第一个空格处截断 阅读全文
posted @ 2022-01-04 21:08 里列昂遗失的记事本 阅读(57) 评论(0) 推荐(0)
摘要:获取关于参数的信息 HTTP微框架Bobo有个使用内省函数的例子 # Bobo直到hello需要person参数,并且从HTTP请求中获取它 import bobo @bobo.query('/') def hello(person): return 'Hello %s!' % person bob 阅读全文
posted @ 2021-12-31 13:06 里列昂遗失的记事本 阅读(57) 评论(0) 推荐(0)
摘要:从定位参数到仅限关键字参数 Python最好的特性之一是提供了极为灵活的参数处理机制,而且Python3进一步提供了仅限关键字参数(keyword-only argument)。与之密切相关的是,调用函数时使用*和**展开可迭代对象,映射到单个参数 # tag函数用于生成HTML标签;使用名为cls 阅读全文
posted @ 2021-12-18 10:44 里列昂遗失的记事本 阅读(54) 评论(0) 推荐(0)
摘要:函数内省 除了__doc__,函数对象还有很多属性。使用dir函数可以探知factorial具有下述属性: def factorial(n): return 1 if n < 2 else n * factorial(n - 1) dir(factorial) ['__annotations__', 阅读全文
posted @ 2021-12-18 10:20 里列昂遗失的记事本 阅读(57) 评论(0) 推荐(0)
摘要:用户定义的可调用类型 不仅Python函数是真正的对象,任何Python对象都可以表现得像函数。为此,只需要实现方法__call__ # 调用BingoCage实例,从打乱的列表中取出一个元素 import random class BingoCage: def __init__(self, ite 阅读全文
posted @ 2021-12-17 21:27 里列昂遗失的记事本 阅读(51) 评论(0) 推荐(0)
摘要:可调用对象 除了用户定义的对象,调用运算符(即())还可以应用到其他对象上。如果想判断对象能否调用,可以使用内置的callable()函数。 Python数据模型文档列出了7种可调用对象 1.用户定义的函数 使用def语句或lambda表达式创建 内置函数 使用C语言(CPython)实现的函数,如 阅读全文
posted @ 2021-12-17 21:04 里列昂遗失的记事本 阅读(54) 评论(0) 推荐(0)
摘要:匿名函数 lambda关键字在Python表达式内部创建匿名函数 然后,Python简单的语法限制了lambda函数的定义体只能使用纯表达式。lambda函数的定义体中不能赋值,也不能使用while和try等Python语句 在参数列表中最适合使用匿名函数 # 使用lambda表达式反转拼写,然后依 阅读全文
posted @ 2021-12-17 20:54 里列昂遗失的记事本 阅读(54) 评论(0) 推荐(0)
摘要:高阶函数 接受函数为参数,或者把函数作为结果返回的函数是高阶函数(high-order function)。map函数就是一个,内置函数sorted也是:可选的key参数用于提供一个函数,它会应用到各个元素上进行排序 # 根据单词长度给一个列表排序 fruits = ['strawbery', 'f 阅读全文
posted @ 2021-12-16 12:50 里列昂遗失的记事本 阅读(725) 评论(0) 推荐(0)
摘要:一等函数 在Python中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程序实体: 在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传递给函数 能作为函数的返回结果 在Python中,整数、字符串和字典都是一等对象 把函数视作对象 Python函数是对象 # 创建并测试一 阅读全文
posted @ 2021-12-16 12:23 里列昂遗失的记事本 阅读(72) 评论(0) 推荐(0)
摘要:支持字符串和字节序列的双向API 标准库中的一些函数能接受字符串或字节序列作为参数,然后根据类型展现不同的行为。re和os模块中就有这样的函数 正则表达式中的字符串和字节序列 如果使用字节序列构建正则表达式,\d和\w等模式只能匹配ASCII字符;相比之下,如果是字符串模式,就能匹配ASCII之外的 阅读全文
posted @ 2021-12-16 11:23 里列昂遗失的记事本 阅读(57) 评论(0) 推荐(0)
摘要:Unicode文本排序 Python比较任何类型的序列时,会一一比较序列里的各个元素。对字符串来说,比较的是码位,可是在比较非ASCII字符时,得到的结果不如人意。 fruits = ['caju', 'atemoia', 'caja', 'acai', 'acerola'] sorted(frui 阅读全文
posted @ 2021-12-16 10:52 里列昂遗失的记事本 阅读(162) 评论(0) 推荐(0)
摘要:为了正确比较而规范Unicode字符串 因为Unicode有组合字符(变音字符和附加到前一个字符上的记号,打印时作为一个整体),所以字符串比较起来很复杂。 例如,"café"这个词可以使用两种方式构成,分别由4个和5个码位,但是结果完全一样: s1 = 'café' s2 = 'cafe\u0301 阅读全文
posted @ 2021-11-14 10:48 里列昂遗失的记事本 阅读(687) 评论(0) 推荐(0)
摘要:处理文本文件 处理文本的最佳实践是“Unicode三明治”。尽早把输入的的字节序列解码成字符串,然后对字符串进行处理,在其他过程中一定不能编码或解码。对输出来说,要尽量晚地把字符串编码成字节序列 在Python3中能轻松的采纳Unicode三明治的建议,因为内置的open函数会再读取文件时做必要的解 阅读全文
posted @ 2021-11-14 09:40 里列昂遗失的记事本 阅读(184) 评论(0) 推荐(0)
摘要:了解编码问题 虽然有一般性的UnicodeError异常,但是报告错误时几乎都会指明具体的异常:UnicodeEncoderError (把字符串转换成二进制序列时)或UnicodeDecoderError(把二进制序列转换成字符串时)。如果 源码的编码与预期不符,加载Python模块时还可能抛出S 阅读全文
posted @ 2021-10-27 10:35 里列昂遗失的记事本 阅读(148) 评论(0) 推荐(0)
摘要:基本的编解码器 Python自带了超过100中编解码器(codec,encoder/decoder),用于文本和字节之间相互转换。 每个编码器都有一个名称,如'uft_8',而且经常有几个别名,如果'uft8','uft-8'和'U8'。 这些名称可以传递给open()、str.encode()、b 阅读全文
posted @ 2021-10-25 13:42 里列昂遗失的记事本 阅读(194) 评论(0) 推荐(0)
摘要:Python 3引入的不可变bytes类型和Python 2.6添加的可变bytearray类型 bytes和bytesarray对象的各个元素是介于0-255(含)之间的整数,而不像Python 2 的str对象那样是单个的字符。然而,二进制序列的切片始终是同一种类型的二进制序列,包含长度为1的切 阅读全文
posted @ 2021-10-10 21:20 里列昂遗失的记事本 阅读(49) 评论(0) 推荐(0)
摘要:编码与解码 “字符串”是个相当简单的概念:一个字符串是一个字符序列。问题出在“字符”的定义上。在2015年,“字符”的最佳定义是Unicode字符。因为,从Python3的str对象中获取的元素是Unicode字符,这相当于从Python2的unicode对象中获取的元素,而不是Python2的st 阅读全文
posted @ 2021-10-10 10:00 里列昂遗失的记事本 阅读(39) 评论(0) 推荐(0)
摘要:构造字典 DIAL_COODES=[ # 一个承载成对数据的列表,可以直接用在字典的构造方法中 (86,'China'), (91,'India'), (1,'United States'), (62,'Indonesia'), (55,'Brazil'), (92,'Pakistan'), (88 阅读全文
posted @ 2021-09-26 20:37 里列昂遗失的记事本 阅读(50) 评论(0) 推荐(0)
摘要:什么是可散列的数据类型 在Python词汇表(https://docs.python.org/3/glossary.html#term-hashable)中,关于可散列类型的定义有这样一段话: 如果一个对象是可散列的,那么在这个对象的生命周期中,它的散列值是不变 的,而且这个对象需要实现__hash 阅读全文
posted @ 2021-09-19 09:31 里列昂遗失的记事本 阅读(179) 评论(0) 推荐(0)