下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

python应用:python3-cookbook笔记, 函数

作者:谷雨yun     来源: https://www.cnblogs.com/guyuyun/p/12354183.html点击数:745发布时间: 2020-02-24 13:21:25

标签: python课程编程语言课程Python语言课程

大神带你学编程,欢迎选课

  Python是一种解释型脚本语言,可以应用于以下领域:

  web和Internet开发

  科学计算和统计

  人工智能

  教育

  桌面界面开发

  软件开发

  后端开发

  网络爬虫

python3-cookbook中每个小节以问题、解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构、函数、类等特性在某类问题上如何更好地使用。这本书对于加深Python3的理解和提升Python编程能力的都有显著帮助,特别是对怎么提高Python程序的性能会有很好的帮助,如果有时间的话强烈建议看一下。
本文为学习笔记,文中的内容只是根据自己的工作需要和平时使用写了书中的部分内容,并且文中的示例代码大多直接贴的原文代码,当然,代码多数都在Python3.6的环境上都验证过了的。不同领域的编程关注点也会有所不同,有兴趣的可以去看全文。

 7.2 只接受关键字参数的函数

有时候为了代码可读性或者其他原因,我们需要在使用函数的时候强制要求调用者使用关键字参数,这时候只需要在某个*参数或单个*后面定义关键字参数即可。

复制代码
def print_ax(a, x):
print(a, x)

def print_x(a, *, x):

print(a, x)

print_ax(111, 222)
# 如果这样写就会报错:print_x(111, 222)
print_x(111, x=222)
复制代码

 7.7 匿名函数捕获变量值

lambda表达式的参数值是在运行时绑定的,而不是定义时绑定的,这跟def定义参数默认值是不同的,如果需要lambda表达式在定义时就绑定值,可以使用参数默认值的写法。

复制代码
>>> x = 10
>>> a = lambda y: x + y
>>> x = 20
>>> b = lambda y: x + y
>>> # 下面两个执行结果是一样的
>>> a(10)
30
>>> b(10)
30
>>> x = 30
>>> a(10)
40
>>> b(10)
40
>>> # 使用参数默认值的方式
>>> a = lambda y, x=x: x + y
>>> b = lambda y, x=x: x + y
>>> a(10)
40
>>> b(10)
40
>>>
复制代码

 

7.8 减少可调用对象的参数个数

当调用某个函数的时候可能你并不需要传入全部参数值,或者只能传入部分参数值,就可以使用functools.partial()。

用法示例:

复制代码
>>> from functools import partial
>>> def spam(a, b, c, d):
print(a, b, c, d)


>>> s1 = partial(spam, 1) # a = 1
>>> s1(2, 3, 4)
1 2 3 4
>>> s2 = partial(spam, d=42) # d = 42
>>> s2(1, 2, 3)
1 2 3 42
>>> s3 = partial(spam, 1, 2, d=42) # a = 1, b = 2, d = 42
>>> s3(3)
1 2 3 42
>>>
复制代码
排序使用示例:

复制代码
"""将列表中的点根据距离基点的距离进行排序"""
import math
from functools import partial

# 基点
pt = (4, 3)
points = [(1, 2), (3, 4), (5, 6), (7, 8)]


def distance(p1, p2):
"""返回两个点之间的距离"""
x1, y1 = p1
x2, y2 = p2
return math.hypot(x2 - x1, y2 - y1)


points.sort(key=partial(distance, pt))
print(points) # [(3, 4), (1, 2), (5, 6), (7, 8)]
复制代码
回调函数使用示例:

复制代码
import logging
from multiprocessing import Pool
from functools import partial


def output_result(result, log=None):
if log is not None:
log.debug('Got: %r', result)


def add(x, y):
return x + y


if __name__ == '__main__':
# logging模块用于打印日志
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger('test')

# 异步调用另一个函数,并将log对象传入进去
p = Pool()
p.apply_async(add, (3, 4), callback=partial(output_result, log=log))
p.close()
p.join()

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

赞(14)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程