python学习手册笔记--第16~19章--function_base

第16章--函数基础
函数定义:
def <name>(arg1,arg2,……)
    <statement>

第17章--作用域
函数定义了本地作用域
模块定义了全局作用域
每次函数的调用都创造了一个新的本地作用域
变量查找:
本地作用域->上层函数作用域->全局作用域->内置作用域
内置作用域    import builtins    builtins.zip()可以屏蔽本地的重载
global    在复制或是引用时
不同文件间通信最好通过函数调用,最小化文件间变量的修改
工厂函数    记住嵌套做作用域的变量值,及时上层函数不在了
lambda +参数:行为    表达式函数
带循环变量的函数,只能记住最后一次嵌套值    exa:P432
此时必须把参数作为值传递给lambda
nonlocal     修改的嵌套函数本地作用域中的x
nonlocal x    x必须在上层嵌套函数中存在,否则会抛出异常
P400页程序的第3,4行都应加'/t'

第18章--参数
不可变参数通过"值"进行传递
可变对象是通过"指针"进行传递
限定可变对象    
1.赋值复制    def f(L[:])
2.利用元组    def f(tuple(L))
返回值可以有多个值,实际是一个元组
def func(*name)    匹配元组参数
def func(**name)    匹配字典参数
def func(*args, name)
混合参数,顺序出现
调用函数:参数,关键字参数和*sequence的组合, **dict,keyword-only可在*seq之前或之后,可在**dict中
函数头:参数,默认参数,*name,name/name=value  keyword-only, **name
关键字参数可以改变默认顺序
例:def func(a,b,c,d):print(a,b,c,d)
func(*(1,2),**{'d':2,'c':1})>>>1 2 1 2
func(1, *(2, 3), d=4)>>>1 2 3 4
3.0废弃了2.6的apply
定义时出现在*name后面的name/name=value 为keyword-only,未被赋值会产生错误
keyword也可以通过**arg, arg.pop('sep'.' ')

第19章--函数高级话题
递归
def mysum(L):
    return 0 if not L else L[0]+mysum(L[1:])
递归的好处:处理任意嵌套结构,example:[1,2,[3,4,[5]]]
temp=mysum;print(temp([1,2,3,4]))>>>10
可以给函数添加任意属性    mysum.count = 0
注解:不影响函数,只是起到注释的作用。
def func(a:'haha'= 4)->int:        int是返回值的注解
    return b
func.__annotations__会显示注解(字典形式)
注解在lambda中无效
匿名函数,lambda:表达式,非语句
lambda arg1,arg2,……:表达式
f = (lambda a,b,c:c+b+a);f(1,2,3)>>>6
lambda提供函数速写的功能,可以写在元组或是字典中
lambda可以通过列表和map嵌入循环->晦涩难懂
map:在寻列中映射函数
l=[1,2]    list(map(lambda x:x+3, l))=[4, 5]
可以映射多参数函数    list(map(pow,[1,2],[3,4]))>>>[1,16]
filter:测试函数,过滤出一些元素    list(filter((lambda x:x>3), range(5)))>>>[4]
from functools import reduce
每一步,reduce传递当前结果和下一个元素给函数
reduce((lambda x,y:x+y),[1,2,3,4])>>>10










    


猜你喜欢

转载自blog.csdn.net/cx351864995/article/details/7295987
今日推荐