python基础九之函数
1,函数的定义
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数分为自定义函数和内置函数,内置函数就是python内部自带的一些函数,如:print()、int()等。自定义函数是我们自己为了完成某个功能而自己写的函数。
- def func(): # 自定义函数
- print('zxc')
- """
- def关键字+函数名:
- 函数体
- 函数名的命名规则和变量的一样
- 函数体就是完成功能的代码
- """
2,函数的调用
函数名()即可调用函数。
- def func(): # 自定义函数
- print('zxc')
- # 函数的调用
- func() # 运行结果打印了zxc
3,函数的返回值
为了使用函数运行后的一些数据,我们需要函数调用后能够返回这些数据,所以就要定义返回值!
定义返回值的关键字是return
1,没有return和只有return,调用函数后返回None
- # 函数的返回值
- def re():
- s = 'zxc'
- print(re()) # None
- def re():
- s = 'zxc'
- return
- print(re()) # None
2,return加一个返回值的,通过变量=函数名()可以获取返回值
- def re():
- s = 'zxc'
- return s
- s1 = re()
- print(s1) # zxc
3,return加多个返回值的,通过一个或对应个数的变量来接收
一个接收的是所有返回值组成的一个元组
多个接收要对应返回值的个数,一一对应赋值
- def re():
- s = 'zxc'
- s1 = ''
- return s, s1
- a = re() # ('zxc', '123')赋值给a
- x, y = re() # zxc和123分别赋值给x和y
- # z, b, c = re() # 接收和返回的不对应 报错!
- print(a)
- print(x, y)
ps:在函数体中遇到return就会结束函数!
- def re():
- s = 'zxc'
- return s # 遇见return就结束函数
- print('')
- print(re()) # 返回zxc 但是123不会打印
4,函数的参数
函数的参数分为形参和实参
- def func(s): # s为形式参数 形参
- print(s)
- func('zxc') # zxc为实际参数 实参
以实参来看,只有两种,按位置进行传参和按关键字进行传参
- def func(x, y, z):
- print(x)
- print(y)
- print(z)
- # 以实参来看
- func(1, 2, 3) # 按位置进行传参 传递的参数个数必须要对应
- func(y=2, x=1, z=3) # 按照关键字进行传参 无须考虑位置关系
- func(1, z=3, y=2) # 在先按照位置传参的前提下后面的参数可以按照关键字进行传参
- # func(x=1, 2, 3) # 按关键字传参不能放在最前 报错
以形参来看,分为四种,位置参数、*args、默认参数、**kwargs
- def func(s, *args, default = '默认值', **kwargs):
- print(s) #
- print(args) # ('a', 'b', 'c')
- print(default) # 默认值
- print(kwargs) # {'s1': '123', 's2': '456'}
- func(1, 'a', 'b', 'c', s1='', s2='')
- l = ['a', 'b', 'c']
- d = {'s1': 123, 's2': 456}
- func(1, *l, **d) # 列表和元组加上*号可将其按顺序打散进行传参,字典加上**
- """
- s 接收位置参数 有必须传
- *args 动态参数 接收任意多个位置参数 将其组合为元组接收
- default = '默认值' 默认参数 没有实参就='默认值'
- **kwarges 动态参数 接收任意多个关键字参数 将其组合为字典接收
- 几种形参的先后顺序:
- 位置参数,*arges,默认参数,**kwarges
- """
默认参数的陷阱
- def func(li=[]):
- li.append(1)
- return li
- print(func()) # [1]
- print(func()) # [1, 1]
- print(func([1, 2])) # [1, 2, 1]
- print(func()) # [1, 1, 1]
- # 如果函数的默认参数的值是可变数据类型,不传参数多次调用将公用同一个值
5,函数的命名空间和作用域
- 内置命名空间,全局命名空间和局部命名空间
内置命名空间:python解释器加载时创建的命名空间,用于储存内置的一些数据名字和函数名字
全局命名空间:我们的代码从上到下运行时,将我们用到的命名储存起来的空间
局部命名空间:用于储存函数内部的命名的空间,函数调用时才会创建,结束时会消失
命名空间
- # 命名空间
- a = 1
- def func():
- b = 2
- def inner():
- c = 1
- print(a, b) # print在内置命名空间中,a在全局命名空间中,b在局部命名空间中
- inner()
- # print(c) # 报错 c在inner函数的命名空间中
- print(a)
- func()
- # print(b) # 报错 b在func函数的命名空间中
- """
- 通过上面的例子可以看出:内置命名空间 > 全局命名空间 > 局部命名空间
- 命名空间不能向下访问,只能向上访问!
- """
作用域
- # 作用域
- """
- 全局作用域和局部作用域
- 全局作用域:内置命名空间和全局命名空间中的都属于全局作用域 -- globals()获取全局作用域的内容
- 局部作用域:函数中的局部命名空间 -- locals()获取本地作用域的内容
- """
- a = 1
- c = 0
- def func():
- b = 1
- def inner():
- global a # 使a在局部的操作能够作用于全局
- a += 1
- nonlocal b # 使b在局部的操作能够作用于上一层
- b += 1
- inner()
- print(b) #
- # nonlocal c # 报错 说明nonlocal不能使局部的操作作用于全局
- # c += 1
- func()
- print(a) #
6,函数的嵌套
函数的嵌套调用
- # 函数的嵌套调用
- def func():
- print('zxc')
- def func1():
- func()
- func()
- # 在函数内部可以使用外部的已经定义好的函数
函数的嵌套
- # 函数的嵌套
- def func():
- def inner(): # 嵌套
- print('zxc')
- # inner() # 报错
- # 外部不能直接调用函数内部嵌套的函数
函数名的本质:一串内存地址
- """
- 函数名:第一类对象
- 1,函数名可以赋值
- 2,函数名可以作为容器类型的元素
- 3,函数名可以是参数和返回值
- """
- def func():
- print('zxc')
- ret = func # 赋值
- ret() # zxc
- def func():
- print('zxc')
- def func1():
- print('zxf')
- li = [func, func1] # 容器类型的元素
- for i in li:
- i() # zxc zxf
- def func():
- print('zxc')
- return func # 返回值
- def inner(f):
- f()
- ret = func()
- ret()
- inner(func) # 参数
7,闭包
- # 闭包
- def func():
- a = 1
- def inner():
- print(a)
- return inner
- ret = func()
- ret()
- """
- 在嵌套的内部函数中调用了外部函数的变量就会形成一个闭包。
- 功能: 当调用这个函数时,形成闭包调用的外部变量会专门保存到内存中,不会在函数结束是清除,
- 以便在多次调用时节省重复创建变量的时间。
- """
python基础九之函数的更多相关文章
- python基础——高阶函数
python基础——高阶函数 高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数a ...
- 初学Python(九)——函数
初学Python(九)--函数 初学Python,主要整理一些学习到的知识点,这次是函数. 函数定义: # -*- coding:utf-8 -*- #函数的定义 def my_function(x) ...
- python基础——内置函数
python基础--内置函数 一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
- 自学Python之路-Python基础+模块+面向对象+函数
自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的 ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
- 『Python基础-13』函数 Function
这篇笔记记录的知识点: 函数的基本概念 自定义函数 函数的几种参数 编程的三种方式: 1.OOP 面向对象编程,万物皆对象,以class为主,抽象化 2.POP 面向过程编程,万事皆过程,def定义过 ...
- python 基础篇 11 函数进阶----装饰器
11. 前⽅⾼能-装饰器初识本节主要内容:1. 函数名的运⽤, 第⼀类对象2. 闭包3. 装饰器初识 一:函数名的运用: 函数名是一个变量,但他是一个特殊变量,加上括号可以执行函数. ⼆. 闭包什么是 ...
- python基础之open函数和路径处理
前言 本次内容主要介绍文件处理open函数以及路径处理. 一.open函数 根据前面介绍的函数调用方式,调用open函数. #open函数调用 open() TypeError: open() mis ...
随机推荐
- 深入浅出Javascript闭包
一.引子 闭包(closure)是 Javascript 语言的一个难点,面试时常被问及,也是它的特色,很多高级应用都要依靠闭包实现.本文尽可能用简单易懂的话,讲清楚闭包的概念.形成条件及其常见的面试 ...
- php表单传值--GET和POST
一. 传值 1. 传值/接收方法: 1) GET(5种方式!) a) 表单Form: method = ‘get’ GET接收数据方式: b) ...
- PSPP:顶替SPSS常用功能的优秀软件, Linux 下的经济学用软件
几个替代SPSS的软体Salstat http://salstat.sourceforge.net/PSPP http://www.gnu.org/software/pspp/pspp.htmlR h ...
- man命令及help命令
一.man命令 man命令常用工具命令 man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助.配置文件帮助和编程帮助等信息. 语法: man(选项)(参数) 选项: -a: ...
- 六.基本数据结构-双端队列(Deque)
一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制 ...
- JS放在body与head中的不同
放在body和head其实差不多的,只不过是文档解析的时间不同.浏览器解析html是从上到下的.如果把javascript放在head里的话,则先被解析,但这时候body还没有解析,所以$(#btn) ...
- 自定义连接池DataSourse
自定义连接池DataSourse 连接池概述: 管理数据库的连接, 作用: 提高项目的性能.就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.所有的连接池必须实 ...
- Effective Modern C++:02auto
05:优先使用auto,而非显示类型声明 显示类型声明有下面一些缺点: int x; //未初始化,或者初始化为0,视语境而定 template<typename It> void dwi ...
- python 异常处理与流程控制
- MapReduce数据流-Partiton&Shuffle