函数是什么
函数特性
减少重复代码
使程序变得可扩展
使程序变得易维护
函数参数
形参实参
一个是实际存在的值(实参),一个是调用才会用到的值(形参)
默认参数
关键参数
一个参数不能同时接受两个值,关键参数要在位置参数后面
如果参数中出现 *user,传递的参数就可以不再是固定个数,传过来的所有参数打包给元祖
报警给多个人发送,且可以一直添加
方式一
方式二
非固定参数
函数的返回值
#定义在函数外部的一级代码的变量,叫全局变量,全局能用
#局部变量就是指定义在函数里的变量,只能局部生效
#在函数内部,可以引用全局变量
#如果全局和局部都有一个变量,叫name,函数查找变量都顺序是由内而外的
要在函数里面改全局变量
global name
#局部变量,在函数里面的变量就叫局部变量
name = "xiaoheb"
def change_name():
global name
name = "黑心的奸商"
age = 25
print("在",name,"的妈里面...",id(name))
change_name()
print(name,id(name))
#定义在函数外部的一级代码的变量,叫全局变量,全局能用
#局部变量就是指定义在函数里的变量,只能局部生效
#在函数内部,可以引用全局变量
#如果全局和局部都有一个变量,叫name,函数查找变量都顺序是由内而外的
引用全局要吧global放在上边 (但不建议用)
#局部变量
names = ['heb','hebwife','xuyang']
def change_name():
del names[2]
print(names)
change_name()
print(names)
#字符串,数组不可以被修改
嵌套函数
age = 19
def func1():
age = 213
print(age)
def func2():
print(age)
func2()
func1()
#3. func1() # 213,213
作用域
python中的函数就是一个作用域
匿名函数
#匿名函数
def clac(x,y):
if x < y :
return x * y
else:
return x/y
func = lambda x,y:x*y if x < y else x/y #lambda 声明一个匿名函数
print(clac(14,2))
print(func(14,2))
data = list(range(10))
print(data)
def f2(n):
return n*n
print(list(map(lambda x:x*x,data)))
#1.节省代码量
#2.看起来更高级
高阶函数
#变量可以指向函数,函数的参数可以接受变量,那么一个函数就可以接受另一个函数作为参数,这种函数就称为高阶函数
函数 - 递归
#把10不断除以2直到不能除为止,打印每次结果
# n = 10
#
# while True:
#
# n = int(n/2)
# print(n)
# if n == 0:
# break
# def clac(n):
# n = int(n/2)
# return n
import sys
print(sys.getrecursionlimit())
#递归
def func():
pass
def clac(n):
n = int(n/2)
print(n)
if n > 0:
clac(n)
clac(10)
def calc(n,count):
print(n,count)
if count < 5:
calc(n/2,count+1 )
calc(188,1 )
递归特性
练习题