当前位置: 首页 > news >正文

python函数式编程

1 callable内建函数判断一个名字是否为一个可调用函数

>>> import math

>>> x = 1

>>> y = math.sqrt

>>> callable(x)

False

>>> callable(y)

True



2 记录函数(文档字符串)

>>> def square(x):

    'calculates the square of number x'

    return x * x

>>> square.func_doc

'calculates the square of number x'



3 形式参数,实际参数,我能改变参数吗--字符串,数字,元组三者跟序列是有区别的
参数存储在局部作用域


4 关键字参数和默认值

>>> def say_hello(greeting = 'hello',name = 'jmz',biaodian = '!!!'):

    print '%s,%s%s' % (greeting,name,biaodian)

#这样去调用都可以

     

>>> say_hello()

hello,jmz!!!

>>> say_hello(name = 'yyer',biaodian = '~~~')

hello,yyer~~~

>>> say(name = 'yyer',greeting = 'hi,hi')

>>> say_hello(name = 'yyer',greeting = 'hi,hi')

hi,hi,yyer!!!

 
5 收集参数


1)将参数收集为元组

例子1:

>>> def print_params(*params):

    print params

     

>>> print_params('param1')

('param1',)

>>> print_params('param1','param2','param3')

('param1', 'param2', 'param3')

>>>

>>>


例子2:

>>> def print_params_2(title,*params):

    print title

    print params

>>> print_params_2('title',1,2,3,4,5)

title

(1, 2, 3, 4, 5)



2)将参数收集为字典:

>>> def print_params_4(x,y,z = 3,*pp,**ppp):

    print x,y,z

    print pp

    print ppp

     

>>> print_params_4(1,2,4,'pp1','pp2','pp3',ppp1 = 'aaa',ppp2 = 'bbb')

1 2 4

('pp1', 'pp2', 'pp3')

{'ppp1': 'aaa', 'ppp2': 'bbb'}

>>>



3) 收集参数方式的函数调用

>>> def hello(**params):

    print params['greeting'],params['name']

     

>>> params = {'greeting':'Hello','name':'JMZ'}

>>> hello(**params)

Hello JMZ

>>>



6 作用域

1)到底什么是变量,你可以把它看作是值的名字,就像字典一样,键引用值,在执行a = (1,2,3)的时候就把名字引用到元组上。事实上,这已经很接近真实情况,变量和所对应的值是个不可见的字典。

内建的vars()函数可以返回这个字典:

IDLE 2.6.5      ==== No Subprocess ====
>>> vars()
{'__builtins__': <module '__builtin__' (built-in)>, '__file__': '/usr/bin/idle-python2.6', '__package__': None, '__name__': '__main__', 'main': <function main at 0xb6cc1f44>, '__doc__': None}
>>> def printhello():print 'hello world'>>> x = 1
>>> a = (1,2,3)
>>> vars()
{'a': (1, 2, 3), 'printhello': <function printhello at 0x9fea6bc>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': '/usr/bin/idle-python2.6', '__package__': None, 'x': 1, '__name__': '__main__', 'main': <function main at 0xb6cc1f44>, '__doc__': None}>>> vars()['a']
(1, 2, 3)
>>> 



2)局部变量与全局变量

在函数内部可以直接引用全局变量,但是要慎重,过多的使用全部变量容易出错。
名字屏蔽问题:
    如果函数内部局部变量与外部的全局变量名字一样,这时引用的将是局部变量,可以用globals()函数来获取全局变量的字典,globals()返回全部变量的字典。globals()['var1']即可返回全局变量var1的值


3)嵌套作用域

在python中,可以在函数内部定义函数:

>>> def outFunction(outVar):a = 2def inFunction(inVar):return outVar * inVar * areturn inFunction>>> inFunc = outFunction(5)
>>> inFunc(4)
40
>>> 


在什么地方有用:当需要用一个out函数来创建一个in函数时。

规则:out函数的返回值是一个函数,它返回了in函数这个函数本身。重要的是:返回的函数还可以访问它的定义所在的作用域,即:返回的内层函数带着它的环境+它自身的局部变量。



7 函数式编程---一些有用的函数

1)使用map函数将序列中的元素全部传递给一个函数:
    map(function,序列)

2)使用filter函数可以给予一个返回布尔值的函数对元素进行过滤:

>>> def func(x):return x.isalnum()>>> seq = ['foo','x41','!***']
>>> filter(func,seq)
['foo', 'x41']
>>> 


当然,也可以使用列表推导式:
>>> [x for x in seq if x.isalnum()]
['foo', 'x41']


3)lambda表达式特性创建短小函数:

>>> filter(lambda x:x.isalnum(),seq)
['foo', 'x41']

4)reduce函数

reduce(func,seq)将一个序列的前两个元素与给定的函数联合使用,并且将他们的返回值与第三个元素继续联合和使用,知道整个序列处理完毕:

>>> seq = [1,2,4,6,7,12,23]
>>> reduce(lambda x,y:x + y,seq)
55
>>>

http://www.lryc.cn/news/27032.html

相关文章:

  • 3.linux下安装mysql
  • 17、MySQL分库分表,原理实战
  • 【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))
  • [Java代码审计]—MCMS
  • 《程序员面试金典(第6版)》面试题 01.08. 零矩阵
  • 初识 Python
  • 常用sql语句分享
  • 极狐GitLab DevSecOps 为企业许可证安全合规保驾护航
  • 后端程序员的前端基础-前端三剑客之HTML
  • VS2019加载解决方案时不能自动打开之前的文档(回忆消失)
  • ConcurrentHashMap-Java八股面试(五)
  • 互联网衰退期,测试工程师35岁的路该怎么走...
  • Windows Cannot Initialize Data Bindings 问题的解决方法
  • Leetcode每日一题 1487. 保证文件名唯一
  • Linux常用命令——lsusb命令
  • Python——我愿称之为最简单的语言
  • java.io.IOException: Broken pipe
  • Python——列表排序和赋值
  • python+pytest接口自动化(7)-cookie绕过登录(保持登录状态)
  • 【连接池】什么是HikariCP?HikariCP 解决了哪些问题?为什么要使用 HikariCP?
  • Tapdata Cloud 基础课:新功能详解之「微信告警」,更及时的告警通知渠道
  • 【巨人的肩膀】JAVA面试总结(四)
  • 攒了一冬的甜,米易枇杷借力新电商走出川西大山
  • python-测试相关基础知识-补充
  • 论文推荐:ScoreGrad,基于能量模型的时间序列预测
  • RabbitMq(具体怎么用,看这一篇即可)
  • 第九届蓝桥杯省赛 C++ A/B组 - 全球变暖
  • Leetcode.2359 找到离给定两个节点最近的节点
  • DCDC/LDO Auto-Discharge
  • linux 中的log