1 函数的介绍

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

  1. 内置函数
  2. 自定义函数

2 函数的定义和调用

2.1 函数的定义和调用

  1. 定义
def  函数名([参数]):
代码块
[return 表达式]
  1. 调用/执行
函数名([参数])

2.2 函数的文档说明

'''
文档说明
'''

3 函数的4种类型

3.1 函数的4种类型

根据是否有参数和是否有返回值,函数分为4种类型

  1. 无参,无返
'''
没有参数
没有返回值 == return None
''' # 定义
def f1():
print('我学Python') # 调用
f1()
  1. 无参,有返
'''
没有参数
有返回值,这个方法调用执行后,得到一个值
''' # 定义
def f1():
print('我学Python')
return '函数' # 调用
f1() # 我学Python
ret = f1() # 我学Python
print(ret) # 函数
  1. 有参,无返
'''
有参数
没有返回值
参数:
1· 形参 变量名 num1
2. 实参 值 33
''' # 定义
def f1(num1):
print(num1) # 调用
f1(33) # 33
  1. 有参,有返
'''
有参数
有返回值
''' # 定义
def f1(num1):
return num1 # 调用
ret = f1(33)
print(ret) # 33
  1. return强调
'''
return的功能
函数中到return结束
如果 函数需要返回值,return写到最后
如果像结束方法,return
''' def f1():
print('begin...')
i = 1
while i<100:
print('i=%s' % i)
if i == 10:
return #到这里,函数结束
# break 如果是break,只是退出if判断
i+=1
print('over...') # 调用
f1()

3.2 函数的嵌套

def f2():
print('f2 begin...')
f1()
print('f2 begin...') def f1():
print('f1 ...') f2()

4 函数的参数

4.1 参数的介绍

  1. 可变和不可变参数

    1. 可变类型

      • 类似 c++ 的引用传递,如 列表(list),字典(dict),集合(set)。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
    2. 不可变类型
      • 类似 c++ 的值传递,如 整数(int)、浮点数(float)、布尔型(bool)、None、字符串(str)、元组(tuple)。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身
  2. 必选参数
  • 必选参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样
  1. 默认参数
  • 调用函数时,缺省参数的值如果没有传入,则被认为是默认值, e.g.def f1(num1, num2, oper='+')
  1. 可变参数

    1. 元组,列表

      • 在Python函数中,还可以定义可变参数。
      • 顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。参数组装成一个tutple
    2. 字典
      • 变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
      • 而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
'''
可变-元组
1. 如果传递的是列表或者元组,传递的时候要加*
2. 也可以直接传递一个一个的参数值,数量不限
''' def f1(*args):
print(type(args))
print(sum(args)) nums = (110, 119, 120)
f1(*nums) # typr->tuple sum->3 num1 = 120
num2 = 119
f1(num1, num2) # typr->tuple sum->2
'''
可变-字典
1. 如果传递的是字典,传递的时候要加上**
2. 也可以直接传递一个一个的参数键值对,数量不限
''' def f1(**kwargs):
print(type(kwargs)) f1(sid=1,sage=10,sname='老王')
f1(**{'sid':1, 'sage':10, 'sname':'老王'})
  1. 关键字参数
  • 对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。
  • 如果要限制关键字参数的名字,就可以用命名关键字参数
def f1(a,b):
print(a, b) f1(1,2)
f1(a=1,b=2)
f1(b=2,a=1)

4.2 参数组合的顺序

  • 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。
  • 但是请注意,参数定义的顺序必须是:

    必选参数、默认参数、可变参数。e.g.def f(a,b=1,*c,**d):

5 变量作用域

5.1 变量作用域介绍

一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:

  1. 全局变量
  2. 局部变量

5.2 局部变量

  1. 局部变量,就是在函数内部定义的变量
  2. 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
  3. 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用
局部变量
定义的位置
1. 定义在函数的变量
2. 定义成函数的参数
作用域
只有在函数里有效,函数运行完毕,垃圾回收机制会将局部变量回收

5.3 全局变量

  1. 如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量
  2. 如果要再函数中修改全局变量,使用global声明
