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. [React] Capture values using the lifecycle hook getSnapshotBeforeUpdate in React 16.3

    getSnapshotBeforeUpdate is a lifecycle hook that was introduced with React 16.3. It is invoked right ...

  2. android中常见的内存泄漏和解决的方法

    android中的内存溢出预计大多数人在写代码的时候都出现过,事实上突然认为工作一年和工作三年的差别是什么呢.事实上干的工作或许都一样,产品汪看到的结果也都一样,那差别就是速度和质量了. 写在前面的一 ...

  3. 去掉文本框前后的空格(JS+JQuery)

    表单验证时,需要去除文本框前后的空格才可以正确通过验证.以前看到过一句话:任何设计和代码都要对用户足够宽容. <input type="text" class="p ...

  4. Palindrome Linked List 234

    推断是否为回文链栈 时间复杂度为O(n) 空间复杂度为O(1) : 运用递归 保证空间复杂度为O(1): 时间复杂度为O(n): 注意定义了一个全局变量 flag = true 用此标记来标记是否在推 ...

  5. 初探boost之noncopyable学习笔记

    noncopyable 功能 同意程序轻松实现一个不可复制的类. 需包括头文件 #include<boost/noncopyable.hpp>     或 #include<boos ...

  6. ubuntu下创建第一个rails应用程序

    一.创建一个新的应用程序 在控制台输入 > rails new  demo create create README.rdoc create Rakefile create config.ru ...

  7. QT4.86写中文XML

    网上都语焉不详.举例XML使用的时候,全部都是英文内容,当然不会失败了.尤其我还以VS2008编译,编译器的Character Set就有三种设置,配上QTextCodec::setCodecForC ...

  8. oc14--匿名对象

    // // main.m // 匿名对象 #import <Foundation/Foundation.h> #import "Person.h" #import &q ...

  9. Linux - xshell 链接CentOS 设置高亮

    默认是黑白的! 用了vim 指令还是黑白的. 两种途径设置,一种是通过Alt+P. 一种是选择配色方案来设置.

  10. [POJ 3621] Sightseeing Cows

    [题目链接] http://poj.org/problem?id=3621 [算法] 01分数规划(最优比率环) [代码] #include <algorithm> #include &l ...