将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()的更多相关文章

  1. Python Function Note

    Python Function Note #汉诺塔问题Python实现 def my_move(n, a, b, c): if n == 1: print(a + ' --> ' + c) el ...

  2. python function parameter

    Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright&q ...

  3. 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 ...

  4. python Function

    Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright&q ...

  5. python function with variadic arguments or keywords(dict) 可变参数与关键字参数

    *args 表示任意个普通参数,调用的时候自动组装为一个tuple **kwags 表示任意个字典类型参数, 调用的时候自动组装成一个dict args和kwags是两个约定俗成的用法. 变长参数可以 ...

  6. Python黑帽编程 3.2 ARP监控

    Python黑帽编程 3.2 ARP监控 在第3.1节<ARP欺骗>中,我们学习了ARP的基本原理,使用Python实现了我们自己的ARP欺骗工具.在上一节的基础上,我们来实现一个ARP监 ...

  7. Python黑客编程ARP欺骗

    Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...

  8. python练手基础

    Python相关文档0.1. Python标准文档0.2. Python实用大全0.3. 迷人的Python0.4. 深入理解Python0.5. Python扩展库网址 http://pypi.py ...

  9. sparksql udf的运用----scala及python版(2016年7月17日前完成)

    问:udf在sparksql 里面的作用是什么呢? 答:oracle的存储过程会有用到定义函数,那么现在udf就相当于一个在sparksql用到的函数定义: 第二个问题udf是怎么实现的呢? regi ...

随机推荐

  1. 架构师Jack专访:全面认识软件测试架构师

    ◇ 测试架构师的职责 测试的职业通道基本是管理线和技术线两条路. 管理线主要的职责:更多是项目管理和资源管理. 技术线主要的职责:更多是技术管理和业务知识. 软件测试架构师更多就是技术线的带头人.管理 ...

  2. C#编程实践–产假方案优化版

    前言 既然作为一个踏踏实实学习技术的人,就要有一颗谦卑.虚心和追求卓越的心,我不能一次就写出很完美的代码,但我相信,踏踏实实一步一步的优化,代码就可以变得趋近完美,至少在某一个特定场景下相对完美,这和 ...

  3. 【工作笔记一】【转】Visual Studio 2012常用快捷键总结

    Visual Studio 2012常用快捷键总结 原文  http://blog.csdn.net/yl2isoft/article/details/9886379   写在前面: 都知道,合理使用 ...

  4. Bootstrap 模态框

    Bootstrap 模态框(也可以说的弹出层) 最近在尝试使用bootstrap的模态框 使用模态框主要要引入一下几个js和css: bootstrap.css jquery.1.9.1.js(这个可 ...

  5. Bootstrap 布局

    bootstrap提供的布局主要有两种,固定布局和流动布局. Bootstrap 固定布局 用法 <body> <div class="container"> ...

  6. PLAN :昔日未来

    <昔日未来> 1. C语言: 必须要看的书:<C程序设计语言><C标准库> 像<C和指针>,<C专家编程>,<C陷阱>这种书虽很 ...

  7. C程序设计语言(第二版)习题:第一章

    第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...

  8. 数组自定义排序:IComparable和IComparer接口

    首先先说一下IComparable和IComparer的区别,前者必须在实体类中实现,后者可以单独出现在一个排序类中,即此类只包含一个compare方法. Array类使用快速算法对数组中的元素进行排 ...

  9. C#大牛应该知道的一些知识

    任何一个使用.NET的人 描述线程与进程的区别? 什么是Windows服务,它的生命周期与标准的EXE程序有什么不同 Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗 ...

  10. Android系统源码导入到eclipse

    1.把eclipse工程配置文件复制到android源码根目录下      cp development/ide/eclipse/.classpath ./  2. 在android源码根目录下新建文 ...