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下防火墙设置
Linux下开启/关闭防火墙命令 1) 永久性生效,重启后不会复原 开启:chkconfigiptables on 关闭:chkconfigiptables off 2) 即时生效,重启后复原 开启 ...
- LeetCode之Min Stack
1.原文问题描述: Design a stack that supports push, pop, top, and retrieving the minimum element in constan ...
- 完整的堆栈JavaScript路(十五)HTML5 focus 扩大 (扩展点)
HTML5 加入辅助管理 focus 产品特点, 有办法获得焦点文档; 页面加载,用户输入(通常由tab债券).和 调用代码focus()功能. HTML5新的属性和方法,辅助管理的重点: docu ...
- 脚手架快速搭建springMVC框架项目
apid-framework脚手架快速搭建springMVC框架项目 rapid-framework介绍: 一个类似ruby on rails的java web快速开发脚手架,本着不重复发明轮 ...
- 对Extjs中store的多种操作
Store.getCount()返回的是store中的所有数据记录,然后使用for循环遍历整个store,从而得到每条记录. 除了使用getCount()的方法外,还可以使用each()函数,如下面的 ...
- 根据Eclipse SVN changelog使用ANT自动打增量包
1.获取changeLog 用eclipseSVN的插件功能查看history. 将日志文件导出到本地文件svn_change.log,格式如下 r63 | xiaodaoshi | 2014-08- ...
- 为ASP.NET MVC应用程序创建更复杂的数据模型
为ASP.NET MVC应用程序创建更复杂的数据模型 2014-05-07 18:27 by Bce, 282 阅读, 1 评论, 收藏, 编辑 这是微软官方教程Getting Started wit ...
- 【分享】史上最全的Python电子书教程资源下载
网上搜集的,点击即可下载,希望提供给有需要的人^_^ O'Reilly.Python.And.XML.pdf 2.02 MB OReilly - Programming Python 2nd. ...
- 史上最全的Matlab资源电子书教程和视频下载合集【超级推荐】
收藏吧,网上搜集的,费了老大劲了,推荐给有需要的人,^_^. MATLAB课件2007北京交通大学.zip 4.87 MB A Guide to MATLAB for Beginners an ...
- USBWebserver v8.6 PHP环境
USBWebserver v8.6 Welcome on usbwebserver.com/net/eu USBWebserver v8.6 New in this version New langu ...