一、函数的简介
1、什么是函数
- 其实函数就是一个代码段,这段代码可以重复的执行,通过函数可是实现代码段的复用
- 函数是不能自己主动执行的,必须被调用的时候才能被执行
2、Python的模块
- 一个Python文件,就是一个模块
3、函数分类
- 全局函数:直接定义在模块中的函数就是全局函数
- 局部函数:定义在函数内部的就是局部函数
- 匿名函数:也被称为lambda函数,其实就是一个表达式
- 方法:方法也是一种函数,知识函数需要和特点的数据类型绑定使用
4、函数定义
def 函数名():
语句
语句
...
5、调用函数
函数名()
6、执行函数的结果
- 函数的输出:在函数中用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)
7、函数的说明文档
- 一般情况下,每个函数都应该有个说明文档,来解释这个函数的作用及使用方法
- 查看函数的说明文档的方法
函数名.__doc__
二、变量的作用域
- 本地变量:定义在模块中的【主程序中的变量】,有效范围是整个Python文件,包括主程序和函数内部
- 局部变量:在函数中定义变量,默认有效范围仅仅在函数内部
- 内置变量:由Python自己定义的
注意事项:
- 变量的作用越小,优先级越高
- 局部变量优先级 > 本地变量
- 修改局部变量,不会修改全局变量
- 程序找变量的过程
- 首先找到最近变量,如果有,就直接使用,如果没有,就向上层找
三、函数传递参数
def 函数名(变量): 代码
1、参数的默认值:
- 如果函数要求传递参数,但是调用的时候没有传递参数,那么程序就会报错
案例:函数有四个参数,name,age,tel,addl,要求必须传递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)
2、基于关键字来进行传递参数
- 要求:定义函数的时候参数的名字必须和调用是时候参数的名字一致
- 格式
# 定义函数
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")
向函数来传递列表和字典
-
传递列表
def fun1(*p1): # 如果想通过列表来传递参数,那么形参需要这样写
print(p1)li = ["tom","jerry",18,136666,"jack"]
fun1(li) # 将列表当成一个整体,传递给函数
fun1(*li) # 将列表中的每个元素单独作为一个元素传递到函数中
- 传递字典
def fun1(**p1): # 如果想通过列表来传递参数,那么形参需要这样写
print(p1)d1 = {"name":"tom","age":18,"addr":"hebei"}
fun1(**d1) # 将列表中的每个元素单独作为一个元素传递到函数中
案例:编写一个函数,输入三个数,输出最大值
import sys
def com(x,y,z):
maxNum=x;
if y>maxNum:
maxNum=y;
if z>maxNum:
maxNum=z
return maxNuma=input("please input first number:",)
b=input("please input second number:",)
c=input("please input third number:",)
m=com(a,b,c)
print("a,b,c中最大值为:",m)
案例:统计字符串中不同字符的个数
import sys
def deal_char(li):
list=[]# list.append(float(max(li)))
# list.append(float(min(li)))
upper=0
lower=0
num=0
other=0
# str.__len__()
for i in range(li.__len__()):
if li[i].isupper():
upper+=1
elif li[i].islower():
lower+=1
elif li[i].isnumeric():
num+=1
else:
other+=1
list.append(upper)
list.append(lower)
list.append(num)
list.append(other)print("list:",list)
return tuple(list)
if __name__=="__main__":
# print("请输入一个序列:")
# while
ll=input("please input some char(or a string):",)# print(type(lll))
deal=deal_char(ll)
print("tuple contain count with upper char,lower char ,number and others:",deal)