elike.python.function()
将python用于基本的科学计算,能完全替代matlab。就最近写的一个物理模型程序来看,用python建立的物理模型的可控性,代码的层次性都优于matlab,只不过python没有matlab那样的界面,所有的操作都需要代码来实现。现关于python的函数式编程做出以下总结。
问题一:物理公式里有很多的小公式,一个一个的def太麻烦了,有什么好的解决办法?
应对以上问题,匿名函数是一个方便的工具。python里面匿名函数的关键字是lambda。如下
一个函数为f(x,y)=sin(x+y)+x^y,在python里面可以这样定义
f = lambda x,y : math.sin(x+y)+x**y
使用的时候可以直接拿来用,要知道某个值,就可以直接输入f(a,b),注意这里不是说函数的返回值只能是一个数,也可以是两个数,可以将两个函数和在一起写,如下
ff = lambda x,y : [math.sin(x+y)+x**y, math.e**(x+y)]
由函数里面的返回值,可以看出返回一个list,包含两个值。
问题二:要画图的时候需要的x,y都是一个list,难道非要用for或whiel循环,一个一个地代入函数吗?
这时就需要用映射了,也就是map,数学理论中的一一映射,在c++和java里都有,用法类似。但在python中用法,与数学函数的定义完全一致。只需将原像x[]经过映射关系f,就可以得到像y[]。注意map()的返回值是一个map对象,可以将这个对象放入list中,就能得到所需要的list。
z=list(map(f,x,y))
问题三:对于重复调用一个长函数,为了减少系统占用的资源,只需重复里面的部分片段,怎么办?
可以用返回函数的函数实行嵌套函数,基本思想是,把每次调用时基本不会变的部分放在主函数里,随着函数参数变化而变化的部分在函数内部命名为一个新的内部函数。如下
def shell(a) :
sh=a**a
#there are many other operation, which only depends on a
def kell(b) :
ke=b*a
return ke
return kell
调用的时候注意,由于外部函数返回是一个函数,所以你如果直接写
sf=shell(a)
这里的sf就是一个函数,所以后面再跟一对小括号才能得到ke的值
s=sf(b) #same as s=shell(a)(b)
问题四:在计算的时候,我们经常会在外面用到某个类的函数内的局部变量的值,这时怎么办?
应对此问题的方法,我个人认为直接使用全局变量比较方便。全局变量的关键字是global。
#one.py
a=1
b=0
def apple(s):
global b
b=s+a
t=s**b
return t
#two.py
import one
#use the value of b from one.py
one.apple(2)
b=one.b
##############
注意,如果b的值与函数的参数有关,在调用b之前,必须先运行这个函数,使得全局变量b的值得到改变,要不然b的值是不会变的,始终都是初始值。
elike.python.function()的更多相关文章
- Python Function Note
Python Function Note #汉诺塔问题Python实现 def my_move(n, a, b, c): if n == 1: print(a + ' --> ' + c) el ...
- python function parameter
Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright&q ...
- kwargs - Key words arguments in python function
This is a tutorial of how to use *args and **kwargs For defining the default value of arguments that ...
- python Function
Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright&q ...
- python function with variadic arguments or keywords(dict) 可变参数与关键字参数
*args 表示任意个普通参数,调用的时候自动组装为一个tuple **kwags 表示任意个字典类型参数, 调用的时候自动组装成一个dict args和kwags是两个约定俗成的用法. 变长参数可以 ...
- Python黑帽编程 3.2 ARP监控
Python黑帽编程 3.2 ARP监控 在第3.1节<ARP欺骗>中,我们学习了ARP的基本原理,使用Python实现了我们自己的ARP欺骗工具.在上一节的基础上,我们来实现一个ARP监 ...
- Python黑客编程ARP欺骗
Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...
- python练手基础
Python相关文档0.1. Python标准文档0.2. Python实用大全0.3. 迷人的Python0.4. 深入理解Python0.5. Python扩展库网址 http://pypi.py ...
- sparksql udf的运用----scala及python版(2016年7月17日前完成)
问:udf在sparksql 里面的作用是什么呢? 答:oracle的存储过程会有用到定义函数,那么现在udf就相当于一个在sparksql用到的函数定义: 第二个问题udf是怎么实现的呢? regi ...
随机推荐
- Linux启用/关闭触摸板脚本
一个可以启动关闭触摸板的shell脚本 运行一次关闭,再次运行开启. [shell] #!/bin/bash ts=`synclient -l|grep TouchpadOff` ts=${ts#*= ...
- Android_WebServices_介绍
本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/38036289 1.WebService的介绍 WebService为 ...
- 谈Linux
新手谈Linux 目录: 什么是Linux? Linux与UNIX的区别 Linux与Windows比较 什么是Linux发布版? Linux应用领域 Linux版本的选择 怎么学习Linux? ...
- Android项目----dispathTouchEvent
说到dispathTouchEvent,就不得不说一个最贱的屏幕触摸动作触发的一些列Touch事件: ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->A ...
- Image 对象
<html> <body> <img id="compman" src="0387.jpg" alt="Computer ...
- [转]JavaScript Namespaces and Modules
Namespaces In most programming languages we know the concept of namespaces (or packages).Namespaces ...
- Azure China
Azure China Azure China (2) Azure China管理界面初探 摘要: <Windows Azure Platform 系列文章目录> 首先是Q&A ...
- 动手实现Expression翻译器1
动手实现Expression翻译器 – Part I 伴随.Net3.5到来的Expression,围绕着它产生了各种各样有趣的技术与应用,Linq to object.Linq to sql.L ...
- 利用自定义的AuthenticationFilter实现Basic认证
[ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证 很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前 ...
- MFC双缓冲和裁剪问题导致闪烁
问题描述: 应用场景:在对话框中,自定义一个MFC图形控件(为了描述方便,暂定为HSPaintControl),控件覆盖整个对话框的客户区,属于最底层的控件,在这之上放置了很多其他的小图形控件. 问题 ...