函数基本类型
无参数,无返回值
一般用于提示信息打印
def myprint():
print('-' * 20)
无参数,有返回值
多用于数据采集中,比如获取系统信息
def mycpu():
# 获取cpu、数据库等信息
return info
有参数,无返回值
多用于设置某些不需要返回值的参数设置
def set (a):
pass
有参数,有返回值
一般是计算类型的,需要参数,最终也需要返回结果
def cal(a,b):
c = a + b
return
全局变量和局部变量
局部变量
生效范围仅在函数内部
不同的函数,可以定义相同的局部变量,但是互不影响
用于临时保存数据,需要在函数中定义来进行存储
def printInfo():
name='Lixiaoming'
print('{}'.format(name))
pass
def TestMethod():
name='Wangxiaoming'
print(name)
pass
TestMethod() # 不生效
printInfo() # 生效
全局变量
pro作用域是整个文件,name只是在限定函数内部有用
局部变量优先于全局变量
函数内部使用局部变量修改全局变量,可以使用global 关键字声明
name='Hanmeimei'
pro='计算机信息管理'
def printInfo():
# name='Lixiaoming'
print('{}.{}'.format(name,pro))
pass
def TestMethod():
name='Wangxiaoming'
print(name,pro)
pass
def changeGlobal():
'''
修改全局变量
:return:
'''
global pro # 用局部变量修改全局变量的一个声明
pro='市场营销' # 局部变量
pass
changeGlobal()
print(pro)
printInfo()
TestMethod()
函数参数引用传值
a=1 # 不可变类型
def func(x):
print('x的地址:{}'.format(id(x)))
print(x)
x=2
print('x修改后的地址:{}'.format(id(x)))
print(x)
pass
print('a的地址:{}'.format(id(a)))
func(a)
print(a)
可变类型
python中万物皆对象吗,在函数调用中,实参传递的本质是对象的引用
参数传递通过对象引用来完成
li=[]
def testRenc(parms):
print(id(parms))
pass
print(id(li))
testRenc(li)
li=[]
def testRenc(parms):
li.append([1,2,45,4564])
print(id(parms))
print('内部的变量对象:{}'.format(parms))
pass
print(id(li))
testRenc(li)
匿名函数
匿名函数
python中使用lambda关键字创建匿名函数
所谓匿名即这个函数并没有名字不用def关键字创建标准的函数
语法 lambda 参数1,参数2,参数3:执行代码语句 可以有n个参数
注意
匿名函数冒号后面的表达式以后且只有一个,是表达式而不是语句.
匿名函数自带return,return的结果就是表达式计算的结果
比如使用lambda表达式计算两个数的和
test = lambda x,y:x+y
test(1,3)
test(4,5)
换成普通函数既是:
def test(x,y):
return x + y
普通函数
def computer(x,y):
'''
计算数据和
:param x:
:param y:
:return:
'''
return x+y
pass
print(computer(10,25))
匿名函数
M=lambda x,y:x+y
print(M(23,19)) # 通过变量去调用函数
result=lambda a,b,c:a*b*c
print(result(155,12,11))
age=15
print('可以参军' if age>18 else '继续上学')
funcTest=lambda x,y:x if x>y else y
print(funcTest(12,11))
rs=(lambda x,y:x if x>y else y)(16,12)
print(rs)
varRs=lambda x:(x**2)+890
print(varRs(10))
递归函数
递归函数
如果有一个函数在内部不调用其他函数,只有自己本身,称为递归函数
递归函数必须有一个结束条件,否则报错
递归调用条件:自己调用自己,必须有一个出口(明确的结束条件)
优点:逻辑简单,定义简单
缺点:容易导致栈溢出
例如:求5!=54321
遍历方式实现5!
def jiecheng(n):
result = 1
for item in range(1,n+1):
result*=item
pass
return result
print('5的阶乘:{}'.format(jiecheng(5)))
递归方式实现
def diguiJc(n):
'''
递归实现
:param n:阶乘参数
:return:
'''
if n==1:
return 1
else:
return n*diguiJc(n-1)
pass
print('5的阶乘:{}'.format(diguiJc(5)))
递归案例:树形结构的遍历
import os #引入文件操作模块
def findFile(file_Path):
listRs = os.listdir(file_Path) #得到该路径下面所有文件夹
for fileItem in listRs:
full_path = os.path.join(file_Path,fileItem) # 组合完整文件路径
if os.path.isdir(full_path): #判断是否是文件夹
findFile(full_path) #如果是一个文件夹,再次递归
else:
print(fileItem)
pass
pass
else:
return
pass
#调用搜索文件夹对象
findFile('D:\\研一上学期')