PythonCookBook笔记——函数
函数
可接受任意数量参数的函数
接受任意数量的位置参数,使用*参数。
接受任意数量的关键字参数,使用**参数。
只接受关键字参数的函数
强制关键字参数放在某个参数后或直接单个之后。
给函数参数增加元信息
就是函数注解,参数后加: type注解参数,参数括号后加-> type注解返回值。
这些信息可以在函数对象的__annotations__属性中查看。
返回多个值的函数
直接return一个元组即可,使用逗号即可生成元组,所以可以省略括号。
定义有默认参数的函数
给参数指定一个默认值放到参数列表最后即可。
定义匿名或内联函数
用lambda表达式即可,lambda表达式常与reduce()、map()、filter()、sorted()、iter()等方法一起使用。
匿名函数的变量
匿名函数的变量是在运行时捕获的,比如一个变量在函数定义后修改了值,在调用匿名函数时是以最新的值来计算的。
可通过将变量值定义成默认参数完成定义时绑定。
减少可调用对象的参数个数
使用functools.partial(),该函数允许给一个或多个参数设置固定的值。
def func(a, b, c, d):
return sum(a, b, c, d)
s1 = partial(func, b=2)
将单方法的类转为函数
利用闭包函数,因为单方法的类不过是为了存储某些额外的状态来给方法使用,使用闭包更优雅。
带额外状态信息的回调函数
同样利用闭包,对回调函数使用闭包即可,但注意要传入的是内层函数。
还有一个解决办法是使用协程,将协程的send()方法作为回调函数。
内联回调函数
def apply_async(func, args, *, callback):
# Compute the result
result = func(*args)
# Invoke the callback with the result
callback(result)
from queue import Queue
from functools import wraps
class Async:
def __init__(self, func, args):
self.func = func
self.args = args
def inlined_async(func):
@wraps(func)
def wrapper(*args):
f = func(*args)
result_queue = Queue()
result_queue.put(None)
while True:
result = result_queue.get()
try:
a = f.send(result)
apply_async(a.func, a.args, callback=result_queue.put)
except StopIteration:
break
return wrapper
def add(x, y):
return x + y
@inlined_async
def test():
r = yield Async(add, (2, 3))
print(r)
r = yield Async(add, ('hello', 'world'))
print(r)
for n in range(10):
r = yield Async(add, (n, n))
print(r)
print('Goodbye')
test()函数是一个生成器,而装饰器函数会遍历这个生成器函数,并将值循环放到一个回调函数中去调用执行,直到生成器结束。
访问闭包中定义的变量
通常闭包的内部变量对外是完全隐藏的,但可以通过访问函数绑定到闭包上来实现访问内部变量。
def sample():
n = 0
# Closure function
def func():
print('n=', n)
# Accessor methods for n
def get_n():
return n
def set_n(value):
nonlocal n
n = value
# Attach as function attributes
func.get_n = get_n
func.set_n = set_n
return func
PythonCookBook笔记——函数的更多相关文章
- Python编程从入门到实践笔记——函数
Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...
- 《python基础教程(第二版)》学习笔记 函数(第6章)
<python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params): block return values 记录函数:def f ...
- <数据结构与算法分析>读书笔记--函数对象
关于函数对象,百度百科对它是这样定义的: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.又称仿函数. 听起来确实很难懂,通过搜索我找到一篇 ...
- swift swift学习笔记--函数和闭包
使用 func来声明一个函数.通过在名字之后在圆括号内添加一系列参数来调用这个方法.使用 ->来分隔形式参数名字类型和函数返回的类型 func greet(person: String, day ...
- 《JS语言精粹》学习笔记 函数部分の闭包
要理解闭包,首先要理解变量作用域,变量的作用域就两种,全局变量和局部变量,函数内部可以直接读取全局变量,函数外部无法读取函数内部的局部变量. 闭包定义:能读取函数内部局部变量的函数就是闭包,而只有函数 ...
- Python学习笔记——函数
1.标准类型内建函数 <1>type() —— 返回对象的类型 <2>cmp() —— 比较两个对象,返回两个对象的ASCII码的差 <3>str().repr() ...
- golang笔记——函数与方法
如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...
- JavaScript笔记:函数
函数是定义一次但却可以调用或执行任意多次的代码块. 一.函数定义 javascript中的函数使用function关键字来定义,常用的函数定义分为三种形式: 声明式函数定义 function sum( ...
- JavaScript学习笔记-函数
函数的两种创建方式:函数定义表达式.函数声明语句 编译时,函数声明语句创建的函数会‘被提前’至外部函数的作用域顶部,在该作用域内可以被随意调用: 而函数表达式创建的函数,要调用它必须赋值给一个变量,编 ...
随机推荐
- 转:C#制作ORM映射学习笔记三 ORM映射实现
现在开始实现ORM的主体模块,首先需要在项目中新建一个类,命名为DbAccess,然后在项目的引用中添加两个dll,分别是MySql.Data.dll和System.Data.SQLite.dll,这 ...
- AC日记——[NOI2006]最大获利 bzoj 1497
1497 思路: 最小割: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> #inc ...
- 洛谷—— P2417 课程
https://www.luogu.org/problemnew/show/2417 题目描述 n个学生去p个课堂,每一个学生都有自己的课堂,并且每个学生只能去一个课堂,题目要求能够安排每一个课堂都有 ...
- Leetcode | Construct Binary Tree from Inorder and (Preorder or Postorder) Traversal
Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a ...
- Codeforces 734 F Anton and School
Discription Anton goes to school, his favorite lessons are arraystudying. He usually solves all the ...
- Linux使用cd回到上一目录
//返回上一级目录 cd .. //返回用户主目录 cd 或 cd ~ //返回根目录 cd /
- iOS github大全 & iOS7的学习blog
iOS github大全 :有600多个iOS各方面的开源库,并分类了 一天天学习iOS7 :每天学习一点iOS7的新特性
- 关于Android方法数量限制的问题
限制Android方法数量的原因是: Android应用以DEX文件的形式存储字节码文件,在Dalvik字节码规范里,方法引用索引method referenceindex只有16位,即65536个. ...
- Flutter开发记录part1
(1)AppBar:automaticallyImplyLeading//是否带返回leading箭头 (2)非route路由页面跳转 :Navigator.of(context).push(Mate ...
- todo提纲
deep&wide为啥work,如何优化特征:详述attention,attention在ctr预估中如何使用,din为啥work?详述transformer,如何应用于ctr预估;item2 ...