目录
一、函数简介
什么是函数:
-
其实就是一个代码段,这段代码可以重复的执行,通过函数可以实现代码的复用
-
函数是不能自己主动执行的,必须被调用的时候才能被执行
python的模块
-
一个python文件,就是一个模块
函数分类
-
全局函数:直接定义在模块中的函数就是全局函数
-
局部函数:定义在函数内部的子函数,这样的函数就是局部函数
-
匿名函数: 也称之为lambda函数,其实是一个表达式
-
方法:方法也是一种函数,只是函数需要和特点的数据类型绑定使用
定义函数
def 函数名():
语句
语句
...
调用函数
函数名()
案例:
def f1():
print("1")
print("ok")
print("2")
print("start process...")f1()
print("over")
执行函数的结果
-
函数的输出:在函数中用print来输出一个结果,这个可以可以直接显示
输出用:print
输出结果:可以直接打印出来
-
函数的返回值:在函数中用return 来返回一个或者多个结果,这个结果可以用来接收,一旦执行到return,那么return后面的代码就不会再执行了,也就是会直接退出函数,返回到主程序继续运行
返回用:return
返回值:可以再主程序进行接收,如果返回多个值,那么多个值会保存成一个元组
案例:让用户在函数中输入两个数据,将大的数字加1并打印出来
def f1():
num1 = int(input("请输入第一个数字:"))
num2 = int(input("请输入第二个数字:"))
if num1 > num2:
return num1
else:
return num2res = f1()
print(res+1)
函数的说明文档
-
一般情况先,每个函数都应该有个说明文档,来解释这个函数的作用以及使用方法
-
查看函数的说明文档的方法
函数名.__doc__
案例:
def f1():
"""
这是我们的一个测试函数,函数的没有输出,但是有返回值,返回是3
这个函数有xxxx
欢迎使用这个
.....
:return:
"""name = "tom"
age =3
addr = "hebei"
return name,age,addrprint(f1.__doc__)
二、变量的作用域
-
本地变量:定义在模块中的【主程序中的变量】,有效范围是整个python文件,包括主程序和函数内部
-
局部变量:在函数中定义变量,默认有效范围仅仅在函数内部
-
内置变量:由python自己定义的
注意事项:
-
变量的作用范围越小,优先级越高
-
局部变量优先级 > 本地变量
-
修改局部变量,不会修改全局变量
-
程序找变量的过程
-
首先找最近的变量的,如果有就直接使用;如果没有,就向上层查找
-
def f1():
x = 2 # 局部变量
z = 5 # 局部变量
print(x,y,z)x = 1 # 全局变量
y = 3 # 全局变量print(x,y) # 输出 x 是 1,y 是 3
f1() # 将 x 改为 2,z 设置为5 ,然后输出x y z 也就是输出 2 3 5
print(x,y) # 输出 x 和 y, 此时 x 是 1,y 是 3
默认情况下:函数中的变量是局部变量,但是可以用关键字:global将变量明确指定成全局的
x = 1 # 全局变量
y = 3 # 全局变量def f1():
x = 2 # 局部变量
z = 5 # 局部变量
global y # 全局变量【将局部变量y转换为全局变量】
y = 0 # 为转换后的全局变量赋值 0
print(x,y,z)print(x,y) # 输出 x 是 1,y 是 3
f1() # 将 x 改为 2,z 设置为5 ,然后输出x y z 也就是输出 2 3 5
print(x,y) # 输出 x 和 y, 此时 x 是 1,y 是 0
三、函数传递参数
def 函数名(变量):
代码
案例
def printWellcome(userName):
print("欢迎 %s 来到python"%(userName))userInput = input("请输入姓名:") # tom 被传递给 userInput 变量
printWellcome(userInput) # 调用函数,在调用的时候,将userInput中的值传递给函数
案例:用函数实现计算器功能
def printWellcome(num1,num2,fuhao):
if fuhao == "+":
res = num1 + num2
elif fuhao == "-":
res = num1 - num2
if fuhao == "*":
res = num1 * num2
elif fuhao == "/":
res = num1 / num2# return res
print(res)userInput1 = int(input("请输入一个数字:"))
userInput2 = int(input("请输入一个数字:"))
userInput3 = input("请输入要执行的运算符 + - * /:")
printWellcome(userInput1,userInput2)# num = printWellcome(userInput1,userInput2,userInput3)
# print(num)
参数的默认值:
-
如果函数要求传递参数,但是调用的时候没有传递,那么就会报错
案例1:
def printWellcome(name="jack"): # name = “jack“ 这是为参数设置默认值
print("hello %s"%(name))userInput1 = input("请输入姓名:")
printWellcome() # 调用函数,没有向函数传递参数,此时函数会使用参数的默认值
printWellcome(userInput1) # 调用函数,向函数传递参数,此时函数会使用传递进来的参数
案例2:函数有四个参数,name,age,tel、addr,要求必须 传递name和age,tel和addr两个参数可以不传递,如果用户没有给tel和addr传递参数,默认用nul
def printWellcome(name, age, tel="nul", addr="nul"):
print("姓名是%s, 年龄是%s, 电话是%s, 地址是%s"%(name,age,tel,addr))userInput1 = input("请输入姓名:")
userInput2 = input("请输入年龄:")
userInput3 = input("请输入电话:")
userInput4 = input("请输入地址:")printWellcome(userInput1,userInput2)
printWellcome(userInput1,userInput2,userInput3)
printWellcome(userInput1,userInput2,userInput3,userInput4)
基于关键字来进行传递参数
-
要求:定义函数时候参数的名字必须和调用时候参数的名字一致
-
格式
# 定义函数
def fun1(p1,p2,p3="nul"): # 此时参数的名字分别是p1 p2 p3# 调用函数
fun1(p1=xx,p2=xx) # 此时必须明确指定p1=x p2=x p3=x
四、传递任意个参数
- 魔法赋值
方法1 def fun1 (*参数)
-
此方法用于接受任意个参数,得到的是一个元组
def fun1(*p1):
print(p1) # p1用于接收和保存传递进来的多个参数,多个参数是以元组的形式保存的fun1()
fun1("a")
fun1("a","b") # 向函数传递多个参数
方法2 def fun2 (**参数)
-
此方法用于接受任意个参数,得到的是一个字典
def fun1(**p1):
print(p1) # p1用于接收和保存传递进来的多个参数, 数据是以字典的形式保存的fun1()
fun1(name="tom")
fun1(name="tom", age="18")
fun1(name="tom", age="18", addr="hebei")