全局变量
定义的位置
1. 函数的外部
2. 定义在函数内部,使用global声明
作用域
只要前面定义过了,以后任何地方都能用
注意
在函数体不能直接修改全局变量
如果想在内部修改全局变量,加global

5.4 全局和局部变量重名

如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量

5.5 小结

  1. 在函数外边定义的变量叫做全局变量
  2. 全局变量能够在所以的函数中进行访问
  3. 如果在函数中修改全局变量,那么就需要使用global进行声明
  4. 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧 强龙不压地头蛇

6 递归函数

  1. 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。

  2. 满足递归的条件:

    1. 有循环的内容
    2. 有跳出的条件
  3. 和循环的比较

  • 一般递归可以改成循环forwhile
  • 递归效率比较低,因为函数会反复调用占内存
# 1 1 2 3 5 8 13 21 ...
# 斐波那契数列
def rec(num):
if num==1 or num==2:
return 1
return rec(num-1) + rec(num-2) ret = rec(30) # 5! = 5*4*3*2*1
# 求阶乘
i = 1
num = 1
while i<11:
num*=i
i+=1 def rec(num):
if num==1:
return 1
return num*rec(num-1)
ret = rec(10)

7 匿名函数

  1. lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
  2. lambda函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression

    注意:

    1. lambda函数能接收任何数量的参数但只能返回一个表达式的值
    2. 匿名函数不能直接调用print,因为lambda需要一个表达式
def f1(a,b):
return a+b
f1(1,2) add = lambda a,b:a+b
add(1,2)

01.Python基础-5.函数的更多相关文章

  1. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  2. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  3. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  4. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  5. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  6. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  7. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  8. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

  9. Python学习笔记(一)python基础与函数

    1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world > ...

随机推荐

  1. windows下本地安装oracle忘记密码,账号被锁咋办

    忘记密码咋办: 进入cmd,输入set ORACLE_SID=ymxg  (ORACLE_SID的值为你想登录的oracle实例的SID) 然后输入:sqlplus / as sysdba 最后输入: ...

  2. js 清空对象\删除对象的属性

    在项目中,有些对象用完后需要重置,下面简单介绍下JS中清除对象的方法.方法如下: 方法一:字面量定义对象 第一步,定义一个空对象并打印出来,代码和效果: 代码: var student = {};co ...

  3. chcp - 设置或者显示活动代码页编号

    chcp - 设置或者显示活动代码页编号 学习了:https://baike.baidu.com/item/CHCP/9061635?fr=aladdin

  4. 好纠结啊,JeeWx商业版本号和开源版本号有什么差别呢?

    好纠结啊,JeeWx商业版本号和开源版本号有什么差别呢? JeeWx开源版本号是一套基础微信开发平台.有基础的微信菜单.素材管理.微信对接等基础功能,适合于开发人员学习研究. JeeWx商业版本号是一 ...

  5. [Javascript Crocks] Safely Access Object Properties with `prop`

    In this lesson, we’ll use a Maybe to safely operate on properties of an object that could be undefin ...

  6. 项目结构、包、编译为exe!

    一个java源文件里至多有一个public类,该类的名称必须与源文件名称称同样.也能够没有public类.文件名称与随意一个类名一致就可以. 包 类似于cpp的namespace,是对类的再封装,防止 ...

  7. 使用Lucene对预处理后的文档进行创建索引(可执行)

    时间: 2015/3/18 杨鑫newlife 对于文档的预处理后.就要開始使用Lucene来处理相关的内容了. 这里使用的Lucene的过程例如以下: 首先要为处理对象机那里索引 二是构建查询对象 ...

  8. laravel接口设计

    在各种公共方法都设计好,软件安装成功的条件下 routes/web.php中路由信息如下 <?php /* |------------------------------------------ ...

  9. Linux Shell Scripting Cookbook 读书笔记 2

    cat,script,find, xargs, tr, tmp文件,字符串截取,批量文件重命名,固定大小文件,自动化交互 1. cat的用法 压缩连续的空白行 cat -s file 也可以用tr,将 ...

  10. merge into语句的使用

    merge语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入. 其基本语法规则是 merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a ...