Python--进阶处理7
# ====================第七章:函数========================= # 为了能让一个函数接受任意数量的位置参数,可以使用一个* 参数
# 为了接受任意数量的关键字参数,使用一个以** 开头的参数
# 一个* 参数只能出现在函数定义中最后一个位置参数后面,而**参数只能出现在最后一个参数。有一点要注意的是,在* 参数后面仍然可以定义其他参数。
def a(x, *args, y):
pass
def b(x, *args, y, **kwargs):
pass # 希望函数的某些参数强制使用关键字参数传递
# 将强制关键字参数放到某个* 参数或者单个* 后面就能达到这种效果
def recv(maxsize, *, block):
pass def minmun(*values, clip=None):
pass # 如果默认参数是一个可修改的容器比如一个列表、集合或者字典,可以使用 None 作为默认值
def spam(a, b=None):
if b is None:
b = []
# 注意:传递一个 None 值和不传值两种情况是有差别的
# 默认参数的值仅仅在函数定义的时候赋值一次
x = 42
def spam(a, b=x):
print(a, b)
spam(1) # 打印出 1,42
x = 23
spam(1) # 还是打印出 1,42
# 默认参数的值应该是不可变的对象,比如 None、True、False、数字或字符串
# 当一些函数很简单,仅仅只是计算一个表达式的值的时候,就可以使用 lambda 表 达式来代替了
add = lambda x, y: x + y
"""
def add(x, y):
return x + y
"""
print(add(2, 3)) # 如果需要减少某个函数的参数个数,你可以使用 functools.partial()
from functools import partial def spam(a, b, c, d):
print(a, b, c, d)
s1 = partial(spam, 1)
s1(2, 3,4)
s2 = partial(spam, d=42)
s2(1, 2, 3)
s3 = partial(spam, 1, 2, d=42)
s3(3)
# partial() 通常被用来微调其他库函数所使用的回调函数的参数 # 将单方法的类转换为函数--闭包
from urllib.request import urlopen class UrlTemplate: def __init__(self, template):
self.template = template def open(self, **kwargs):
return urlopen(self.template.format_map(kwargs))
# -------------------------------------------------------
def urltemplate(template):
def opener(**kwargs):
return urlopen(template.format_map(kwargs))
return opener
# ------------------------------------------------------- # 带额外状态信息的回调函数
def apply_async(func, args, *, callback):
result = func(*args)
callback(result) def print_result(result):
print('Got: ', result) def add(x, y):
return x + y apply_async(add, (2, 3), callback=print_result)
# ----------------------------------------------------------
Python--进阶处理7的更多相关文章
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
- Python进阶 - 对象,名字以及绑定
Python进阶 - 对象,名字以及绑定 1.一切皆对象 Python哲学: Python中一切皆对象 1.1 数据模型-对象,值以及类型 对象是Python对数据的抽象.Python程序中所有的数据 ...
- Python进阶-继承中的MRO与super
Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...
- Python进阶 - 命名空间与作用域
Python进阶 - 命名空间与作用域 写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空 ...
- python进阶学习笔记(一)
python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...
- 【python进阶】详解元类及其应用2
前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...
- 【python进阶】Garbage collection垃圾回收2
前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...
- Python进阶 函数式编程和面向对象编程等
函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...
- 【python进阶】深入理解系统进程2
前言 在上一篇[python进阶]深入理解系统进程1中,我们讲述了多任务的一些概念,多进程的创建,fork等一些问题,这一节我们继续接着讲述系统进程的一些方法及注意点 multiprocessing ...
- Python进阶:如何将字符串常量转化为变量?
前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...
随机推荐
- Object-C支持多继承吗?可以实现多个接口吗?Category是什么?
转自:http://blog.sina.com.cn/s/blog_7afd7d7801016t3t.html Object-C支持多继承吗?可以实现多个接口吗?Category是什么?重写一个类的方 ...
- dp之多重背包hdu1059
题意:价值为1,2,3,4,5,6. 分别有n[1],n[2],n[3],n[4],n[5],n[6]个.求能否找到满足价值刚好是所有的一半的方案. 思路:简单的多重背包,我建议多重背包都用二进制拆分 ...
- mysql 位运算
& 与运算 | 或运算 ^ 异或运算 或者 你也可以将 与运算理解为 + 法 例如 1|2 = 3 (1+2 = 3)1|2|4 = 7 (1+2+4 = 7) 将 异或运算理解为 - ...
- span和img标签对齐
html代码 <li> <span class="left_item">在线</span> <img class="right_ ...
- PHP——修改数据库1
主页面——0126.php 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- 如何使用PHP开发高效的WEB系统
PHP是一个非常优秀的工具,它能够简单,也能够复杂.不一样的项目,应该用不一样的PHP. 小项目 - 简单而直接的PHP 一般对于一个功能页面在20下面的站点.我们能够用一个非常easy的框架结构来 ...
- 性能加速 - 开启opcache
说明 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的).对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法 ...
- C++ 百炼成钢20
题目56: 编写C++程序完成以下功能:(1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法:(2)定义一个圆形类,其属性包括圆心和半径:(3)创建两个圆形对象,提示用户输入圆心 ...
- latex之图表位置控制
\begin{table}[!htbp] !-忽略“美学”标准 h-here t-top b-bottom p-page-of-its-own
- 按SCI影响因子排序的前50人工智能期刊列表
附录二:按SCI影响因子排序的前50人工智能期刊列表 出版物名称,影响因子 IEEE TRANSACTIONS ON FUZZY SYSTEMS, 6.701 International Jou ...