一. 函数与函数式编程

1. 面向对象编程

(类)class

2.面向过程编程

(过程) def

3.函数式编程

(函数) def

(1)  函数的特点:

         代码重用:

         可扩展性;

         保持一致性。

(2)函数的定义:

#python 中函数定义方法
def test(x): #定义函数格式
"""the function definitions """ #函数说明
x+=1
return x #返回值数=0,返回None,
#返回值数=1,返回object, eg. return 0
#返回值数>1,打包起来返回一个元组. eg. return 1,'lai',[q,4,5]
a = test(4) print(a)

在此插一句,学习一个打印当前时间

import time
time_format = '%Y-%m-%d %X' #时间格式为年月日时分秒
time_current = time.strftime(time_format)
print('现在是北京时间 %s ' % time_current)

(3) 形参与实参

纯关键字参数时与顺序无关;

纯位置参数必须按顺序写;

当同时有关键自参数与位置参数时,关键参数不能写在位置参数前面;

传递参数的时候,实参的个数应小于等于形参的个数。

默认参数:

定义的时候给形参一分值,没有实参传递的时候便用此值,有实参传递,则覆盖此值             def  fun(x,y=1):

参数组:

当实参的个数不确定时(非固定参数),用此法;

格式:def fun(*args)    #用*号

def fun(*argv):    #接收N个位置参数,存放成元组的形式
print(argv) fun(1,2,3,4,5,6,7)
运行结果:
(1, 2, 3, 4, 5, 6, 7)
def fun(x,*argv):
print(x)
print(argv) fun(1,2,3,4,5,6,7)
运行结果:

1
(2, 3, 4, 5, 6, 7)

def fun(**kwargs):   #**kwargs把N个关键字参数,转换成字典的方式存储
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
fun(name='xiaolaizi',age = '') #两种参数传递方式之一
fun(**{'name':'wei','age':8}) #两种参数传递方式之二 运行结果:
{'name': 'xiaolaizi', 'age': ''}
xiaolaizi
21
{'name': 'wei', 'age': 8}
wei
8
def fun(name,**kwargs):    #跟关键字参数叠加
print(name)
print(kwargs)
fun('xiaolaizi',age=18) 运行结果:
xiaolaizi
{'age': 18}

4、局部变量与全局变量

age = 8    #全局变量
def change_name(name):
#global age #申请全局变量(不要用,别入坑)
age = 20
print("before change",name,age)
name = "xiaolaizi" #局部变量,这个函数就是变量的作用域
print("after change", name) name = "datou"
change_name(name)
print(name,age)
print(age)
运行结果:
before change datou 20
after change xiaolaizi
datou 8
8
对比:

age = 8 #全局变量
def change_name(name):
global age #申请为全局变量(不要用)
age = 20
print("before change",name,age)
name = "xiaolaizi" #局部变量,这个函数就是变量的作用域
print("after change", name) name = "datou"
change_name(name)
print(name,age)
print(age) 运行结果:
before change datou 20
after change xiaolaizi
datou 20
20

5.递归

在函数内部,可以调用其他函数,如果一个函数在内部调用本身,这个函数就是递归函数。

特性:

a.必须有明确的结束条件;

b.每次进入更深一层 递归时,问题规模相比上次递归都应有所减少;

c.递归效率不高,递归层次过多会导致栈溢出。

6.  函数式编程

                函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参          数)和输出(返回值)。 
                和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
                和过程化编程相比,函数式编程里函数的计算可随时调用。

定义:

简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。

         它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。

例子:

函数式编程中最古老的例子莫过于1958年被创造出来的LISP了,透过 LISP,可以用精简的人力。较现代的例子包括               Haskell、Clean、Erlang和Miranda等。(引用自百度百科)

7.  高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

def add(x,y,f):
return f(x) +f( y)
res = add(3,-6,abs) #把绝对值函数传给了f
print(res)

补充:

小技巧:Ctrl+/  :全部注释。

python----函数与函数式编程的更多相关文章

  1. python函数 与 函数式编程

    「函数」一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序), ...

  2. python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)

    1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...

  3. python函数与函数式编程

    https://www.cnblogs.com/evablogs/p/6699515.html 在理解函数式编程之前,我还是对函数的调用,参数传递以及函数的嵌套调用一头雾水,还是花了点时间整理了写思绪 ...

  4. python 函数和函数式编程

    什么是函数 调用函数 创建函数 变长参数 函数式编程 变量的作用域 生成器 1 什么是函数 函数是对程序逻辑进行结构化或过程化的一种编程方法.能将整块代码巧妙地隔离成易于管理 的小块,把重复代码放到函 ...

  5. Python核心编程读笔 10:函数和函数式编程

    第11章 函数和函数式编程 一 调用函数  1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...

  6. Python进阶之函数式编程(把函数作为参数)

    什么是函数式编程? 什么是函数式编程? 函数:function 函数式:functional,一种编程范式 函数式编程是一种抽象计算的编程模式 函数≠函数式,比如:计算≠计算机 在计算机当中,计算机硬 ...

  7. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  8. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  9. Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

    Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print(" ...

  10. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...

随机推荐

  1. Kafka.net使用编程入门(二)

    1.首先创建一个Topic,命令如下: kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partit ...

  2. U深度U盘安装win7系统教程

    ① 使用u深度u盘启动盘制作工具制作好的启动u盘 点击查看 ==>u深度u盘启动盘制作教程 ② ghost win7系统镜像文件(自可上网自行搜索ghost xp系统) 第一步:下载win7系统 ...

  3. 读书笔记 C# 接口中的索引器之浅析

    在C#中,可以在类.结构或接口中用this关键字声明索引器,在索引器内部用get或set访问器访问类中集合的某项值.因此可以将索引器看作是类的属性一样去定义.索引器常用定义格式如下: public i ...

  4. 如何查看.java文件的字节码(原码)

    出自于:https://www.cnblogs.com/tomasman/p/6751751.html 直接了解foreach底层有些困难,我们需要从更简单的例子着手.下面上一个简单例子: 1 pub ...

  5. (Java学习笔记) Java Threading (Java线程)

    Java Threading (Java线程) ● Process & Thread Processes are the abstraction of running programs: A ...

  6. 输入系统:epoll & inotify

    一.epoll 作用:检测一个或多个文件的可读.可写等属性变化: 代码示例: #include <sys/epoll.h> #include <stdio.h> #includ ...

  7. powerdesigner 使用

    1. 首先要确保机器安装了MySql的ODBC驱动,去http://dev.mysql.com/downloads/connector/odbc/5.1.html 下载 Connector/ODBC ...

  8. mybatis学习(一)----入门

    一.Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  9. format格式

    The format part is where you can specify more precisely the format of the data that you expect. For ...

  10. activemq 生产消费模式,订阅发布模式不同类型数据传输

    1.项目结构 2. activemq-pom pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...