1.python中函数概述
概念
模块化编程的思想
有组织,可共享(重复使用,实现特定的功能的代码块)
提高程序的可维护性,提高开发效率,提高代码的重用性
定义一个函数
1.语法:
def 函数名称(形参列表):
函数体/代码块
return 返回值
2.定义参数介绍
def :关键字 用于函数的定义,函数的构建,表示当前正在定义一个函数
函数名称: 函数的名字,方便调用函数
():定义函数,向3函数中传递所有参数 需要在此处定义
函数体:以 冒号开头,缩进表示区域,多行代码组成
return: 表示函数的结束,返回一个结果给调用方,
可以省略不写,返回一个None
3.函数名称的命名规则
遵循标识符的命名规则
不能使用系统内置的函数名称,避免函数的冲突和覆盖
函数的调用
自定义变量 = 函数名称(实参列表)
函数需要调用才执行
调用的次数没有限制
函数的类型
系统内置的函数u()
print()
自定义函数()
2.函数氵参数
参数的类型
形参: 定义函数时,在()中定义的形式参数,在函数调用时才分配空间,函数调用完毕后回收空间
形参是有一定的生命周期的
实参: 函数被调用时,在()中填入的参数,实际数据
2.形参
类型1:普通参数,以正确的顺序和数量声明的参数
类型2:关键字参数,函数调用时使用关键字参数来确定传入的数据,允许函数嗲用是参数顺序和申明时不一致
类型3:默认参数 在调用时,实参可以不传递,当前默认参数需要在普通参数后面定义
命名关键字参数
这个*就是用来分隔关键字参数和普通参数的
*本身不是一个参数
参数的顺序
普通参数 默认参数 收集参数
在实参前面加上*,会将容器类参数,拆分出来进行传递
4.返回值
有返回值的函数:
使用 return 返回结果
没有返回值的函数
执行过程的函数,不需要接受最终的 处理结果+
return 关键字
返回多个值 也OK
python中函数参数和返回值
返
python中函数文档
help()查看函数文档
__doc__ 查看函数文档
自定义函数文档
在函数的代码块的开头使用多行注释 描述函数的说明
有一种函数叫做匿名函数,匿名函数就是没有名字呗
lambda表达式->创建匿名函数
语法:lambda 参数列表 : 函数体(方法体)
案例:
add = lambda a,b : a+b
print(add(1,2)
python中函数参数的传递
python中变量的生命周期
可更改对象和不可更改对象
可更改对象:在内存中存储的数据是允许更改的
list dict
不可更改对象: 在内存中复制一个空间 相当于创建了一个父本一样
Number String tuple set
参数的传递
传递的参数是不可更改对象: 值传递
传递的参数是可更改对象: 地址传递
五 变量的生命周期和作用域
变量的作用域
定义在函数内的变量,具有局部作用域
定义在函数外的变量,函数外,具有全局的作用域
作用域
全局变量:
在函数外部声明的变量,具有全局作用域
在函数外部和函数内部正常访问和操作
局部变量:
在函数内部声明的变量,具有局部的作用域
在函数内部进行访问
查看当前可以使用的局部变量
locals() 返回值 字典类型的当前函数的可以使用的局部变量
globals() 查看当前位置的所有的全局变量
变量作用域的转换
将局部变量转换为全局变量
global 变量名
使用global 提升了的变量才是严格意义上的变量,后续可以对其进行各种操作
而直接在函数外声明的全局变量,只可以才局部进行访问,无法进行修改等而其他 操作
global 对于当前位置来说,知识当前提升了
其他函数也是相当于普通的外部变量,但是无法修改其变量值
num1 = 1
def f1():
函数内部可以访问,num1,不能修改num1
在当前位置提升变量的作用域
def f2():
num2 = 2,局部变量,在外部访问num2,在当前位置 用global修饰
就可以在外部访问num2了
在当前位置,可以修改,无法修改
回顾
重点:
定义
格式
调用
实际参数 *
函数文档
这个可有用的
函数参数
各种 类型的参数 的传递
函数返回值
多个值的情况
变量的作用域
global
变量的声明周期(可变对象和不可变对象)
参数的值传递和地址传递
能不能改的问题
作业
1. 打印1-100之间所有能被7整除但是不能被5整除的所有数
2. 简易计算器: 实现 加 减 乘 除
编写计算器函数 (调用这个计算器函数)
1. 从控制台打印如下图形
123456
234567
345612
456123
561234
612345