内容大纲:

1.函数基本语法与特性

2.参数与局部变量

3.返回值

4.递归

5.匿名函数lambda

6.函数式编程介绍

7.高阶函数

8.内置函数

1.函数基本语法与特性

函数的定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需要调用其函数名即可。

BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。

特性:1.减少重复代码 2.是程序变得可以扩展 3.使程序变得易维护

语法定义:

 def func():          # 定义一个函数 func为函数名
     print("Hello  World!")

 func()   # Hello  World!  # 调用函数

函数还可以带参数:

 #! /usr/bin/env python3

 a, b = 4, 5
 sum_ = a + b
 print(sum_)

 # 上面的代码等价于下面这段代码
 def sum_x_y(x, y):
     s = x + y
     return s          # 这里是函数的返回值

 print(sum_x_y(a, b))  # 其中,x, y 叫做形参,a,b叫实参

2.函数的参数和局部变量

如果你仔细些,你可能在1的代码注释中已经留意到形参和实参了,回去看看吧。

形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

默认参数:

 def stu_register(name, age, course, country="CN"):
     print("----注册学生信息------")
     print("姓名:", name)
     print("age:", age)
     print("国籍:", country)
     print("课程:", course)

 stu_register("alex", 32, "python_devops")
 stu_register("武sir", 28, "linux")
 stu_register("zingp", 18, "openstack")

注意: 默认参数必须放在非默认参数的后面。

关键参数:

 stu_register('alex', course="python", age=22)

正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。

非固定参数

若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

*args:

 def stu_register(name, age, *args):  # *args 会把多传入的参数变成一个元组形式
     print(name, age, args)

 stu_register("Alex", 32)
 stu_register("zingp", 18, "CN", "openstack")

 # Alex 32 ()
 # zingp 18 ('CN', 'openstack')

像第7行那样,如果没有传参,那就是空的元组。

**kwargs:

 def stu_info(name, age, *args, **kwargs):  # *kwargs 会把多传入的参数变成一个dict形式
     print(name, age, args, kwargs)

 stu_info("Alex", 32)
 stu_info("zingp", 18, "CN", "openstack", sex="Male", province="BeiJing")
 # Alex 32 () {}
 # zingp 18 ('CN', 'openstack') {'sex': 'Male', 'province': 'BeiJing'}

全局与局部变量

  在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
  全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
  当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
补充:global关键字

  如果你想要为一个定义在函数外的变量赋值,那么你就得告诉python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。

  你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。

 def f(x):
     print("first,x is : %s" % x)
     x = 'hello'
     print("now,x is : %s" % x)

 x = 100
 f(x)
 print(x)
 # 结果:
 # first,x is : 100
 # now,x is : hello
 
 def f():
     global x
     print("first,x is : %s" % x)
     x = 'hello'
     print("now,x is : %s" % x)

 x = 100
 f()
 print(x) 

 # 执行结果:
 # first,x is : 100
 # now,x is : hello
 # hello

global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,也就是全局变脸x的值变成了新的值所以第9行代码结果是hello。

你可以使用同一个global语句指定多个全局变量。例如global x, y, z。

3.函数的返回值

要想获取函数的执行结果,就可以用return语句把结果返回

注意:

  1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
  2. 如果未在函数中指定return,那这个函数的返回值为None

取个栗子~~~

 def f1(a):
     return a
 name = f1('alex')
 print('f1:',name)
 # f1: alex

 def f2(a):
    print('hello', a)

 name = f2('alex')
 print('name:', name)
 # hello alex
 # name: None

python【第三篇】函数的更多相关文章

  1. python的三个函数(eval、exec、complie)和python版RMI

    一.python的三个函数: 1.eval函数: 之前已经讲过了这个函数,该函数也类似于php的eval,例如下边这个例子 eval("os.system('id')") 但是有个 ...

  2. Python第三周 函数详解

    def 函数名(): """注释说明"""" 执行逻辑体 return 返回值 定义不带参数的函数 带参数的函数 默认参数 这个是 ...

  3. Python 第三篇(上):python文件基础操作、json模块、lambda、map、filter、reduce和函数位置参数

    python一切皆对象,linux一切皆文件,python操作文件是很常见的O/I操作,其内置来open()函数可以完成文件的基本操作: 一:使用内置open()函数操作文件,基本语法如下: with ...

  4. Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数

     一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...

  5. Python 基础三 文件 函数

    今天回顾一下之前学的文件操作相关知识点,对于文件的操作,主要有一下几部分构成: 一.文件的基础知识 1.文件操作的基本流程 文件操作其实可以分成三大部分: 1.打开文件,获取文件句柄并赋予一个变量 2 ...

  6. 人生苦短我用Python 第三周 函数周

    函数的定义: 1,def 函数名(参数1,参数2......): "注释:函数的作用和参数,增加可读性", 2,函数体 3,返回值 最简单的函数: def func(): prin ...

  7. python第三课--函数

    函数的作用 编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题.例如3次求阶乘: m = int(input( ...

  8. 新手Python第三天(函数)

    Python 函数的创建 def func2(): print('haha') # 函数的返回值 # 函数的返回值,没有定义返回None, # 有一个返回值返回这个object(可以返回一个函数对象) ...

  9. python第三篇:python、flask关系映射

    python中关系映射主要包括三种:一对多关系映射.一对一关系映射.多对多关系映射. 一对多关系映射 一方:Student(学生) 添加关联属性和反向引用 多方:Article(文章) 添加外键关联 ...

  10. 进击python第三篇:基础

    基础拾遗 序列解包 例: >>>x,y,z=1,2,3 >>>print x,y,z 1 2 3 交换变量也是没问题 >>>x,y=y,x > ...

随机推荐

  1. Kafka中错误:Unrecognized VM option ‘UseCompressedOops’ Error: Clould not create the Java Vritual Machine. Error: A fatal exception has occurres . Program will exit.

    错误的描述: 在kafka安装目录下,执行 $ bin/zookeeper-server-start.sh config/zookeeper.properties & Unrecognized ...

  2. BZOJ 1835: [ZJOI2010]base 基站选址 [序列DP 线段树]

    1835: [ZJOI2010]base 基站选址 题目描述 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立 ...

  3. app启动其他应用

    因开发需要内包一个app,所以要启动一个app,这种操作 如果知道包名和类名 其实很简单 只需要将包名内嵌即可(一般情况 我们都可以解压或者反接拿到) 代码如下: Intent intent = ne ...

  4. toString&&equals方法

    toString&&equals方法 先来看看这个题该怎样做? 分析: 1.java里的三大特性,有封装,继承,多态(方法的重载),super,this等关键字 2.常用的方法,equ ...

  5. java.lang包

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.特性——不用import 2.String String x = "abc"; < ...

  6. windows下安装pip

    1.在安装pip前,请确认win系统中已经安装好了python,和easy_install工具,如果系统安装成功,easy_install在目录C:\Python27\Scripts 下面,确认截图如 ...

  7. 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)

    问题: 当file_get_content()函数的参数  url中是localhost时不能抓取,是127.0.0.1时可以抓取到静态html代码.实现页面静态化技术提高访问效率. test.php ...

  8. POJ1330Nearest Common Ancestors——近期公共祖先(离线Tarjan)

    http://poj.org/problem? id=1330 给一个有根树,一个查询节点(u,v)的近期公共祖先 836K 16MS #include<iostream> #includ ...

  9. ROS中Mangle解析

    http://blog.csdn.net/bluecy/article/details/8192307

  10. centos安装g++

    安装: yum -y install gcc automake autoconf libtool make 安装g++: yum install gcc gcc-c++