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 ...
随机推荐
- PhpStorm创建Drupal模块项目开发教程(5)
Drupal项目开发中,问题跟踪器的设置,可以保证信息的交互.是开发中,不可或缺的部分. 接下来,就PhpStorm IDE中,问题跟踪器集成的配置操作就行图文解说. Settings | Tasks ...
- .NET的微型Web框架 Nancy
.NET的微型Web框架 Nancy .NET的微型Web框架 Nancy 大部分微软平台的开发人员如果选择开发框架只能是在ASP.NET WEBFORM和ASP.NET MVC两个之间选择. 而 ...
- sqlserver查询所有表的行数的sql语句
原文:sqlserver查询所有表的行数的sql语句 select object_name(id),rowcnt from sysindexes where indid<2 and object ...
- 10 Super Useful Tools for Web Designers
36个扁平化设计的iphone和ipad应用界面设计案例 http://designwoop.com/2014/04/36-examples-of-flat-iphone-and-ipad-appli ...
- slice、substring、substr的区别
首先它们都接收两个参数,slice和substring接收的是起始位置与结束位置,而substr接收的是起始位置和所要截取的字符长度. 特殊注意: 当第二参数大于第一个参数时,slice会返回空字 ...
- C#伪彩色处理
伪彩色处理是指将灰度图像转换成彩色图象.因为人眼对于彩色的分辨能力远高于对灰度图像的分辨能力,所以将灰度图像转换成彩色可以提高人眼对图像细节的辨别能力.伪彩色并不能真实的反映图像像的彩色情况. 效果图 ...
- 使用celery之怎么让celery跑起来
celery 官网帮助文档 http://docs.celeryproject.org/en/latest/index.html 前言 自从发了上次的文章使用celery之深入celery配置, 有 ...
- C/C++基础知识总结——函数
1. 随机函数的使用 1.1 头文件: # include <cstdlib> 或 # include <stdlib.h> 1.2 用法 srand(int seed);// ...
- [RM 状态机详解4] RMNode状态机详解
摘要 RMNode状态机是ResourceManager的四个状态机(RMApp,RMAppAttempt,RMContainer,RMNode)中最简单的一个,状态机如图1所示.RMNode是Res ...
- 企业架构研究总结(33)——TOGAF架构内容框架之架构制品(上)
4. 架构制品(Architectural Artifacts) 架构制品是针对某个系统或解决方案的模型描述,与架构交付物和构建块相比,架构制品既不是架构开发方法过程各阶段的合约性产物,亦不是企业中客 ...