一. 函数与函数式编程

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

    题解: 莫比乌斯反演 ans=sigma(x/(i*i)*miu[i]) 代码: #include<bits/stdc++.h> using namespace std; ; int T, ...

  2. awk 中 fieldwidths使用方法

    AWK中的FIELDWIDTHS是一个很好用的变量,这个变量可以指定字符串按照怎么样的宽度进行展示 实例一: 要求: 032130 032131 146230 035048 222049 095070 ...

  3. day16 初识面向对象

    今天主要学习内容: 1.初始面向对象 2 .类 ,对象 3,面向对象和面向过程的对比 4.面向对象的三大特征 1,初始面向对象 面向过程 : 一切以实物的发展流程为中心 面向对象: 一切以对象为中心, ...

  4. day04 列表

    今天主要学习了 列表 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查 ...

  5. MYSQL数据库字母数字混合字段排序问题

    对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字.数字没有前导零,长度不固定.这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排 ...

  6. svn服务器搭建及使用(一)

    这里郑重感谢分享作者的辛苦:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html Subversion是优秀的版本控制工 ...

  7. jQuery $.each()常见的几种使用方法

    <code class="language-html"><!doctype html> <html> <head> <meta ...

  8. EF6增改删等常用基类

    using System; using System.Linq; using System.Threading.Tasks; using System.Linq.Expressions; using ...

  9. Linux:磁盘配额

    磁盘配额 一.简略步骤显示 第一步:关闭虚拟机 第二步:编辑虚拟机设置--硬盘--添加 第三步:查看磁盘分区情况 fdisk -l 第四步:选择磁盘分区 fdisk /dev/sda2 第五步:选择磁 ...

  10. wiki----为用户设置管理员权限

    wiki页面的管理员权限设置方法: wiki的页面好像没办法修改,只能在数据库中进行操作: 1.进入到wiki的安装目录下: #cd /var/www/html/wiki 2.查看wiki的配置文件, ...