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










    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值